README-pt-BR.md
:information_source: Este repositório contém perguntas e exercícios sobre vários tópicos técnicos, às vezes relacionados a DevOps e SRE
:bar_chart: Atualmente, existem 2624 exercícios e perguntas
:warning: Você pode usá-los para se preparar para uma entrevista, mas a maioria das perguntas e exercícios não representam uma entrevista real. Por favor, leia a página de FAQ para mais detalhes
:stop_sign: Se você está interessado em seguir uma carreira como engenheiro de DevOps, aprender alguns dos conceitos mencionados aqui seria útil, mas você deve saber que não se trata de aprender todos os tópicos e tecnologias mencionados neste repositório
:pencil: Você pode adicionar mais exercícios enviando pull requests :) Leia sobre as diretrizes de contribuição aqui
</b></details>
<details> <summary>O que é TCP/IP?</summary> <b>Um conjunto de protocolos que definem como dois ou mais dispositivos podem se comunicar.
Para saber mais sobre TCP/IP, leia aqui
</b></details>
<details> <summary>O que é Ethernet?</summary> <b>Ethernet simplesmente se refere ao tipo mais comum de Rede de Área Local (LAN) usada hoje. Uma LAN — em contraste com uma WAN (Rede de Área Ampla), que abrange uma área geográfica maior — é uma rede conectada de computadores em uma pequena área, como seu escritório, campus universitário ou até mesmo em casa.
</b></details>
<details> <summary>O que é um endereço MAC? Para que é usado?</summary> <b>Um endereço MAC é um número ou código de identificação único usado para identificar dispositivos individuais na rede.
Pacotes que são enviados na ethernet estão sempre vindo de um endereço MAC e sendo enviados para um endereço MAC. Se um adaptador de rede está recebendo um pacote, ele compara o endereço MAC de destino do pacote com o próprio endereço MAC do adaptador.
</b></details>
<details> <summary>Quando este endereço MAC é usado?: ff:ff:ff:ff:ff:ff</summary> <b>Quando um dispositivo envia um pacote para o endereço MAC de broadcast (FF:FF:FF:FF:FF:FF), ele é entregue a todas as estações na rede local. Broadcasts Ethernet são usados para resolver endereços IP para endereços MAC (por ARP) na camada de enlace de dados. </b></details>
<details> <summary>O que é um endereço IP?</summary> <b>Um endereço de Protocolo de Internet (endereço IP) é um rótulo numérico atribuído a cada dispositivo conectado a uma rede de computadores que usa o Protocolo de Internet para comunicação. Um endereço IP serve a duas funções principais: identificação de host ou interface de rede e endereçamento de localização. </b></details>
<details> <summary>Explique a máscara de sub-rede e dê um exemplo</summary> <b>Uma máscara de sub-rede é um número de 32 bits que mascara um endereço IP e divide os endereços IP em endereços de rede e endereços de host. A Máscara de Sub-rede é feita definindo os bits de rede como todos "1"s e os bits de host como todos "0"s. Dentro de uma determinada rede, do total de endereços de host utilizáveis, dois são sempre reservados para fins específicos e não podem ser alocados a nenhum host. Estes são o primeiro endereço, que é reservado como um endereço de rede (também conhecido como ID de rede), e o último endereço usado para broadcast de rede.
</b></details>
<details> <summary>O que é um endereço IP privado? Em quais cenários/designs de sistema, deve-se usá-lo?</summary> <b> Endereços IP privados são atribuídos aos hosts na mesma rede para se comunicarem uns com os outros. Como o nome "privado" sugere, os dispositivos com endereços IP privados atribuídos não podem ser alcançados por dispositivos de nenhuma rede externa. Por exemplo, se eu estou morando em um albergue e quero que meus colegas de albergue entrem no servidor de jogo que hospedei, pedirei a eles que entrem através do endereço IP privado do meu servidor, já que a rede é local para o albergue. </b></details> <details> <summary>O que é um endereço IP público? Em quais cenários/designs de sistema, deve-se usá-lo?</summary> <b> Um endereço IP público é um endereço IP voltado para o público. No caso de você estar hospedando um servidor de jogo que deseja que seus amigos entrem, você dará a seus amigos seu endereço IP público para permitir que seus computadores identifiquem e localizem sua rede e servidor para que a conexão ocorra. Uma vez que você não precisaria usar um endereço IP voltado para o público no caso de estar jogando com amigos que estavam conectados à mesma rede que você, nesse caso, você usaria um endereço IP privado. Para que alguém possa se conectar ao seu servidor que está localizado internamente, você terá que configurar um encaminhamento de porta para dizer ao seu roteador para permitir o tráfego do domínio público para sua rede e vice-versa. </b></details> <details> <summary>Explique o modelo OSI. Quais camadas existem? Pelo que cada camada é responsável?</summary> <b>Você pode ler mais sobre o modelo OSI em penguintutor.com </b></details>
<details> <summary>Para cada um dos seguintes, determine a qual camada OSI pertence:Unicast: Comunicação um-para-um onde há um remetente e um receptor.
Broadcast: Envio de uma mensagem para todos na rede. O endereço ff:ff:ff:ff:ff:ff é usado para broadcasting. Dois protocolos comuns que usam broadcast são ARP e DHCP.
Multicast: Envio de uma mensagem para um grupo de assinantes. Pode ser um-para-muitos ou muitos-para-muitos. </b></details>
<details> <summary>O que é CSMA/CD? É usado em redes ethernet modernas?</summary> <b>CSMA/CD significa Carrier Sense Multiple Access / Collision Detection. Seu foco principal é gerenciar o acesso a um meio/barramento compartilhado onde apenas um host pode transmitir em um determinado momento.
Algoritmo CSMA/CD:
Um roteador, switch e hub são todos dispositivos de rede usados para conectar dispositivos em uma rede de área local (LAN). No entanto, cada dispositivo opera de maneira diferente e tem seus casos de uso específicos. Aqui está uma breve descrição de cada dispositivo e as diferenças entre eles:
Três domínios de colisão e um domínio de broadcast </b></details>
<details> <summary>Como um roteador funciona?</summary> <b>Um roteador é um aparelho físico ou virtual que passa informações entre duas ou more redes de computadores comutadas por pacotes. Um roteador inspeciona o endereço de Protocolo de Internet (endereço IP) de destino de um determinado pacote de dados, calcula a melhor maneira de ele chegar ao seu destino e o encaminha de acordo.
</b></details>
<details> <summary>O que é NAT?</summary> <b>Network Address Translation (NAT) é um processo no qual um ou mais endereços IP locais são traduzidos em um ou mais endereços IP globais e vice-versa para fornecer acesso à Internet aos hosts locais.
</b></details>
<details> <summary>O que é um proxy? Como funciona? Para que precisamos dele?</summary> <b>Um servidor proxy atua como um gateway entre você e a internet. É um servidor intermediário que separa os usuários finais dos sites que eles navegam.
Se você estiver usando um servidor proxy, o tráfego da internet flui através do servidor proxy a caminho do endereço que você solicitou. A solicitação então volta através do mesmo servidor proxy (há exceções a esta regra), e então o servidor proxy encaminha os dados recebidos do site para você.
Servidores proxy fornecem vários níveis de funcionalidade, segurança e privacidade, dependendo do seu caso de uso, necessidades ou política da empresa. </b></details>
<details> <summary>O que é TCP? Como funciona? O que é o handshake de 3 vias?</summary> <b>O handshake de 3 vias do TCP ou handshake de três vias é um processo usado em uma rede TCP/IP para fazer uma conexão entre servidor e cliente.
Um handshake de três vias é usado principalmente para criar uma conexão de soquete TCP. Funciona quando:
Da wikipedia: "o tempo que leva para um sinal ser enviado mais o tempo que leva para um reconhecimento desse sinal ser recebido"
Pergunta bônus: qual é o RTT da LAN? </b></details>
<details> <summary>Como funciona um handshake SSL?</summary> <b> O handshake SSL é um processo que estabelece uma conexão segura entre um cliente e um servidor.O TCP estabelece uma conexão entre o cliente e o servidor para garantir a ordem dos pacotes, por outro lado, o UDP não estabelece uma conexão entre o cliente e o servidor e não lida com a ordem dos pacotes. Isso torna o UDP mais leve que o TCP e um candidato perfeito para serviços como streaming.
Penguintutor.com fornece uma boa explicação. </b></details>
<details> <summary>Quais protocolos TCP/IP você conhece?</summary> <b> </b></details> <details> <summary>Explique o "gateway padrão"</summary> <b>Um gateway padrão serve como um ponto de acesso ou roteador IP que um computador em rede usa para enviar informações para um computador em outra rede ou na internet. </b></details>
<details> <summary>O que é ARP? Como funciona?</summary> <b>ARP significa Address Resolution Protocol. Quando você tenta pingar um endereço IP em sua rede local, digamos 192.168.1.1, seu sistema precisa transformar o endereço IP 192.168.1.1 em um endereço MAC. Isso envolve o uso de ARP para resolver o endereço, daí o nome.
Os sistemas mantêm uma tabela de consulta ARP onde armazenam informações sobre quais endereços IP estão associados a quais endereços MAC. Ao tentar enviar um pacote para um endereço IP, o sistema primeiro consultará esta tabela para ver se já conhece o endereço MAC. Se houver um valor em cache, o ARP não é usado. </b></details>
<details> <summary>O que é TTL? O que ajuda a prevenir?</summary> <b>Significa Dynamic Host Configuration Protocol e aloca endereços IP, máscaras de sub-rede e gateways para hosts. É assim que funciona:
Leia mais aqui </b></details>
<details> <summary>Você pode ter dois servidores DHCP na mesma rede? Como funciona?</summary> <b>É possível ter dois servidores DHCP na mesma rede, no entanto, não é recomendado, e é importante configurá-los cuidadosamente para evitar conflitos e problemas de configuração.
Veja como funciona o tunelamento SSL:
Existem várias razões pelas quais devemos considerar o uso de IPv6 em vez de IPv4:
MTU significa Maximum Transmission Unit. É o tamanho da maior PDU (Unidade de Dados de Protocolo) que pode ser enviada em uma única transação. </b></details>
<details> <summary>O que acontece se você enviar um pacote maior que o MTU?</summary> <b>Com o protocolo IPv4, o roteador pode fragmentar a PDU e então enviar todas as PDUs fragmentadas através da transação.
Com o protocolo IPv6, ele emite um erro para o computador do usuário. </b></details>
<details> <summary>Verdadeiro ou Falso? O Ping usa UDP porque não se importa com uma conexão confiável</summary> <b>Falso. O Ping na verdade usa ICMP (Internet Control Message Protocol), que é um protocolo de rede usado para enviar mensagens de diagnóstico e mensagens de controle relacionadas à comunicação de rede. </b></details>
<details> <summary>O que é SDN?</summary> <b>As mensagens ICMP são usadas para uma variedade de propósitos, incluindo:
NAT significa Network Address Translation. É uma maneira de mapear vários endereços privados locais para um público antes de transferir as informações. Organizações que desejam que vários dispositivos utilizem um único endereço IP usam NAT, assim como a maioria dos roteadores domésticos. Por exemplo, o IP privado do seu computador pode ser 192.168.1.100, mas seu roteador mapeia o tráfego para seu IP público (por exemplo, 1.1.1.1). Qualquer dispositivo na internet veria o tráfego vindo do seu IP público (1.1.1.1) em vez do seu IP privado (192.168.1.100). </b></details>
<details> <summary>Qual número de porta é usado em cada um dos seguintes protocolos?:Vários fatores podem afetar o desempenho da rede, incluindo:
APIPA é um conjunto de endereços IP que os dispositivos recebem quando o servidor DHCP principal não está acessível
</b></details>
<details> <summary>Qual faixa de IP o APIPA usa?</summary> <b>APIPA usa a faixa de IP: 169.254.0.1 - 169.254.255.254.
</b></details>
O plano de controle é uma parte da rede que decide como rotear e encaminhar pacotes para um local diferente. </b></details>
<details> <summary>A que se refere o "plano de dados"?</summary> <b>O plano de dados é uma parte da rede que realmente encaminha os dados/pacotes. </b></details>
<details> <summary>A que se refere o "plano de gerenciamento"?</summary> <b>Refere-se às funções de monitoramento e gerenciamento. </b></details>
<details> <summary>A qual plano (dados, controle, ...) pertence a criação de tabelas de roteamento?</summary> <b>Plano de Controle. </b></details>
<details> <summary>Explique o Protocolo Spanning Tree (STP).</summary> <b> </b></details> <details> <summary>O que é agregação de link? Por que é usado?</summary> <b> </b></details> <details> <summary>O que é Roteamento Assimétrico? Como lidar com isso?</summary> <b> </b></details> <details> <summary>Quais protocolos de sobreposição (túnel) você conhece?</summary> <b> </b></details> <details> <summary>O que é GRE? Como funciona?</summary> <b> </b></details> <details> <summary>O que é VXLAN? Como funciona?</summary> <b> </b></details> <details> <summary>O que é SNAT?</summary> <b> </b></details> <details> <summary>Explique o OSPF.</summary> <b>OSPF (Open Shortest Path First) é um protocolo de roteamento que pode ser implementado em vários tipos de roteadores. Em geral, o OSPF é suportado na maioria dos roteadores modernos, incluindo os de fornecedores como Cisco, Juniper e Huawei. O protocolo é projetado para funcionar com redes baseadas em IP, incluindo IPv4 e IPv6. Além disso, ele usa um design de rede hierárquico, onde os roteadores são agrupados em áreas, com cada área tendo seu próprio mapa de topologia e tabela de roteamento. Este design ajuda a reduzir a quantidade de informações de roteamento que precisam ser trocadas entre os roteadores e a melhorar a escalabilidade da rede.
Os 4 Tipos de roteadores OSPF são:
Saiba mais sobre os tipos de roteadores OSPF: https://www.educba.com/ospf-router-types/ </b></details>
<details> <summary>O que é latência?</summary> <b>Latência é o tempo que a informação leva para chegar ao seu destino a partir da fonte. </b></details>
<details> <summary>O que é largura de banda?</summary> <b>Largura de banda é a capacidade de um canal de comunicação para medir quantos dados este último pode manipular durante um período de tempo específico. Mais largura de banda implicaria mais manipulação de tráfego e, portanto, mais transferência de dados. </b></details>
<details> <summary>O que é throughput?</summary> <b>Throughput refere-se à medição da quantidade real de dados transferidos durante um certo período de tempo através de qualquer canal de transmissão. </b></details>
<details> <summary>Ao realizar uma consulta de pesquisa, o que é mais importante, latência ou throughput? E como garantir isso gerenciando a infraestrutura global? </summary> <b>Latência. Para ter boa latência, uma consulta de pesquisa deve ser encaminhada para o data center mais próximo. </b></details>
<details> <summary>Ao fazer upload de um vídeo, o que é mais importante, latência ou throughput? E como garantir isso?</summary> <b>Throughput. Para ter um bom throughput, o fluxo de upload deve ser roteado para um link subutilizado. </b></details>
<details> <summary>Quais outras considerações (exceto latência e throughput) existem ao encaminhar solicitações?</summary> <b>Dentro de uma rede Spine & Leaf existem dois tipos principais de switches:
A arquitetura Spine & Leaf tornou-se cada vez mais popular em data centers devido à sua capacidade de lidar com as demandas da computação em nuvem moderna, virtualização e aplicações de big data, fornecendo uma infraestrutura de rede escalável, de alto desempenho e confiável. </b></details>
<details> <summary>O que é Congestionamento de Rede? O que pode causá-lo?</summary> <b>O congestionamento da rede ocorre quando há muitos dados para transmitir em uma rede e ela não tem capacidade suficiente para lidar com a demanda. </br> Isso pode levar ao aumento da latência e perda de pacotes. As causas podem ser múltiplas, como alto uso da rede, grandes transferências de arquivos, malware, problemas de hardware ou problemas de design da rede. </br> Para evitar o congestionamento da rede, é importante monitorar o uso da sua rede e implementar estratégias para limitar ou gerenciar a demanda. </b></details>
<details> <summary>O que você pode me dizer sobre o formato do pacote UDP? E sobre o formato do pacote TCP? Como é diferente?</summary> <b> </b></details> <details> <summary>O que é o algoritmo de recuo exponencial? Onde é usado?</summary> <b> </b></details> <details> <summary>Usando o código de Hamming, qual seria a palavra de código para a seguinte palavra de dados 100111010001101?</summary> <b>00110011110100011101 </b></details>
<details> <summary>Dê exemplos de protocolos encontrados na camada de aplicação</summary> <b>Leia mais [aqui](https://www.globalsign.com/en/blog/what-is-hsts-and-how-do-i-use-it#:~:text=HTTP%20Strict%20Transport%20Security%20(HSTS,and%20back%20to%20the%20browser.) </b></details>
A internet refere-se a uma rede de redes, transferindo enormes quantidades de dados ao redor do globo.
A World Wide Web é uma aplicação rodando em milhões de servidores, sobre a internet, acessada através do que é conhecido como navegador web </b></details>
<details> <summary>O que é o ISP?</summary> <b>ISP (Internet Service Provider) é o provedor local de empresa de internet. </b></details>
| Nome | Tópico | Objetivo & Instruções | Solução | Comentários |
|---|---|---|---|---|
| Fork 101 | Fork | Link | Link | |
| Fork 102 | Fork | Link | Link |
Do livro "Operating Systems: Three Easy Pieces":
"responsável por facilitar a execução de programas (permitindo até mesmo que você execute muitos aparentemente ao mesmo tempo), permitindo que programas compartilhem memória, permitindo que programas interajam com dispositivos e outras coisas divertidas como essa". </b></details>
Um processo é um programa em execução. Um programa é uma ou mais instruções e o programa (ou processo) é executado pelo sistema operacional. </b></details>
<details> <summary>Se você tivesse que projetar uma API para processos em um sistema operacional, como seria essa API?</summary> <b>Ela suportaria o seguinte:
Falso. Era verdade no passado, mas os sistemas operacionais de hoje realizam o carregamento preguiçoso, o que significa que apenas as partes relevantes necessárias para o processo ser executado são carregadas primeiro. </b></details>
<details> <summary>Quais são os diferentes estados de um processo?</summary> <b>A comunicação interprocessos (IPC) refere-se aos mecanismos fornecidos por um sistema operacional que permitem que os processos gerenciem dados compartilhados. </b></details>
<details> <summary>O que é "compartilhamento de tempo"?</summary> <b>Mesmo ao usar um sistema com uma única CPU física, é possível permitir que vários usuários trabalhem nele e executem programas. Isso é possível com o compartilhamento de tempo, onde os recursos de computação são compartilhados de uma forma que parece ao usuário que o sistema tem várias CPUs, mas na verdade é simplesmente uma CPU compartilhada aplicando multiprogramação e multitarefa. </b></details>
<details> <summary>O que é "compartilhamento de espaço"?</summary> <b>De certa forma, o oposto do compartilhamento de tempo. Enquanto no compartilhamento de tempo um recurso é usado por um tempo por uma entidade e depois o mesmo recurso pode ser usado por outro recurso, no compartilhamento de espaço o espaço é compartilhado por várias entidades, mas de uma forma que não está sendo transferido entre elas.
É usado por uma entidade, até que essa entidade decida se livrar dele. Tome como exemplo o armazenamento. No armazenamento, um arquivo é seu, até que você decida excluí-lo. </b></details>
<details> <summary>Qual componente determina qual processo é executado em um determinado momento?</summary> <b>Escalonador da CPU </b></details>
A memória virtual combina a RAM do seu computador com espaço temporário no seu disco rígido. Quando a RAM fica baixa, a memória virtual ajuda a mover dados da RAM para um espaço chamado arquivo de paginação. Mover dados para o arquivo de paginação pode liberar a RAM, para que seu computador possa concluir seu trabalho. Em geral, quanto mais RAM seu computador tiver, mais rápido os programas serão executados. https://www.minitool.com/lib/virtual-memory.html </b></details>
<details> <summary>O que é paginação por demanda?</summary> <b>Paginação por demanda é uma técnica de gerenciamento de memória onde as páginas são carregadas na memória física apenas quando acessadas por um processo. Ela otimiza o uso da memória carregando páginas sob demanda, reduzindo a latência de inicialização e a sobrecarga de espaço. No entanto, introduz alguma latência ao acessar páginas pela primeira vez. No geral, é uma abordagem econômica para gerenciar recursos de memória em sistemas operacionais. </b></details>
<details> <summary>O que é copy-on-write?</summary> <b> Copy-on-write (COW) é um conceito de gerenciamento de recursos, com o objetivo de reduzir a cópia desnecessária de informações. É um conceito, que é implementado, por exemplo, na chamada de sistema fork do POSIX, que cria um processo duplicado do processo chamador.A ideia:
O kernel faz parte do sistema operacional e é responsável por tarefas como:
Verdadeiro </b></details>
<details> <summary>O que é POSIX?</summary> <b>POSIX (Portable Operating System Interface) é um conjunto de padrões que definem a interface entre um sistema operacional do tipo Unix e programas de aplicação. </b></details>
<details> <summary>Explique o que é Semáforo e qual o seu papel nos sistemas operacionais.</summary> <b>Um semáforo é uma primitiva de sincronização usada em sistemas operacionais e programação concorrente para controlar o acesso a recursos compartilhados. É uma variável ou tipo de dado abstrato que atua como um contador ou um mecanismo de sinalização para gerenciar o acesso a recursos por múltiplos processos ou threads. </b></details>
<details> <summary>O que é cache? O que é buffer?</summary> <b>Cache: O cache é geralmente usado quando os processos estão lendo e escrevendo no disco para tornar o processo mais rápido, tornando dados semelhantes usados por diferentes programas facilmente acessíveis. Buffer: Lugar reservado na RAM, que é usado para manter dados para fins temporários. </b></details>
A virtualização usa software para criar uma camada de abstração sobre o hardware do computador, que permite que os elementos de hardware de um único computador - processadores, memória, armazenamento e mais - sejam divididos em vários computadores virtuais, comumente chamados de máquinas virtuais (VMs). </b></details>
<details> <summary>O que é um hipervisor?</summary> <b>Red Hat: "Um hipervisor é um software que cria e executa máquinas virtuais (VMs). Um hipervisor, às vezes chamado de monitor de máquina virtual (VMM), isola o sistema operacional e os recursos do hipervisor das máquinas virtuais e permite a criação e o gerenciamento dessas VMs."
Leia mais aqui </b></details>
<details> <summary>Que tipos de hipervisores existem?</summary> <b>Hipervisores hospedados e hipervisores bare-metal. </b></details>
<details> <summary>Quais são as vantagens e desvantagens do hipervisor bare-metal em relação a um hipervisor hospedado?</summary> <b>Devido a ter seus próprios drivers e um acesso direto aos componentes de hardware, um hipervisor bare-metal geralmente terá melhores desempenhos, juntamente com estabilidade e escalabilidade.
Por outro lado, provavelmente haverá alguma limitação em relação ao carregamento de (quaisquer) drivers, então um hipervisor hospedado geralmente se beneficiará de ter uma melhor compatibilidade de hardware. </b></details>
<details> <summary>Que tipos de virtualização existem?</summary> <b>Virtualização de sistema operacional Virtualização de funções de rede Virtualização de desktop </b></details>
<details> <summary>A conteinerização é um tipo de Virtualização?</summary> <b>Sim, é uma virtualização em nível de sistema operacional, onde o kernel é compartilhado e permite o uso de múltiplas instâncias de espaços de usuário isolados. </b></details>
<details> <summary>Como a introdução de máquinas virtuais mudou a indústria e a forma como as aplicações eram implantadas?</summary> <b>A introdução de máquinas virtuais permitiu que as empresas implantassem várias aplicações de negócios no mesmo hardware, enquanto cada aplicação é separada uma da outra de forma segura, onde cada uma está rodando em seu próprio sistema operacional separado. </b></details>
Sim, as máquinas virtuais ainda são relevantes mesmo na era dos contêineres. Embora os contêineres forneçam uma alternativa leve e portátil às máquinas virtuais, eles têm certas limitações. As máquinas virtuais ainda importam porque oferecem isolamento e segurança, podem executar diferentes sistemas operacionais e são boas para aplicativos legados. As limitações dos contêineres, por exemplo, são o compartilhamento do kernel do host. </b></details>
Prometheus é um popular kit de ferramentas de monitoramento e alerta de sistemas de código aberto, originalmente desenvolvido no SoundCloud. Ele é projetado para coletar e armazenar dados de séries temporais e para permitir a consulta e análise desses dados usando uma poderosa linguagem de consulta chamada PromQL. O Prometheus é frequentemente usado para monitorar aplicações nativas da nuvem, microsserviços e outras infraestruturas modernas.
Algumas das principais características do Prometheus incluem:
1. Modelo de dados: O Prometheus usa um modelo de dados flexível que permite aos usuários organizar e rotular seus dados de séries temporais de uma maneira que faça sentido para seu caso de uso particular. Os rótulos são usados para identificar diferentes dimensões dos dados, como a fonte dos dados ou o ambiente em que foram coletados.
2. Arquitetura baseada em pull: O Prometheus usa um modelo baseado em pull para coletar dados de alvos, o que significa que o servidor Prometheus consulta ativamente seus alvos em busca de dados de métricas em intervalos regulares. Essa arquitetura é mais escalável e confiável do que um modelo baseado em push, que exigiria que cada alvo enviasse dados para o servidor.
3. Banco de dados de séries temporais: O Prometheus armazena todos os seus dados em um banco de dados de séries temporais, que permite aos usuários realizar consultas em intervalos de tempo e agregar e analisar seus dados de várias maneiras. O banco de dados é otimizado para cargas de trabalho pesadas de escrita e pode lidar com um alto volume de dados com baixa latência.
4. Alerta: O Prometheus inclui um poderoso sistema de alerta que permite aos usuários definir regras com base em seus dados de métricas e enviar alertas quando certas condições são atendidas. Os alertas podem ser enviados por e-mail, chat ou outros canais e podem ser personalizados para incluir detalhes específicos sobre o problema.
5. Visualização: O Prometheus possui uma ferramenta de gráficos e visualização integrada, chamada PromDash, que permite aos usuários criar painéis personalizados para monitorar seus sistemas e aplicações. O PromDash suporta uma variedade of tipos de gráficos e opções de visualização, e pode ser personalizado usando CSS e JavaScript.
No geral, o Prometheus é uma ferramenta poderosa e flexível para monitorar e analisar sistemas e aplicações, e é amplamente utilizado na indústria para monitoramento e observabilidade nativos da nuvem.
</b></details>
<details> <summary>Em que cenários pode ser melhor NÃO usar o Prometheus?</summary> <b>Da documentação do Prometheus: "se você precisar de 100% de precisão, como para faturamento por solicitação". </b></details>
<details> <summary>Descreva a arquitetura e os componentes do Prometheus</summary> <b>A arquitetura do Prometheus consiste em quatro componentes principais:
1. Servidor Prometheus: O servidor Prometheus é responsável por coletar e armazenar dados de métricas. Ele possui uma camada de armazenamento simples e integrada que permite armazenar dados de séries temporais em um banco de dados ordenado por tempo.
2. Bibliotecas de Cliente: O Prometheus fornece uma variedade de bibliotecas de cliente que permitem que as aplicações exponham seus dados de métricas em um formato que pode ser ingerido pelo servidor Prometheus. Essas bibliotecas estão disponíveis para uma variedade de linguagens de programação, incluindo Java, Python e Go.
3. Exportadores: Exportadores são componentes de software que expõem métricas existentes de sistemas de terceiros e as tornam disponíveis para ingestão pelo servidor Prometheus. O Prometheus fornece exportadores para uma variedade de tecnologias populares, incluindo MySQL, PostgreSQL e Apache.
4. Alertmanager: O componente Alertmanager é responsável por processar alertas gerados pelo servidor Prometheus. Ele pode lidar com alertas de várias fontes e fornece uma variedade de recursos para desduplicar, agrupar e rotear alertas para os canais apropriados.
No geral, a arquitetura do Prometheus é projetada para ser altamente escalável e resiliente. O servidor e as bibliotecas de cliente podem ser implantados de forma distribuída para suportar o monitoramento em ambientes de grande escala e altamente dinâmicos </b></details>
<details> <summary>Você pode comparar o Prometheus com outras soluções como o InfluxDB, por exemplo?</summary> <b>Comparado a outras soluções de monitoramento, como o InfluxDB, o Prometheus é conhecido por seu alto desempenho e escalabilidade. Ele pode lidar com grandes volumes de dados e pode ser facilmente integrado a outras ferramentas no ecossistema de monitoramento. O InfluxDB, por outro lado, é conhecido por sua facilidade de uso e simplicidade. Possui uma interface amigável e fornece APIs fáceis de usar para coletar e consultar dados.
Outra solução popular, o Nagios, é um sistema de monitoramento mais tradicional que depende de um modelo baseado em push para coletar dados. O Nagios existe há muito tempo e é conhecido por sua estabilidade e confiabilidade. No entanto, em comparação com o Prometheus, o Nagios carece de alguns dos recursos mais avançados, como modelo de dados multidimensional e linguagem de consulta poderosa.
No geral, a escolha de uma solução de monitoramento depende das necessidades e requisitos específicos da organização. Embora o Prometheus seja uma ótima escolha para monitoramento e alerta em grande escala, o InfluxDB pode ser uma opção melhor para ambientes menores que exigem facilidade de uso e simplicidade. O Nagios continua sendo uma escolha sólida para organizações que priorizam estabilidade e confiabilidade em detrimento de recursos avançados. </b></details>
<details> <summary>O que é um Alerta?</summary> <b> No Prometheus, um alerta é uma notificação acionada quando uma condição ou limite específico é atingido. Os alertas podem ser configurados para serem acionados quando certas métricas ultrapassam um determinado limite ou quando ocorrem eventos específicos. Uma vez que um alerta é acionado, ele pode ser roteado para vários canais, como e-mail, pager ou chat, para notificar as equipes ou indivíduos relevantes para tomar as medidas apropriadas. Os alertas são um componente crítico de qualquer sistema de monitoramento, pois permitem que as equipes detectem e respondam proativamente a problemas antes que eles afetem os usuários ou causem tempo de inatividade do sistema. </b></details> <details> <summary>O que é uma Instância? O que é um Job?</summary> <b>No Prometheus, uma instância refere-se a um único alvo que está sendo monitorado. Por exemplo, um único servidor ou serviço. Um job é um conjunto de instâncias que executam a mesma função, como um conjunto de servidores web servindo a mesma aplicação. Os jobs permitem que você defina e gerencie um grupo de alvos juntos.
Em essência, uma instância é um alvo individual do qual o Prometheus coleta métricas, enquanto um job é uma coleção de instâncias semelhantes que podem ser gerenciadas como um grupo. </b></details>
<details> <summary>Quais tipos de métricas principais o Prometheus suporta?</summary> <b> O Prometheus suporta vários tipos de métricas, incluindo:1. Contador: Um valor monotonicamente crescente usado para rastrear contagens de eventos ou amostras. Exemplos incluem o número de solicitações processadas ou o número total de erros encontrados.
2. Medidor (Gauge): Um valor que pode subir ou descer, como o uso da CPU ou o uso da memória. Ao contrário dos contadores, os valores dos medidores podem ser arbitrários, o que significa que eles podem subir e descer com base nas mudanças no sistema que está sendo monitorado.
3. Histograma: Um conjunto de observações ou eventos que são divididos em baldes (buckets) com base em seu valor. Histogramas ajudam a analisar a distribuição de uma métrica, como latências de solicitação ou tamanhos de resposta.
4. Resumo (Summary): Um resumo é semelhante a um histograma, mas em vez de baldes, ele fornece um conjunto de quantis para os valores observados. Resumos são úteis para monitorar a distribuição de latências de solicitação ou tamanhos de resposta ao longo do tempo.
O Prometheus também suporta várias funções e operadores para agregar e manipular métricas, como soma, máximo, mínimo e taxa. Esses recursos o tornam uma ferramenta poderosa para monitorar e alertar sobre métricas do sistema. </b></details>
<details> <summary>O que é um exportador? Para que é usado?</summary> <b> O exportador serve como uma ponte entre o sistema ou aplicação de terceiros e o Prometheus, tornando possível para o Prometheus monitorar e coletar dados desse sistema ou aplicação.O exportador atua como um servidor, ouvindo em uma porta de rede específica por solicitações do Prometheus para coletar métricas. Ele coleta métricas do sistema ou aplicação de terceiros e as transforma em um formato que pode ser entendido pelo Prometheus. O exportador então expõe essas métricas ao Prometheus através de um endpoint HTTP, tornando-as disponíveis para coleta e análise.
Exportadores são comumente usados para monitorar vários tipos de componentes de infraestrutura, como bancos de dados, servidores web e sistemas de armazenamento. Por exemplo, existem exportadores disponíveis para monitorar bancos de dados populares como MySQL и PostgreSQL, bem como servidores web como Apache e Nginx.
No geral, os exportadores são um componente crítico do ecossistema Prometheus, permitindo o monitoramento de uma ampla gama de sistemas e aplicações, e fornecendo um alto grau de flexibilidade e extensibilidade para a plataforma. </b></details>
<details> <summary>Quais são as melhores práticas do Prometheus?</summary> <b> Aqui estão três delas:1. Rotule com cuidado: A rotulagem cuidadosa e consistente das métricas é crucial para consultas e alertas eficazes. Os rótulos devem ser claros, concisos e incluir todas as informações relevantes sobre a métrica.
2. Mantenha as métricas simples: As métricas expostas pelos exportadores devem ser simples e focar em um único aspecto do sistema que está sendo monitorado. Isso ajuda a evitar confusão e garante que as métricas sejam facilmente compreensíveis por todos os membros da equipe.
3. Use alertas com moderação: Embora o alerta seja um recurso poderoso do Prometheus, ele deve ser usado com moderação e apenas para os problemas mais críticos. Configurar muitos alertas pode levar à fadiga de alertas e resultar em alertas importantes sendo ignorados. Recomenda-se configurar apenas os alertas mais importantes e ajustar os limites ao longo do tempo com base na frequência real dos alertas.
</b></details>
<details> <summary>Como obter o total de solicitações em um determinado período de tempo?</summary> <b> Para obter o total de solicitações em um determinado período de tempo usando o Prometheus, você pode usar a função *sum* junto com a função *rate*. Aqui está um exemplo de consulta que lhe dará o número total de solicitações na última hora:sum(rate(http_requests_total[1h]))
Nesta consulta, http_requests_total é o nome da métrica que rastreia o número total de solicitações HTTP, e a função rate calcula a taxa por segundo de solicitações na última hora. A função sum então soma todas as solicitações para lhe dar o número total de solicitações na última hora.
Você pode ajustar o intervalo de tempo alterando a duração na função rate. Por exemplo, se você quisesse obter o número total de solicitações no último dia, poderia alterar a função para rate(http_requests_total[1d]). </b></details>
<details> <summary>O que significa HA no Prometheus?</summary> <b>HA significa Alta Disponibilidade (High Availability). Isso significa que o sistema é projetado para ser altamente confiável e sempre disponível, mesmo diante de falhas ou outros problemas. Na prática, isso geralmente envolve a configuração de várias instâncias do Prometheus e a garantia de que todas estejam sincronizadas e capazes de trabalhar juntas sem problemas. Isso pode ser alcançado por meio de uma variedade de técnicas, como balanceamento de carga, replicação e mecanismos de failover. Ao implementar HA no Prometheus, os usuários podem garantir que seus dados de monitoramento estejam sempre disponíveis e atualizados, mesmo diante de falhas de hardware ou software, problemas de rede ou outros problemas que poderiam causar tempo de inatividade ou perda de dados. </b></details>
<details> <summary>Como você junta duas métricas?</summary> <b> No Prometheus, a junção de duas métricas pode ser alcançada usando a função *join()*. A função *join()* combina duas ou mais séries temporais com base em seus valores de rótulo. Ela recebe dois argumentos obrigatórios: *on* e *table*. O argumento *on* especifica os rótulos para juntar e o argumento *table* especifica a série temporal a ser juntada.Aqui está um exemplo de como juntar duas métricas usando a função join():
sum_series(
join(
on(service, instance) request_count_total,
on(service, instance) error_count_total,
)
)
Neste exemplo, a função join() combina as séries temporais request_count_total e error_count_total com base em seus valores de rótulo service e instance. A função sum_series() então calcula a soma da série temporal resultante </b></details>
<details> <summary>Como escrever uma consulta que retorna o valor de um rótulo?</summary> <b> Para escrever uma consulta que retorna o valor de um rótulo no Prometheus, você pode usar a função *label_values*. A função *label_values* recebe dois argumentos: o nome do rótulo e o nome da métrica.Por exemplo, se você tem uma métrica chamada http_requests_total com um rótulo chamado method, e você quer retornar todos os valores do rótulo method, você pode usar a seguinte consulta:
label_values(http_requests_total, method)
Isso retornará uma lista de todos os valores para o rótulo method na métrica http_requests_total. Você pode então usar esta lista em consultas futuras ou para filtrar seus dados. </b></details>
<details> <summary>Como você converte cpu_user_seconds em uso de CPU em porcentagem?</summary> <b> Para converter *cpu_user_seconds* em uso de CPU em porcentagem, você precisa dividi-lo pelo tempo total decorrido e pelo número de núcleos de CPU, e então multiplicar por 100. A fórmula é a seguinte:100 * sum(rate(process_cpu_user_seconds_total{job="<job-name>"}[<time-period>])) by (instance) / (<time-period> * <num-cpu-cores>)
Aqui, <job-name> é o nome do job que você quer consultar, <time-period> é o intervalo de tempo que você quer consultar (por exemplo, 5m, 1h), e <num-cpu-cores> é o número de núcleos de CPU na máquina que você está consultando.
Por exemplo, para obter o uso de CPU em porcentagem nos últimos 5 minutos para um job chamado my-job rodando em uma máquina com 4 núcleos de CPU, você pode usar a seguinte consulta:
100 * sum(rate(process_cpu_user_seconds_total{job="my-job"}[5m])) by (instance) / (5m * 4)
</b></details>
Go também tem uma boa comunidade. </b></details>
<details> <summary>Qual é a diferença entre <code>var x int = 2</code> e <code>x := 2</code>?</summary> <b>O resultado é o mesmo, uma variável com o valor 2.
Com <code>var x int = 2</code> estamos definindo o tipo da variável como inteiro, enquanto com <code>x := 2</code> estamos deixando o Go descobrir o tipo por si só. </b></details>
<details> <summary>Verdadeiro ou Falso? Em Go, podemos redeclarar variáveis e, uma vez declaradas, devemos usá-las.</summary>Falso. Não podemos redeclarar variáveis, mas sim, devemos usar as variáveis declaradas. </b></details>
<details> <summary>Quais bibliotecas de Go você já usou?</summary> <b>Isso deve ser respondido com base no seu uso, mas alguns exemplos são:
func main() {
var x float32 = 13.5
var y int
y = x
}
package main
import "fmt"
func main() {
var x int = 101
var y string
y = string(x)
fmt.Println(y)
}
Ele verifica qual valor unicode está definido em 101 e o usa para converter o inteiro em uma string. Se você quiser obter "101", deve usar o pacote "strconv" e substituir <code>y = string(x)</code> por <code>y = strconv.Itoa(x)</code> </b></details>
<details> <summary>O que está errado com o seguinte código?:package main
func main() {
var x = 2
var y = 3
const someConst = x + y
}
Constantes em Go só podem ser declaradas usando expressões constantes.
Mas x, y e sua soma são variáveis.
<code>const initializer x + y is not a constant</code> </b></details>
<details> <summary>Qual será a saída do seguinte bloco de código?:package main
import "fmt"
const (
x = iota
y = iota
)
const z = iota
func main() {
fmt.Printf("%v\n", x)
fmt.Printf("%v\n", y)
fmt.Printf("%v\n", z)
}
O identificador iota do Go é usado em declarações const para simplificar definições de números incrementais. Como pode ser usado em expressões, ele fornece uma generalidade além da de simples enumerações.
x e y no primeiro grupo iota, z no segundo.
Página Iota na Wiki do Go </b></details>
<details> <summary>Para que _ é usado em Go?</summary> <b>Ele evita ter que declarar todas as variáveis para os valores de retorno. É chamado de identificador em branco.
resposta no SO </b></details>
<details> <summary>Qual será a saída do seguinte bloco de código?:package main
import "fmt"
const (
_ = iota + 3
x
)
func main() {
fmt.Printf("%v\n", x)
}
Como o primeiro iota é declarado com o valor 3 ( + 3), o próximo tem o valor 4
</b></details>
package main
import (
"fmt"
"sync"
"time"
)
func main() {
var wg sync.WaitGroup
wg.Add(1)
go func() {
time.Sleep(time.Second * 2)
fmt.Println("1")
wg.Done()
}()
go func() {
fmt.Println("2")
}()
wg.Wait()
fmt.Println("3")
}
Saída: 2 1 3
Artigo sobre sync/waitgroup
Pacote sync do Golang </b></details>
<details> <summary>Qual será a saída do seguinte bloco de código?:package main
import (
"fmt"
)
func mod1(a []int) {
for i := range a {
a[i] = 5
}
fmt.Println("1:", a)
}
func mod2(a []int) {
a = append(a, 125) // !
for i := range a {
a[i] = 5
}
fmt.Println("2:", a)
}
func main() {
s1 := []int{1, 2, 3, 4}
mod1(s1)
fmt.Println("1:", s1)
s2 := []int{1, 2, 3, 4}
mod2(s2)
fmt.Println("2:", s2)
}
Saída: <code>
1 [5 5 5 5]
1 [5 5 5 5]
2 [5 5 5 5 5]
2 [1 2 3 4]
</code>Em mod1, a é um link, e quando usamos a[i], estamos mudando o valor de s1 também.
Mas em mod2, append cria uma nova fatia, e estamos mudando apenas o valor de a, não de s2.
Artigo sobre arrays,
Postagem no blog sobre append
</b></details>
package main
import (
"container/heap"
"fmt"
)
// An IntHeap is a min-heap of ints.
type IntHeap []int
func (h IntHeap) Len() int { return len(h) }
func (h IntHeap) Less(i, j int) bool { return h[i] < h[j] }
func (h IntHeap) Swap(i, j int) { h[i], h[j] = h[j], h[i] }
func (h *IntHeap) Push(x interface{}) {
// Push and Pop use pointer receivers because they modify the slice's length,
// not just its contents.
*h = append(*h, x.(int))
}
func (h *IntHeap) Pop() interface{} {
old := *h
n := len(old)
x := old[n-1]
*h = old[0 : n-1]
return x
}
func main() {
h := &IntHeap{4, 8, 3, 6}
heap.Init(h)
heap.Push(h, 7)
fmt.Println((*h)[0])
}
Saída: 3
Pacote container/heap do Golang </b></details>
As vantagens do MongoDB são as seguintes:
</b></details>
<details> <summary>Qual é a diferença entre SQL e NoSQL?</summary> <b>A principal diferença é que os bancos de dados SQL são estruturados (os dados são armazenados na forma de tabelas com linhas e colunas - como uma tabela de planilha do Excel) enquanto o NoSQL é não estruturado, e o armazenamento de dados pode variar dependendo de como o banco de dados NoSQL é configurado, como par chave-valor, orientado a documentos, etc. </b></details>
<details> <summary>Em que cenários você preferiria usar NoSQL/Mongo em vez de SQL?</summary> <b>find() retorna todos os documentos que correspondem às condições da consulta.| Nome | Tópico | Objetivo & Instruções | Solução | Comentários |
|---|---|---|---|---|
| Funções vs. Comparações | Melhorias de Consulta | Exercício | Solução |
SQL (Structured Query Language) é uma linguagem padrão para bancos de dados relacionais (como MySQL, MariaDB, ...).
É usada para ler, atualizar, remover e criar dados em um banco de dados relacional. </b></details>
<details> <summary>Como o SQL é diferente do NoSQL</summary> <b>A principal diferença é que os bancos de dados SQL são estruturados (os dados são armazenados na forma de tabelas com linhas e colunas - como uma tabela de planilha do Excel) enquanto o NoSQL é não estruturado, e o armazenamento de dados pode variar dependendo de como o banco de dados NoSQL é configurado, como par chave-valor, orientado a documentos, etc. </b></details>
<details> <summary>Quando é melhor usar SQL? NoSQL?</summary> <b>SQL - Melhor usado quando a integridade dos dados é crucial. O SQL é normalmente implementado em muitas empresas e áreas do setor financeiro devido à sua conformidade com o ACID.
NoSQL - Ótimo se você precisar escalar as coisas rapidamente. O NoSQL foi projetado com aplicações web em mente, então funciona muito bem se você precisar espalhar rapidamente a mesma informação para vários servidores
Além disso, como o NoSQL não adere à estrutura rígida de tabela com colunas e linhas que os Bancos de Dados Relacionais exigem, você pode armazenar diferentes tipos de dados juntos. </b></details>
Para estas perguntas, usaremos as tabelas Clientes e Pedidos mostradas abaixo:
Clientes
| ID_Cliente | Nome_Cliente | Itens_no_carrinho | Dinheiro_gasto_ate_Data |
|---|---|---|---|
| 100204 | John Smith | 0 | 20.00 |
| 100205 | Jane Smith | 3 | 40.00 |
| 100206 | Bobby Frank | 1 | 100.20 |
PEDIDOS
| ID_Cliente | ID_Pedido | Item | Preço | Data_vendido |
|---|---|---|---|---|
| 100206 | A123 | Pato de Borracha | 2.20 | 2019-09-18 |
| 100206 | A123 | Banho de Espuma | 8.00 | 2019-09-18 |
| 100206 | Q987 | Pacote com 80 Papéis Higiênicos | 90.00 | 2019-09-20 |
| 100205 | Z001 | Ração de Gato - Atum | 10.00 | 2019-08-05 |
| 100205 | Z001 | Ração de Gato - Frango | 10.00 | 2019-08-05 |
| 100205 | Z001 | Ração de Gato - Carne | 10.00 | 2019-08-05 |
| 100205 | Z001 | Ração de Gato - quesadilla de gatinho | 10.00 | 2019-08-05 |
| 100204 | X202 | Café | 20.00 | 2019-04-29 |
Select *
From Clientes; </b></details>
<details> <summary>Quantos itens estão no carrinho de John?</summary> <b>Select Itens_no_carrinho
From Clientes
Where Nome_Cliente = "John Smith"; </b></details>
<details> <summary>Qual é a soma de todo o dinheiro gasto por todos os clientes?</summary> <b>Select SUM(Dinheiro_gasto_ate_Data) as SOMA_DINHEIRO
From Clientes; </b></details>
<details> <summary>Quantas pessoas têm itens em seus carrinhos?</summary> <b>Select count(1) as Numero_de_Pessoas_c_itens
From Clientes
where Itens_no_carrinho > 0; </b></details>
<details> <summary>Como você juntaria a tabela de clientes à tabela de pedidos?</summary> <b>Você os juntaria pela chave única. Neste caso, a chave única é ID_Cliente em ambas as tabelas Clientes e Pedidos </b></details>
<details> <summary>Como você mostraria qual cliente pediu quais itens?</summary> <b>Select c.Nome_Cliente, o.Item
From Clientes c
Left Join Pedidos o
On c.ID_Cliente = o.ID_Cliente;
</b></details>
<details> <summary>Usando uma instrução with, como você mostraria quem pediu ração de gato e o valor total gasto?</summary> <b>with racao_gato as (
Select ID_Cliente, SUM(Preco) as PRECO_TOTAL
From Pedidos
Where Item like "%Ração de Gato%"
Group by ID_Cliente
)
Select Nome_Cliente, PRECO_TOTAL
From Clientes c
Inner JOIN racao_gato f
ON c.ID_Cliente = f.ID_Cliente
where c.ID_Cliente in (Select ID_Cliente from racao_gato);
Embora esta tenha sido uma instrução simples, a cláusula "with" realmente brilha quando uma consulta complexa precisa ser executada em uma tabela antes de se juntar a outra. As instruções With são boas, porque você cria um pseudo temp ao executar sua consulta, em vez de criar uma tabela totalmente nova.
A Soma de todas as compras de ração de gato não estava prontamente disponível, então usamos uma instrução with para criar a pseudo tabela para recuperar a soma dos preços gastos por cada cliente, e então juntamos a tabela normalmente. </b></details>
<details> <summary>Qual das seguintes consultas você usaria?SELECT count(*) SELECT count(*)
FROM compras_shawarma FROM compras_shawarma
WHERE vs. WHERE
YEAR(comprado_em) == '2017' comprado_em >= '2017-01-01' AND
comprado_em <= '2017-31-12'
SELECT count(*)
FROM compras_shawarma
WHERE
comprado_em >= '2017-01-01' AND
comprado_em <= '2017-31-12'
Quando você usa uma função (YEAR(comprado_em)), ela precisa varrer todo o banco de dados, em oposição ao uso de índices e, basicamente, da coluna como ela é, em seu estado natural.
</b></details>
Já implementei estes em projetos anteriores, configurando-os para escalabilidade e segurança para suportar ambientes multi-tenant.
</b></details>
<details> <summary>Você pode me dizer pelo que cada um dos seguintes serviços/projetos é responsável?:</b></details>
<details> <summary>Descreva em detalhes como você inicia uma instância com um IP flutuante</summary> <b> </b></details> <details> <summary>Você recebe uma ligação de um cliente dizendo: "Eu consigo pingar minha instância, mas não consigo conectar (ssh) nela". Qual pode ser o problema?</summary> <b> </b></details> <details> <summary>Que tipos de redes o OpenStack suporta?</summary> <b> </b></details> <details> <summary>Como você depura problemas de armazenamento do OpenStack? (ferramentas, logs, ...)</summary> <b> </b></details> <details> <summary>Como você depura problemas de computação do OpenStack? (ferramentas, logs, ...)</summary> <b> </b></details>Você pode ler sobre o TripleO aqui aqui </b></details>
Existem muitas razões para isso. Uma, por exemplo: você não pode remover o roteador se houver portas ativas atribuídas a ele. </b></details>
<details> <summary>O que é uma rede provedora?</summary> <b> </b></details> <details> <summary>Quais componentes e serviços existem para L2 e L3?</summary> <b> </b></details> <details> <summary>O que é o plug-in ML2? Explique sua arquitetura</summary> <b> </b></details> <details> <summary>O que é o agente L2? Como ele funciona e pelo que é responsável?</summary> <b> </b></details> <details> <summary>O que é o agente L3? Como ele funciona e pelo que é responsável?</summary> <b> </b></details> <details> <summary>Explique pelo que o agente de Metadados é responsável</summary> <b> </b></details> <details> <summary>Quais entidades de rede o Neutron suporta?</summary> <b> </b></details> <details> <summary>Como você depura problemas de rede do OpenStack? (ferramentas, logs, ...)</summary> <b> </b></details>Não por padrão. A API de Armazenamento de Objetos limita o máximo a 5GB por objeto, mas pode ser ajustado. </b></details>
<details> <summary>Explique o seguinte em relação ao Swift:Falso. Dois objetos podem ter o mesmo nome se estiverem em contêineres diferentes. </b></details>
Usando:
Uma lista de serviços e seus pontos de extremidade </b></details>
A Stack Elástica consiste em:
Elasticsearch, Logstash e Kibana também são conhecidos como a stack ELK. </b></details>
<details> <summary>Explique o que é Elasticsearch</summary> <b>Da documentação oficial:
"Elasticsearch é um armazenamento de documentos distribuído. Em vez de armazenar informações como linhas de dados colunares, o Elasticsearch armazena estruturas de dados complexas que foram serializadas como documentos JSON" </b></details>
<details> <summary>O que é Logstash?</summary> <b>Do blog:
"Logstash é um pipeline poderoso e flexível que coleta, enriquece e transporta dados. Ele funciona como uma ferramenta de extração, transformação e carga (ETL) para coletar mensagens de log." </b></details>
<details> <summary>Explique o que são beats</summary> <b>Beats são remetentes de dados leves. Esses remetentes de dados são instalados no cliente onde os dados residem. Exemplos de beats: Filebeat, Metricbeat, Auditbeat. Existem muitos mais.
</b></details>
<details> <summary>O que é Kibana?</summary> <b>Da documentação oficial:
"Kibana é uma plataforma de análise e visualização de código aberto projetada para funcionar com o Elasticsearch. Você usa o Kibana para pesquisar, visualizar e interagir com dados armazenados nos índices do Elasticsearch. Você pode facilmente realizar análises de dados avançadas e visualizar seus dados em uma variedade de gráficos, tabelas e mapas." </b></details>
<details> <summary>Descreva o que acontece desde o momento em que um aplicativo registra algumas informações até que elas sejam exibidas para o usuário em um painel quando a stack Elastic é usada</summary> <b>O processo pode variar com base na arquitetura escolhida e no processamento que você pode querer aplicar aos logs. Um fluxo de trabalho possível é:
É aqui que os dados são armazenados e também onde ocorrem diferentes processamentos (por exemplo, quando você pesquisa por um dado). </b></details>
<details> <summary>O que é um nó mestre?</summary> <b>Parte das responsabilidades de um nó mestre:
Embora possa haver vários nós mestres, na realidade, apenas um deles é o nó mestre eleito. </b></details>
<details> <summary>O que é um nó de ingestão?</summary> <b>Um nó responsável por processar os dados de acordo com o pipeline de ingestão. Caso você não precise usar logstash, então este nó pode receber dados de beats e processá-los, de forma semelhante a como pode ser processado no Logstash. </b></details>
<details> <summary>O que é um nó Apenas de Coordenação?</summary> <b>Da documentação oficial:
Nós apenas de coordenação podem beneficiar grandes clusters, descarregando a função de nó de coordenação dos nós de dados e elegíveis a mestre. Eles se juntam ao cluster e recebem o estado completo do cluster, como qualquer outro nó, e usam o estado do cluster para rotear solicitações diretamente para o(s) local(is) apropriado(s).
</b></details>
<details> <summary>Como os dados são armazenados no Elasticsearch?</summary> <b>Índice no Elasticsearch é na maioria dos casos comparado a um banco de dados inteiro do mundo SQL/NoSQL.
Você pode optar por ter um índice para conter todos os dados do seu aplicativo ou ter vários índices onde cada índice contém um tipo diferente do seu aplicativo (por exemplo, índice para cada serviço que seu aplicativo está executando).
A documentação oficial também oferece uma ótima explicação (em geral, é uma documentação muito boa, como todo projeto deveria ter):
"Um índice pode ser pensado como uma coleção otimizada de documentos e cada documento é uma coleção de campos, que são os pares chave-valor que contêm seus dados" </b></details>
<details> <summary>Explique os Shards</summary> <b>Um índice é dividido em shards e os documentos são hash para um shard específico. Cada shard pode estar em um nó diferente em um cluster e cada um dos shards é um índice autocontido.
Isso permite que o Elasticsearch escale para um cluster inteiro de servidores. </b></details>
<details> <summary>O que é um Índice Invertido?</summary> <b>Da documentação oficial:
"Um índice invertido lista cada palavra única que aparece em qualquer documento e identifica todos os documentos em que cada palavra ocorre." </b></details>
<details> <summary>O que é um Documento?</summary> <b>Continuando com a comparação com SQL/NoSQL, um Documento no Elasticsearch é uma linha em uma tabela no caso de SQL ou um documento em uma coleção no caso de NoSQL. Como no NoSQL, um documento é um objeto JSON que contém dados sobre uma unidade em seu aplicativo. O que é essa unidade depende do seu aplicativo. Se o seu aplicativo está relacionado a livros, cada documento descreve um livro. Se o seu aplicativo é sobre camisas, cada documento é uma camisa. </b></details>
<details> <summary>Você verifica a saúde do seu cluster elasticsearch e está vermelho. O que isso significa? O que pode fazer com que o status seja amarelo em vez de verde?</summary> <b>Vermelho significa que alguns dados não estão disponíveis em seu cluster. Alguns shards de seus índices não estão atribuídos. Existem alguns outros estados para o cluster. Amarelo significa que você tem shards não atribuídos no cluster. Você pode estar neste estado se tiver um único nó e seus índices tiverem réplicas. Verde significa que todos os shards no cluster estão atribuídos a nós e seu cluster está saudável. </b></details>
<details> <summary>Verdadeiro ou Falso? O Elasticsearch indexa todos os dados em todos os campos e cada campo indexado tem a mesma estrutura de dados para capacidade de consulta unificada и rápida</summary> <b>Falso. Da documentação oficial:
"Cada campo indexado tem uma estrutura de dados dedicada e otimizada. Por exemplo, campos de texto são armazenados em índices invertidos, e campos numéricos e geográficos são armazenados em árvores BKD." </b></details>
<details> <summary>Quais campos reservados um documento possui?</summary> <b>Em um ambiente de rede/nuvem onde falhas podem ser esperadas a qualquer momento, é muito útil e altamente recomendado ter um mecanismo de failover caso um shard/nó de alguma forma fique offline ou desapareça por qualquer motivo. Para este fim, o Elasticsearch permite que você faça uma ou mais cópias dos shards do seu índice no que são chamados de shards de réplica, ou réplicas para abreviar. </b></details>
<details> <summary>Você pode explicar a Frequência de Termo & Frequência de Documento?</summary> <b>Frequência de Termo é a frequência com que um termo aparece em um determinado documento e Frequência de Documento é a frequência com que um termo aparece em todos os documentos. Ambos são usados para determinar a relevância de um termo, calculando Frequência de Termo / Frequência de Documento. </b></details>
<details> <summary>Você verifica a "Fase Atual" em "Gerenciamento do ciclo de vida do índice" e vê que está definido como "quente". O que isso significa?</summary> <b>"O índice está sendo ativamente escrito". Mais sobre as fases aqui </b></details>
<details> <summary>O que este comando faz? <code>curl -X PUT "localhost:9200/customer/_doc/1?pretty" -H 'Content-Type: application/json' -d'{ "name": "John Doe" }'</code></summary> <b>Ele cria o índice do cliente se ele não existir e adiciona um novo documento com o campo nome definido como "John Doe". Além disso, se for o primeiro documento, ele receberá o ID 1. </b></details>
<details> <summary>O que acontecerá se você executar o comando anterior duas vezes? E se executá-lo 100 vezes?</code></summary> <b>A API em massa é usada quando você precisa indexar vários documentos. Para um grande número de documentos, seria significativamente mais rápido usar em vez de solicitações individuais, pois há menos viagens de ida e volta na rede. </b></details>
Da documentação oficial:
"No contexto de consulta, uma cláusula de consulta responde à pergunta “Quão bem este documento corresponde a esta cláusula de consulta?” Além de decidir se o documento corresponde ou não, a cláusula de consulta também calcula uma pontuação de relevância no meta-campo _score."
"Em um contexto de filtro, uma cláusula de consulta responde à pergunta “Este documento corresponde a esta cláusula de consulta?” A resposta é um simples Sim ou Não — nenhuma pontuação é calculada. O contexto de filtro é usado principalmente para filtrar dados estruturados" </b></details>
<details> <summary>Descreva como uma arquitetura de ambiente de produção com grandes quantidades de dados seria diferente de um ambiente de pequena escala</summary> <b>Existem várias respostas possíveis para esta pergunta. Uma delas é a seguinte:
Uma arquitetura de pequena escala do elastic consistirá na stack elástica como ela é. Isso significa que teremos beats, logstash, elastcsearch e kibana.
Um ambiente de produção com grandes quantidades de dados pode incluir algum tipo de componente de buffer (por exemplo, Reddis ou RabbitMQ) e também um componente de segurança, como o Nginx. </b></details>
Um plugin do logstash que modifica informações em um formato e as imerge em outro. </b></details>
<details> <summary>Como o grok funciona?</summary> <b> </b></details> <details> <summary>Quais padrões grok você conhece?</summary> <b> </b></details> <details> <summary>O que é `_grokparsefailure?`</summary> <b> </b></details> <details> <summary>Como você testa ou depura padrões grok?</summary> <b> </b></details> <details> <summary>O que são Codecs do Logstash? Que codecs existem?</summary> <b> </b></details>Os dados brutos como estão armazenados no índice. Você pode pesquisar e filtrá-los. </b></details>
<details> <summary>Você vê no Kibana, após clicar em Discover, "561 hits". O que isso significa?</summary> <b>Número total de documentos que correspondem aos resultados da pesquisa. Se nenhuma consulta for usada, então simplesmente o número total de documentos. </b></details>
<details> <summary>O que você pode encontrar em "Visualize"?</summary> <b>"Visualize" é onde você pode criar representações visuais para seus dados (gráficos de pizza, gráficos, ...) </b></details>
<details> <summary>Quais tipos de visualização são suportados/incluídos no Kibana?</summary> <b> </b></details> <details> <summary>Que tipo de visualização você usaria para outliers estatísticos</summary> <b> </b></details> <details> <summary>Descreva em detalhes como você cria um painel no Kibana</summary> <b> </b></details>Filebeat é usado para monitorar os diretórios de log dentro de VMs ou montado como um sidecar se estiver exportando logs de contêineres, e então encaminhar esses logs para processamento posterior, geralmente para o logstash. </b></details>
<details> <summary>Se alguém está usando ELK, é obrigatório usar também o filebeat? Em que cenários é útil usar o filebeat?</summary> <b>Filebeat é um componente típico da stack ELK, uma vez que foi desenvolvido pela Elastic para funcionar com os outros produtos (Logstash e Kibana). É possível enviar logs diretamente para o logstash, embora isso geralmente exija alterações de codificação para a aplicação. Particularmente para aplicações legadas com pouca cobertura de teste, pode ser uma opção melhor usar o filebeat, já que você não precisa fazer nenhuma alteração no código da aplicação. </b></details>
<details> <summary>O que é um harvester?</summary> <b>Leia aqui </b></details>
<details> <summary>Verdadeiro ou Falso? um único harvester colhe vários arquivos, de acordo com os limites definidos em filebeat.yml</summary> <b>Falso. Um harvester colhe um arquivo. </b></details>
<details> <summary>O que são módulos do filebeat?</summary> <b>Estes são módulos pré-configurados para tipos específicos de locais de log (por exemplo, Traefik, Fargate, HAProxy) para facilitar a configuração do encaminhamento de logs usando o filebeat. Eles têm configurações diferentes com base em onde você está coletando logs. </b></details>
Você pode gerar certificados com as utilidades elásticas fornecidas e alterar a configuração para habilitar a segurança usando o modelo de certificados. </b></details>
De acordo com Martin Kleppmann:
"Muitos processos rodando em muitas máquinas... apenas passagem de mensagens através de uma rede não confiável com atrasos variáveis, e o sistema pode sofrer de falhas parciais, relógios não confiáveis e pausas de processo."
Outra definição: "Sistemas que estão fisicamente separados, mas logicamente conectados" </b></details>
<details> <summary>O que pode causar a falha de um sistema?</summary> <b>De acordo com o teorema CAP, não é possível para um armazenamento de dados distribuído fornecer mais de dois dos seguintes ao mesmo tempo:
Maneiras de melhorar:
É uma arquitetura na qual os dados são e recuperados de uma única fonte não compartilhada, geralmente conectada exclusivamente a um nó, em oposição a arquiteturas onde a solicitação pode chegar a um de muitos nós e os dados serão recuperados de um local compartilhado (armazenamento, memória, ...). </b></details>
<details> <summary>Explique o Padrão Sidecar (Ou proxy sidecar)</summary> <b> </b></details>| Nome | Tópico | Objetivo & Instruções | Solução | Comentários |
|---|---|---|---|---|
| "Hello World" Altamente Disponível | Exercício | Solução |
TODO: adicionar mais detalhes! </b></details>
Gosto desta definição de blog.christianposta.com:
"Uma interface explicitamente e propositalmente definida, projetada para ser invocada sobre uma rede que permite aos desenvolvedores de software obter acesso programático a dados e funcionalidades dentro de uma organização de maneira controlada e confortável." </b></details>
<details> <summary>O que é uma especificação de API?</summary> <b>De swagger.io:
"Uma especificação de API fornece uma ampla compreensão de como uma API se comporta e como a API se conecta com outras APIs. Ela explica como a API funciona e os resultados a serem esperados ao usar a API" </b></details>
<details> <summary>Verdadeiro ou Falso? Definição de API é o mesmo que Especificação de API</summary> <b>Falso. De swagger.io:
"Uma definição de API é semelhante a uma especificação de API, pois fornece uma compreensão de como uma API é organizada e como a API funciona. Mas a definição de API é destinada ao consumo por máquina, em vez do consumo humano de APIs." </b></details>
<details> <summary>O que é um gateway de API?</summary> <b>Um gateway de API é como o porteiro que controla como diferentes partes conversam entre si e como as informações são trocadas entre elas.
O gateway de API fornece um único ponto de entrada para todos os clientes e pode executar várias tarefas, incluindo roteamento de solicitações para o serviço de backend apropriado, balanceamento de carga, segurança e autenticação, limitação de taxa, cache e monitoramento.
Ao usar um gateway de API, as organizações podem simplificar o gerenciamento de suas APIs, garantir segurança e governança consistentes e melhorar o desempenho e a escalabilidade de seus serviços de backend. Eles também são comumente usados em arquiteturas de microsserviços, onde existem muitos serviços pequenos e independentes que precisam ser acessados por diferentes clientes. </b></details>
<details> <summary>Quais são as vantagens de usar/implementar um gateway de API?</summary> <b>Vantagens:
</b></details>
<details> <summary>O que é uma Carga Útil (Payload) em API?</summary> <b> </b></details> <details> <summary>O que é Automação? Como está relacionada ou é diferente de Orquestração?</summary> <b>Automação é o ato de automatizar tarefas para reduzir a intervenção ou interação humana em relação à tecnologia e sistemas de TI.
Enquanto a automação se concentra no nível da tarefa, a Orquestração é o processo de automatizar processos e/ou fluxos de trabalho que consistem em várias tarefas que geralmente abrangem vários sistemas. </b></details>
<details> <summary>Conte-me sobre bugs interessantes que você encontrou e também corrigiu</summary> <b> </b></details> <details> <summary>O que é um Depurador e como ele funciona?</summary> <b> </b></details> <details> <summary>Quais serviços um aplicativo pode ter?</summary> <b>Dados sobre dados. Basicamente, descreve o tipo de informação que um dado subjacente conterá. </b></details>
<details> <summary>Você pode usar um dos seguintes formatos: JSON, YAML, XML. Qual você usaria? Por quê?</summary> <b>Não posso responder isso por você :) </b></details>
<details> <summary>O que é KPI?</summary> <b> </b></details> <details> <summary>O que é OKR?</summary> <b> </b></details> <details> <summary>O que é DSL (Domain Specific Language)?</summary> <b>Linguagens Específicas de Domínio (DSLs) são usadas para criar uma linguagem personalizada que representa o domínio de tal forma que especialistas do domínio possam interpretá-la facilmente. </b></details>
<details> <summary>Qual é a diferença entre KPI e OKR?</summary> <b> </b></details>Linguagem de serialização de dados usada por muitas tecnologias hoje como Kubernetes, Ansible, etc. </b></details>
<details> <summary>Verdadeiro ou Falso? Qualquer arquivo JSON válido também é um arquivo YAML válido</summary> <b>Verdadeiro. Porque YAML é um superconjunto de JSON. </b></details>
<details> <summary>Qual é o formato dos seguintes dados?{
"applications": [
{
"name": "my_app",
"language": "python",
"version": 20.17
}
]
}
applications:
- app: "my_app"
language: "python"
version: 20.17
someMultiLineString: |
olha mamãe
Eu posso escrever uma string de várias linhas
Eu amo YAML
É bom para casos de uso como escrever um script de shell onde cada linha do script é um comando diferente. </b></details>
<details> <summary>Qual é a diferença entre <code>someMultiLineString: |</code> e <code>someMultiLineString: ></code>?</summary> <b>usar > fará com que a string de várias linhas se dobre em uma única linha
someMultiLineString: >
Isso é na verdade
uma única linha
não se deixe enganar pelas aparências
</b></details>
<details> <summary>O que são placeholders em YAML?</summary> <b>Eles permitem que você referencie valores em vez de escrevê-los diretamente e é usado assim:
username: {{ my.user_name }}
</b></details>
<details> <summary>Como você pode definir vários componentes YAML em um arquivo?</summary> <b>Usando isto: ---
Por exemplo:
document_number: 1
---
document_number: 2
</b></details>
Wikipedia: "Em computação, firmware é uma classe específica de software de computador que fornece o controle de baixo nível para o hardware específico de um dispositivo. Firmware, como o BIOS de um computador pessoal, pode conter funções básicas de um dispositivo e pode fornecer serviços de abstração de hardware para software de nível superior, como sistemas operacionais." </b></details>
Avinetworks: HTTP significa Hypertext Transfer Protocol. O HTTP usa a porta TCP 80 para permitir a comunicação na internet. Faz parte da Camada de Aplicação (L7) no Modelo OSI. </b></details>
<details> <summary>Descreva o ciclo de vida da solicitação HTTP</summary> <b>Falso. Ele не mantém o estado para a solicitação recebida. </b></details>
<details> <summary>Como é uma solicitação HTTP?</summary> <b>Consiste em:
HTTPS é uma versão segura do protocolo HTTP usada para transferir dados entre um navegador da web e um servidor da web. Ele criptografa a comunicação usando criptografia SSL/TLS para garantir que os dados sejam privados e seguros.
Saiba mais: https://www.cloudflare.com/learning/ssl/why-is-http-not-secure/ </b></details>
<details> <summary>Explique os Cookies HTTP</summary> <b>HTTP é stateless. Para compartilhar estado, podemos usar Cookies.
TODO: explicar o que é realmente um Cookie </b></details>
<details> <summary>O que é Pipelining HTTP?</summary> <b> </b></details> <details> <summary>Você recebe o erro "504 Gateway Timeout" de um servidor HTTP. O que isso significa?</summary> <b>O servidor não recebeu uma resposta de outro servidor com o qual se comunica em tempo hábil. </b></details>
<details> <summary>O que é um proxy?</summary> <b>Um proxy é um servidor que atua como intermediário entre um dispositivo cliente e um servidor de destino. Ele pode ajudar a melhorar a privacidade, segurança e desempenho, ocultando o endereço IP do cliente, filtrando conteúdo e armazenando em cache dados acessados com frequência.
Um proxy reverso é um tipo de servidor proxy que fica entre um cliente e um servidor, mas é usado para gerenciar o tráfego que vai na direção oposta de um proxy de encaminhamento tradicional. Em um proxy de encaminhamento, o cliente envia solicitações para o servidor proxy, que as encaminha para o servidor de destino. No entanto, em um proxy reverso, o cliente envia solicitações para o servidor de destino, mas as solicitações são interceptadas pelo proxy reverso antes de chegarem ao servidor.
Wikipedia: "O campo de cabeçalho HTTP X-Forwarded-For (XFF) é um método comum para identificar o endereço IP de origem de um cliente que se conecta a um servidor web através de um proxy HTTP ou balanceador de carga." </b></details>
Um balanceador de carga aceita (ou nega) o tráfego de rede de entrada de um cliente e, com base em alguns critérios (relacionados à aplicação, rede, etc.), distribui essas comunicações para os servidores (pelo menos um). </b></details>
<details> <summary>Por que usar um balanceador de carga?</summary> <b>L4 e L7 </b></details>
<details> <summary>Você pode realizar balanceamento de carga sem usar uma instância de balanceador de carga dedicada?</summary> <b>Sim, você pode usar o DNS para realizar o balanceamento de carga. </b></details>
<details> <summary>O que é balanceamento de carga DNS? Quais são suas vantagens? Quando você o usaria?</summary> <b> </b></details>Leitura recomendada:
Contras:
Você gostaria de garantir que o usuário não perca os dados da sessão atual. </b></details>
<details> <summary>O que as sessões fixas usam para habilitar a "fixação"?</summary> <b>Cookies. Existem cookies baseados em aplicação e cookies baseados em duração. </b></details>
<details> <summary>Explique os cookies baseados em aplicação</summary> <b>O valor máximo do tempo limite pode ser definido entre 1 e 3.600 segundos tanto no GCP quanto na AWS.
</b></details>
A licença Creative Commons é um conjunto de licenças de direitos autorais que permitem aos criadores compartilhar seu trabalho com o público, mantendo algum controle sobre como ele pode ser usado. A licença foi desenvolvida como uma resposta aos padrões restritivos das leis de direitos autorais tradicionais, que limitavam o acesso a obras criativas. Ela permite que os criadores escolham os termos sob os quais suas obras podem ser compartilhadas, distribuídas e usadas por outros. Existem seis tipos principais de licenças Creative Commons, cada uma com diferentes níveis de restrições e permissões, as seis licenças são:
Simplificando, as licenças Creative Commons são uma forma de os criadores compartilharem seu trabalho com o público, mantendo algum controle sobre como ele pode ser usado. As licenças promovem a criatividade, a inovação e a colaboração, ao mesmo tempo que respeitam os direitos dos criadores e incentivam o uso responsável de obras criativas.
Mais informações: https://creativecommons.org/licenses/ </b></details>
<details> <summary>Explique as diferenças entre licenças copyleft e permissivas</summary> <b>No Copyleft, qualquer trabalho derivado deve usar o mesmo licenciamento, enquanto no licenciamento permissivo não existe tal condição. A GPL-3 é um exemplo de licença copyleft, enquanto a BSD é um exemplo de licença permissiva. </b></details>
Cache da CPU. Fonte </b></details>
<details> <summary>O que é um vazamento de memória?</summary> <b>Um vazamento de memória é um erro de programação que ocorre quando um programa falha em liberar a memória que não é mais necessária, fazendo com que o programa consuma quantidades crescentes de memória ao longo do tempo.
Os vazamentos podem levar a uma variedade de problemas, incluindo travamentos do sistema, degradação do desempenho e instabilidade. Geralmente ocorrem após manutenção malsucedida em sistemas mais antigos e compatibilidade com novos componentes ao longo do tempo. </b></details>
<details> <summary>Qual é o seu protocolo favorito?</summary> <b>SSH HTTP DHCP DNS ... </b></details>
<details> <summary>O que é a API de Cache?</summary> <b> </b></details> <details> <summary>O que é o problema C10K? É relevante hoje?</summary> <b>https://idiallo.com/blog/c10k-2016 </b></details>
Prós:
Prós:
Sistema de arquivos local Dropbox Google Drive </b></details>
<details> <summary>Que tipos de dispositivos de armazenamento existem?</summary> <b> </b></details> <details> <summary>Explique o IOPS</summary> <b> </b></details> <details> <summary>Explique o throughput de armazenamento</summary> <b> </b></details> <details> <summary>O que é um sistema de arquivos?</summary> <b>Um sistema de arquivos é uma maneira pela qual computadores e outros dispositivos eletrônicos organizam e armazenam arquivos de dados. Ele fornece uma estrutura que ajuda a organizar os dados em arquivos e diretórios, facilitando a localização e o gerenciamento de informações. Um sistema de arquivos é crucial para fornecer uma maneira de armazenar e gerenciar dados de maneira organizada.
Sistemas de arquivos comumente usados: Windows:
Mac OS:
</b></details>
<details> <summary>Explique os Dados Escuros (Dark Data)</summary> <b> </b></details> <details> <summary>Explique o MBR</summary> <b> </b></details><a name="questions-you-ask"></a>
Uma lista de perguntas que você, como candidato, pode fazer ao entrevistador durante ou após a entrevista. Estas são apenas sugestões, use-as com cuidado. Nem todo entrevistador será capaz de respondê-las (ou ficará feliz em fazê-lo), o que talvez deva ser um sinal de alerta para você em relação a trabalhar em tal lugar, mas isso realmente depende de você.
<details> <summary>O que você gosta em trabalhar aqui?</summary> <b> </b></details> <details> <summary>Como a empresa promove o crescimento pessoal?</summary> <b> </b></details> <details> <summary>Qual é o nível atual de dívida técnica com que vocês estão lidando?</summary> <b>Tenha cuidado ao fazer esta pergunta - todas as empresas, independentemente do tamanho, têm algum nível de dívida técnica. Formule a pergunta à luz de que todas as empresas têm que lidar com isso, mas você quer ver os pontos problemáticos atuais com os quais eles estão lidando
Esta é uma ótima maneira de descobrir como os gerentes lidam com o trabalho não planejado e quão bons eles são em definir expectativas com os projetos. </b></details>
<details> <summary>Por que eu NÃO deveria me juntar a vocês? (ou 'o que você não gosta em trabalhar aqui?')</summary> <b> </b></details> <details> <summary>Qual foi o seu projeto favorito em que você trabalhou?</summary> <b>Isso pode lhe dar insights sobre alguns dos projetos legais em que uma empresa está trabalhando, e se você gostaria de trabalhar em projetos como esses. Esta também é uma boa maneira de ver se os gerentes estão permitindo que os funcionários aprendam e cresçam com projetos fora do trabalho normal que você faria. </b></details>
<details> <summary>Se você pudesse mudar uma coisa no seu dia a dia, o que seria?</summary> <b>Semelhante à pergunta sobre dívida técnica, isso ajuda a identificar quaisquer pontos problemáticos na empresa. Além disso, pode ser uma ótima maneira de mostrar como você seria um ativo para a equipe.
Por exemplo, se eles mencionarem que têm o problema X, e você já resolveu isso no passado, você pode mostrar como seria capaz de mitigar esse problema. </b></details>
<details> <summary>Digamos que concordamos e você me contrata para esta posição, após X meses, o que você espera que eu tenha alcançado?</summary> <b>Isso não apenas lhe dirá o que é esperado de você, mas também fornecerá uma grande dica sobre o tipo de trabalho que você fará nos primeiros meses de seu trabalho. </b></details>
Testes unitários são uma técnica de teste de software que envolve a quebra sistemática de um sistema e o teste de cada parte individual da montagem. Esses testes são automatizados e podem ser executados repetidamente para permitir que os desenvolvedores capturem cenários de borda ou bugs rapidamente durante o desenvolvimento.
O principal objetivo dos testes unitários é verificar se cada função está produzindo saídas adequadas, dado um conjunto de entradas. </b></details>
<details> <summary>Que tipos de testes você executaria para testar uma aplicação web?</summary> <b> </b></details> <details> <summary>Explique o arnês de teste (test harness)?</summary> <b> </b></details> <details> <summary>O que é teste A/B?</summary> <b> </b></details> <details> <summary>O que é simulação de rede e como você a realiza?</summary> <b> </b></details> <details> <summary>Que tipos de testes de desempenho você conhece?</summary> <b> </b></details> <details> <summary>Explique os seguintes tipos de testes:Dado um arquivo de texto, realize os seguintes exercícios
"^\w+" Bônus: extraia a última palavra de cada linha
"\w+(?=\W*$)" (na maioria dos casos, depende da formatação da linha) </b></details>
CDN (Content Delivery Network) responsável por distribuir conteúdo geograficamente. Parte disso, é o que é conhecido como locais de borda, também conhecidos como proxies de cache, que permitem aos usuários obter seu conteúdo rapidamente devido a recursos de cache e distribuição geográfica. </b></details>
<details> <summary>Explique Multi-CDN</summary> <b>Em CDN único, todo o conteúdo é originado da rede de entrega de conteúdo.
Em multi-CDN, o conteúdo é distribuído por várias CDNs diferentes, cada uma podendo estar em um provedor/nuvem completamente diferente. </b></details>
<details> <summary>Quais são os benefícios do Multi-CDN em relação a um único CDN?</summary> <b>Em uma configuração Multi-repo, cada componente é armazenado em seu próprio repositório separado. Cada repositório tem seu próprio histórico de controle de versão. PRÓS (Multi-repo):
A capacidade de crescer facilmente em tamanho e capacidade com base na demanda e no uso. </b></details>
<details> <summary>Explique Elasticidade</summary> <b>A capacidade de crescer, mas também de reduzir com base no que é necessário </b></details>
<details> <summary>Explique a Recuperação de Desastres</summary> <b>A recuperação de desastres é o processo de restaurar sistemas e dados críticos de negócios após um evento disruptivo. O objetivo é minimizar o impacto e retomar as atividades normais de negócios rapidamente. Isso envolve a criação de um plano, testá-lo, fazer backup de dados críticos e armazená-los em locais seguros. Em caso de desastre, o plano é então executado, os backups são restaurados e os sistemas são, esperançosamente, trazidos de volta online. O processo de recuperação pode levar horas ou dias, dependendo dos danos à infraestrutura. Isso torna o planejamento de negócios importante, pois um plano de recuperação de desastres bem projetado e testado pode minimizar o impacto de um desastre e manter as operações em andamento. </b></details>
<details> <summary>Explique Tolerância a Falhas e Alta Disponibilidade</summary> <b>Tolerância a Falhas - A capacidade de se auto-curar e retornar à capacidade normal. Também a capacidade de resistir a uma falha e permanecer funcional.
Alta Disponibilidade - Ser capaz de acessar um recurso (em alguns casos de uso, usando diferentes plataformas) </b></details>
<details> <summary>Qual é a diferença entre alta disponibilidade e Recuperação de Desastres?</summary> <b>wintellect.com: "Alta disponibilidade, simplesmente, é eliminar pontos únicos de falha e a recuperação de desastres é o processo de levar um sistema de volta a um estado operacional quando um sistema é tornado inoperante. Em essência, a recuperação de desastres assume quando a alta disponibilidade falha, então HA primeiro." </b></details>
<details> <summary>Explique o Escalonamento Vertical</summary> <b>O Escalonamento Vertical é o processo de adicionar recursos para aumentar a potência dos servidores existentes. Por exemplo, adicionar mais CPUs, adicionar mais RAM, etc. </b></details>
<details> <summary>Quais são as desvantagens do Escalonamento Vertical?</summary> <b>Apenas com o escalonamento vertical, o componente ainda permanece um ponto único de falha. Além disso, ele tem um limite de hardware onde, se você não tiver mais recursos, pode não ser capaz de escalar verticalmente. </b></details>
<details> <summary>Que tipo de serviços em nuvem geralmente suportam escalonamento vertical?</summary> <b>Bancos de dados, cache. É comum principalmente para sistemas não distribuídos. </b></details>
<details> <summary>Explique o Escalonamento Horizontal</summary> <b>O Escalonamento Horizontal é o processo de adicionar mais recursos que serão capazes de lidar com solicitações como uma única unidade </b></details>
<details> <summary>Qual é a desvantagem do Escalonamento Horizontal? O que é frequentemente necessário para realizar o Escalonamento Horizontal?</summary> <b>Um balanceador de carga. Você pode adicionar mais recursos, mas se quiser que eles façam parte do processo, você precisa servir a eles as solicitações/respostas. Além disso, a inconsistência de dados é uma preocupação com o escalonamento horizontal. </b></details>
<details> <summary>Explique em quais casos de uso você usará o escalonamento vertical e em quais casos de uso você usará o escalonamento horizontal</summary> <b> </b></details> <details> <summary>Explique a Resiliência e quais maneiras existem para tornar um sistema mais resiliente</summary> <b> </b></details> <details> <summary>Explique o "Hashing Consistente"</summary> <b> </b></details> <details> <summary>Como você atualizaria cada um dos serviços no desenho a seguir sem ter tempo de inatividade do aplicativo (foo.com)? </summary> <b> </b></details> <details> <summary>Qual é o problema com a seguinte arquitetura e como você a consertaria? </summary> <b>A carga sobre os produtores ou consumidores pode ser alta, o que pode fazer com que eles travem ou falhem.
Em vez de trabalhar no "modo push", os consumidores podem puxar tarefas apenas quando estiverem prontos para lidar com elas. Isso pode ser corrigido usando uma plataforma de streaming como Kafka, Kinesis, etc. Esta plataforma garantirá o tratamento da alta carga/tráfego e passará tarefas/mensagens para os consumidores apenas quando estiverem prontos para recebê-las.
</b></details>
<details> <summary>Os usuários relatam que há um pico enorme no tempo de processo ao adicionar um pouco mais de dados para processar como entrada. Qual pode ser o problema? </summary> <b> </b></details> <details> <summary>Como você escalaria a arquitetura da pergunta anterior para centenas de usuários?</summary> <b> </b></details>Dê uma olhada aqui </b></details>
<details> <summary>Quais políticas de substituição de cache você conhece?</summary> <b>Você pode encontrar uma lista aqui </b></details>
<details> <summary>Explique as seguintes políticas de cache:Leia sobre isso aqui </b></details>
<details> <summary>Por que não escrever tudo no cache em vez de em um banco de dados/datastore?</summary> <b> Cache e bancos de dados servem a propósitos diferentes e são otimizados para casos de uso diferentes.O cache é usado para acelerar as operações de leitura, armazenando dados acessados com frequência na memória ou em um meio de armazenamento rápido. Ao manter os dados próximos à aplicação, o cache reduz a latência e a sobrecarga de acessar dados de um sistema de armazenamento mais lento e distante, como um banco de dados ou disco.
Por outro lado, os bancos de dados são otimizados para armazenar e gerenciar dados persistentes. Os bancos de dados são projetados para lidar com operações simultâneas de leitura e escrita, impor restrições de consistência e integridade e fornecer recursos como indexação e consulta. </b></details>
Você pode mencionar:
roll-back & roll-forward cut over ensaios gerais redirecionamento de DNS </b></details>
<details> <summary>Explique a técnica "Branch by Abstraction"</summary> <b> </b></details>Exercícios adicionais podem ser encontrados no repositório system-design-notebook.
<p align="center"><a href="https://github.com/bregman-arie/system-design-notebook"></a></p>Uma unidade central de processamento (CPU) realiza operações básicas de aritmética, lógica, controle e entrada/saída (E/S) especificadas pelas instruções no programa. Isso contrasta com componentes externos, como memória principal e circuitos de E/S, e processadores especializados, como unidades de processamento gráfico (GPUs). </b></details>
<details> <summary>O que é RAM?</summary> <b>RAM (Random Access Memory) é o hardware em um dispositivo de computação onde o sistema operacional (SO), programas de aplicação e dados em uso atual são mantidos para que possam ser rapidamente alcançados pelo processador do dispositivo. A RAM é a memória principal em um computador. É muito mais rápido ler e escrever nela do que em outros tipos de armazenamento, como uma unidade de disco rígido (HDD), unidade de estado sólido (SSD) ou unidade óptica. </b></details>
<details> <summary>O que é uma GPU?</summary> <b> Uma GPU, ou Unidade de Processamento Gráfico, é um circuito eletrônico especializado projetado para acelerar o processamento de imagens e vídeos para exibição em uma tela de computador.</b></details>
<details> <summary>O que é um sistema embarcado?</summary> <b>Um sistema embarcado é um sistema de computador - uma combinação de um processador de computador, memória de computador e dispositivos periféricos de entrada/saída - que tem uma função dedicada dentro de um sistema mecânico ou eletrônico maior. Ele é embarcado como parte de um dispositivo completo, muitas vezes incluindo hardware elétrico ou eletrônico e peças mecânicas. </b></details>
<details> <summary>Você pode dar um exemplo de um sistema embarcado?</summary> <b>Um exemplo comum de um sistema embarcado é o painel de controle digital de um forno de micro-ondas, que é gerenciado por um microcontrolador.
Quando comprometido com um determinado objetivo, o Raspberry Pi pode servir como um sistema embarcado.
</b></details>
<details> <summary>Que tipos de armazenamento existem?</summary> <b>Existem vários tipos de armazenamento, incluindo unidades de disco rígido (HDDs), unidades de estado sólido (SSDs) e unidades ópticas (CD/DVD/Blu-ray). Outros tipos de armazenamento incluem pen drives USB, cartões de memória e armazenamento conectado à rede (NAS). </b></details>
<details> <summary>Quais são algumas considerações que as equipes de DevOps devem ter em mente ao selecionar hardware para seu trabalho?</summary>A escolha do hardware DevOps certo é essencial para garantir pipelines de CI/CD simplificados, loops de feedback oportunos e disponibilidade de serviço consistente. Aqui está um guia destilado sobre o que as equipes de DevOps devem considerar:
Entendendo as Cargas de Trabalho:
Expansibilidade:
Considerações de Conectividade:
Tempo de Atividade Consistente:
Compatibilidade do Sistema:
Eficiência Energética:
Medidas de Segurança:
Supervisão & Controle:
Orçamento:
Suporte & Comunidade:
Planejamento Futuro:
Ambiente Operacional:
Coordenação com a Nuvem:
Vida Útil do Hardware:
Otimizado para Virtualização:
Adaptabilidade:
Evitando a Dependência de um Único Fornecedor:
Escolhas Ecológicas:
Em essência, as equipes de DevOps devem escolher um hardware que seja compatível com suas tarefas, versátil, que ofereça bom desempenho e que se mantenha dentro do orçamento. Além disso, considerações de longo prazo, como manutenção, atualizações potenciais e compatibilidade com mudanças tecnológicas iminentes, devem ser priorizadas.
</details> <details> <summary>Qual é o papel do hardware no planejamento e implementação da recuperação de desastres?</summary>O hardware é crítico nas soluções de recuperação de desastres (DR). Embora o escopo mais amplo do DR inclua coisas como procedimentos padrão, normas e papéis humanos, é o hardware que mantém os processos de negócios funcionando sem problemas. Aqui está um esboço de como o hardware funciona com o DR:
Armazenando Dados e Garantindo sua Duplicação:
Sistemas Alternativos para Recuperação:
Hubs de Operação Alternativos:
Mecanismos de Backup de Energia:
Equipamento de Rede:
Configuração Física no Local:
Canais de Comunicação Alternativos:
Mecanismos de Proteção:
Uniformidade e Compatibilidade no Hardware:
Equipamento para Testes e Manutenção:
Em resumo, embora o software e as intervenções humanas sejam importantes nas operações de recuperação de desastres, é o hardware que fornece o suporte subjacente. É fundamental para planos eficientes de recuperação de desastres manter este hardware resiliente, duplicado e rotineiramente avaliado.
</details> <details> <summary>O que é um RAID?</summary> <b> RAID é um acrônimo que significa "Redundant Array of Independent Disks" (Arranjo Redundante de Discos Independentes). É uma técnica que combina vários discos rígidos em um único dispositivo conhecido como array para melhorar o desempenho, expandir a capacidade de armazenamento e/ou oferecer redundância para evitar a perda de dados. Os níveis de RAID (por exemplo, RAID 0, RAID 1 e RAID 5) oferecem benefícios variados em termos de desempenho, redundância e eficiência de armazenamento.</b></details>
<details> <summary>O que é um microcontrolador?</summary> <b> Um microcontrolador é um pequeno circuito integrado que controla certas tarefas em um sistema embarcado. Ele normalmente inclui uma CPU, memória e periféricos de entrada/saída.</b></details>
<details> <summary>O que é um Controlador de Interface de Rede ou NIC?</summary> <b> Um Controlador de Interface de Rede (NIC) é uma peça de hardware que conecta um computador a uma rede e permite que ele se comunique com outros dispositivos.</b></details>
<details> <summary>O que é um DMA?</summary> <b>O acesso direto à memória (DMA) é um recurso de sistemas de computador que permite que certos subsistemas de hardware acessem a memória principal do sistema independentemente da unidade central de processamento (CPU). O DMA permite que os dispositivos compartilhem e recebam dados da memória principal em um computador. Ele faz isso enquanto ainda permite que a CPU execute outras tarefas. </b></details>
<details> <summary>O que são Sistemas Operacionais de Tempo Real?</summary> <b>Um sistema operacional de tempo real (RTOS) é um sistema operacional (SO) para aplicações de computação em tempo real que processa dados e eventos que têm restrições de tempo criticamente definidas. Um RTOS é distinto de um sistema operacional de tempo compartilhado, como o Unix, que gerencia o compartilhamento de recursos do sistema com um agendador, buffers de dados ou priorização de tarefas fixas em um ambiente multitarefa ou multiprogramação. Os requisitos de tempo de processamento precisam ser totalmente compreendidos e limitados, em vez de apenas mantidos como um mínimo. Todo o processamento deve ocorrer dentro das restrições definidas. Os sistemas operacionais de tempo real são orientados a eventos e preemptivos, o que significa que o SO pode monitorar a prioridade relevante de tarefas concorrentes e fazer alterações na prioridade da tarefa. Os sistemas orientados a eventos alternam entre tarefas com base em suas prioridades, enquanto os sistemas de tempo compartilhado alternam a tarefa com base em interrupções de relógio. </b></details>
<details> <summary>Lista de tipos de interrupção</summary> <b>Existem seis classes de interrupções possíveis:
Conforme definido por Doug Laney:
DataOps busca reduzir o tempo de ciclo de ponta a ponta da análise de dados, desde a origem das ideias até a criação literal de gráficos, gráficos e modelos que criam valor. DataOps combina desenvolvimento Ágil, DevOps e controles de processo estatístico e os aplica à análise de dados. </b></details>
<details> <summary>O que é Arquitetura de Dados?</summary> <b>Uma resposta de talend.com:
"Arquitetura de dados é o processo de padronizar como as organizações coletam, armazenam, transformam, distribuem e usam dados. O objetivo é entregar dados relevantes para as pessoas que precisam deles, quando precisam, e ajudá-las a entendê-los." </b></details>
<details> <summary>Explique os diferentes formatos de dados</summary> <b>Explicação da Wikipedia sobre Data Warehouse Explicação da Amazon sobre Data Warehouse </b></details>
<details> <summary>O que é Data Lake?</summary> <b>Data Lake - Wikipedia </b></details>
<details> <summary>Você pode explicar a diferença entre um data lake e um data warehouse?</summary> <b> </b></details> <details> <summary>O que é "Versionamento de Dados"? Quais modelos de "Versionamento de Dados" existem?</summary> <b> </b></details> <details> <summary>O que é ETL?</summary> <b> </b></details>Apache Hadoop - Wikipedia </b></details>
<details> <summary>Explique o Hadoop YARN</summary> <b>Responsável por gerenciar os recursos de computação em clusters e agendar as aplicações dos usuários </b></details>
<details> <summary>Explique o Hadoop MapReduce</summary> <b>Um modelo de programação para processamento de dados em grande escala </b></details>
<details> <summary>Explique o Hadoop Distributed File Systems (HDFS)</summary> <b>Arquitetura HDFS
O cliente pode ser qualquer um dos seguintes
- Dispositivo de Bloco Ceph
- Gateway de Objeto Ceph
- Qualquer cliente ceph de terceiros
</b></details>
<details> <summary>Qual é o fluxo de trabalho para escrever dados no Ceph?</summary> <b> O fluxo de trabalho é o seguinte:</b></details>
<details> <summary>O que são "Grupos de Posicionamento"?</summary> <b> </b></details> <details> <summary>Descreva em detalhes o seguinte: Objetos -> Pool -> Grupos de Posicionamento -> OSDs</summary> <b> </b></details> <details> <summary>O que é OMAP?</summary> <b> </b></details> <details> <summary>O que é um servidor de metadados? Como funciona?</summary> <b> </b></details>Em geral, o Packer automatiza a criação de imagens de máquina. Ele permite que você se concentre na configuração antes da implantação enquanto cria as imagens. Isso permite que você inicie as instâncias muito mais rápido na maioria dos casos. </b></details>
<details> <summary>O Packer segue um modelo de "configuração->implantação" ou "implantação->configuração"?</summary> <b>Uma configuração->implantação que tem algumas vantagens como:
Esta página explica perfeitamente:
Dado um número de versão MAJOR.MINOR.PATCH, incremente o:
versão MAJOR quando você faz alterações de API incompatíveis
versão MINOR quando você adiciona funcionalidade de maneira compatível com versões anteriores
versão PATCH quando você faz correções de bugs compatíveis com versões anteriores
Rótulos adicionais para pré-lançamento e metadados de compilação estão disponíveis como extensões para o formato MAJOR.MINOR.PATCH.
</b></details>
Se você está procurando uma maneira de se preparar para um determinado exame, esta é a seção para você. Aqui você encontrará uma lista de certificados, cada um referenciando um arquivo separado com perguntas focadas que o ajudarão a se preparar para o exame. Boa sorte :)
Obrigado a todos os nossos incríveis colaboradores que tornam fácil para todos aprenderem coisas novas :)
Os créditos dos logotipos podem ser encontrados aqui