Apostila Detalhada e Ampliada
Instrutor de Desenvolvimento de Sistemas

1. Fundamentos de Computação

A Ciência da Computação estuda o processamento sistemático e automático da informação por meio de dispositivos eletrônicos.

Dado vs. Informação vs. Conhecimento

  • Dado: Elemento na sua forma bruta, desprovido de contexto ou significado (ex.: 38.5).
  • Informação: Dado estruturado, processado e contextualizado que gera significado (ex.: "A temperatura corporal do paciente é 38.5°C, indicando febre").
  • Conhecimento: A assimilação e aplicação da informação combinada com experiência e discernimento para tomada de decisão (ex.: "Administrar antitérmico e monitorar o paciente").

Arquitetura Clássica de Von Neumann

Proposta por John von Neumann em 1945, estabelece o conceito de programa armazenado, onde dados e instruções compartilham a mesma memória principal.

Dispositivos E/S CPU Unid. Controle (UC) ULA + Registradores Memória Principal (RAM)
Diagrama da Arquitetura de Von Neumann (Barramentos de Interconexão)
  • Unidade Central de Processamento (CPU):
    • Unidade de Controle (UC): Busca instruções na memória, decodifica-as e gerencia o fluxo de controle de todo o sistema.
    • Unidade Lógica e Aritmética (ULA): Realiza cálculos matemáticos (soma, subtração) e operações lógicas (AND, OR, NOT, comparações).
    • Registradores: Memórias ultra-rápidas dentro do chip do processador (ex.: Registrador de Instrução - RI, Contador de Programa - PC, Acumulador - ACC).
  • Ciclo de Máquina (Instruction Cycle):
    1. Busca (Fetch): O processador busca a instrução na memória RAM no endereço indicado pelo Contador de Programa (PC).
    2. Decodificação (Decode): A UC interpreta o que a instrução exige.
    3. Execução (Execute): A ULA realiza a operação ou os dados são movimentados.
    4. Escrita/Armazenamento (Writeback): O resultado é escrito nos registradores ou na RAM.

Hierarquia de Memória

Registradores Memória Cache (L1, L2, L3) Memória RAM / ROM Armazenamento Secundário (SSD/HD)
Hierarquia: Velocidade e Custo crescem para o topo; Capacidade cresce para a base.
Exemplo Prático: Ao executar um programa Python, as instruções são lidas do SSD (secundário), carregadas na RAM (principal), copiadas para a Cache para rápido acesso do processador e finalmente executadas nos Registradores da CPU.

2. Organização e Arquitetura de Computadores

Embora frequentemente usados como sinônimos, Arquitetura e Organização referem-se a níveis distintos de abstração computacional.

Diferença Fundamental

  • Arquitetura (Visão do Programador/Compilador): Atributos conceituais e lógicos. Inclui o conjunto de instruções (ISA), modos de endereçamento, formatos de dados e registradores visíveis.
  • Organização (Visão do Engenheiro de Hardware): Implementação física transparente ao programador. Inclui sinais de controle, tecnologia de semicondutores, frequência de clock e barramentos.

ISA (Instruction Set Architecture) e Paradigmas RISC vs. CISC

Característica RISC (Reduced Instruction Set Computer) CISC (Complex Instruction Set Computer)
Instruções Instruções simples, fixas e executadas em 1 ciclo de clock. Instruções complexas de tamanho variável, múltiplos ciclos.
Acesso à Memória Apenas via comandos LOAD e STORE. Instruções operam diretamente na memória.
Registradores Grande quantidade de registradores de propósito geral. Quantidade menor de registradores dedicados.
Modos Endereçamento Poucos e simples. Múltiplos e altamente complexos.
Exemplos de Chips ARM (smartphones, Apple Silicon M1/M2/M3), RISC-V. Intel x86 / x86-64 (Core i7, i9), AMD Ryzen.

Barramentos de Comunicação (Buses)

  • Barramento de Dados (Data Bus): Trafega os dados entre componentes (bidirecional).
  • Barramento de Endereço (Address Bus): Transporta o endereço de memória onde a informação será lida ou salva (unidirecional da CPU para a RAM).
  • Barramento de Controle (Control Bus): Transmite sinais de controle e sincronização (ex.: Read, Write, Interrupt, Clock).

3. Sistema Computacional (Hardware e Software)

Um sistema computacional resulta do trabalho integrado entre recursos físicos (Hardware) e instruções lógicas (Software).

Componentes Detalhados do Hardware

  • CPU / Processador: Frequência de clock (GHz), quantidade de núcleos físicos e lógicos (multithreading), memória Cache L1 (instruções/dados), L2 e L3.
  • Placa-Mãe (Motherboard): Placa de circuito impresso que interconecta o chipset (Ponte Norte/Sul ou System Agent), soquete da CPU, slots PCIe e conectores SATA/M.2.
  • Memórias:
    • RAM (Random Access Memory): Volátil, leitura/escrita rápida (DDR4, DDR5).
    • ROM (Read Only Memory): Não volátil. Contém o firmware inicial (BIOS/UEFI) e rotinas POST (Power-On Self-Test).
  • Periféricos de Entrada/Saída: Teclado, mouse, scanners (Entrada); Monitores, impressoras (Saída); SSDs, touchscreens (Entrada e Saída).

Categorização de Software

Software Aplicativo (Navegador, VS Code, Word) Software de Sistema (Sistema Operacional, Compiladores, Drivers) Firmware & Hardware (BIOS/UEFI, CPU, Memória)

4. Sistemas Operacionais – Proprietários e Livres

O Sistema Operacional (SO) atua como intermediário entre o usuário/aplicativos e o hardware do computador.

Funções Core do Sistema Operacional

  • Gerenciamento de Processos: Criação, escalonamento (Round-Robin, Prioridades, SJF) e término de processos e threads.
    • Estados de um processo: Novo → Pronto → Executando → Bloqueado (Aguardando E/S) → Terminado.
  • Gerenciamento de Memória: Memória Virtual, Paginação (Paging), Paging swapping, prevenção de fragmentação e proteção de espaço de endereçamento.
  • Gerenciamento de Arquivos: Abstração de unidades de armazenamento em diretórios e arquivos.
    • Sistemas de Arquivo: NTFS (Windows), ext4 (Linux), APFS (macOS), FAT32/exFAT (pendrives).
  • Gerenciamento de Dispositivos: Abstração de hardware por meio de Drivers de Dispositivo e manipulação de interrupções.

Tabela Comparativa: Proprietários vs. Livres

Atributo Sistemas Proprietários (Windows / macOS) Sistemas Livres / Código Aberto (Linux / BSD)
Licenciamento Licença EULA fechada, uso pago ou atrelado ao hardware. Licenças Livres (GPL, MIT, Apache). Livre redistribuição.
Acesso ao Código Código-fonte confidencial e inacessível. Código totalmente aberto e auditável pela comunidade.
Customização Restrita às opções oferecidas pela empresa criadora. Total alteração do Kernel, módulos e interfaces gráficas.
Exemplos CLI PowerShell (Get-Process), CMD (dir). Bash/Zsh (ls -la, ps aux, grep).

5. Suíte para Escritórios – Proprietárias e Livres

Pacotes de produtividade indispensáveis para rotinas corporativas e acadêmicas.

Comparativo das Suítes Principais

Aplicação Microsoft Office (Proprietária) LibreOffice (Livre / Open Source) Google Workspace (SaaS / Nuvem)
Texto Word (.docx) Writer (.odt) Google Docs
Planilha Excel (.xlsx) Calc (.ods) Google Sheets
Apresentação PowerPoint (.pptx) Impress (.odp) Google Slides
Padrão Documental OOXML (Office Open XML) ODF (OpenDocument Format - ISO) Armazenamento em Nuvem / Exportação
Recurso de Produtividade em Planilhas: Utilização de funções essenciais como VLOOKUP / PROCV, SUMIF / SOMASE e Tabelas Dinâmicas para análise sintética de grandes volumes de dados.

6. Software de Produtividade e Serviços em Nuvem

A Computação em Nuvem (Cloud Computing) entrega recursos de TI sob demanda via Internet com pagamento conforme o uso (pay-as-you-go).

Modelos de Serviço (SPI Model)

SaaS Software as a Service • Google Drive • Office 365 • Trello / Notion PaaS Platform as a Service • Heroku • AWS Elastic Beanstalk • Firebase IaaS Infrastructure as a Service • AWS EC2 / S3 • Azure VMs • Google Compute

Modelos de Implantação

  • Nuvem Pública: Infraestrutura compartilhada entre múltiplos clientes (ex.: AWS, GCP, Azure).
  • Nuvem Privada: Infraestrutura de uso exclusivo de uma única organização (local/on-premise ou dedicada).
  • Nuvem Híbrida: Integração dinâmica entre ambientes privados e públicos.

7. Cibersegurança: Vírus, Spyware, Malware e Phishing

Segurança da Informação fundamenta-se na Tríade CIA: Confidencialidade, Integridade e Disponibilidade.

Taxonomia de Ameaças e Malware

  • Vírus: Programa malicioso que infecta arquivos executáveis hospedeiros e depende da ação do usuário para propagação.
  • Worm (Verme): Código malicioso independente que explora vulnerabilidades e se autorreplica automaticamente pela rede.
  • Trojan (Cavalo de Tróia): Disfarça-se de utilitário legítimo para abrir portas traseiras (backdoors).
  • Spyware: Monitora silenciosamente o usuário (Keyloggers capturam teclas; Screenloggers capturam telas).
  • Ransomware: Criptografa dados da vítima e exige resgate (geralmente em criptomoedas) para fornecer a chave de decodificação.
  • Adware: Injeta anúncios publicitários indesejados no navegador ou sistema.

Técnicas de Engenharia Social (Phishing)

Enganação psicológica para induzir o usuário a revelar senhas ou tokens corporativos.

  • Phishing Tradicional: E-mails em massa simulando bancos, e-commerce ou órgãos governamentais.
  • Spear Phishing: Ataque customizado direcionado a um indivíduo ou empresa específica.
  • Smishing / Vishing: Phishing realizado via SMS (Smishing) ou chamadas telefônicas/Voz (Vishing).
Boas Práticas de Defesa: Implementação de Autenticação Multifator (MFA/2FA), adoção do princípio do Menor Privilégio (Least Privilege), Firewalls com inspeção de pacotes e uso de funções Hash criptográficas (SHA-256) para validação de integridade.

8. Sistemas de Gerenciamento de Bancos de Dados (SGBD)

Um SGBD é um software encarregado de criar, consultar, atualizar e administrar dados estruturados de maneira segura e eficiente.

Arquitetura ANSI/SPARC (3 Níveis de Abstração)

  1. Nível Externo (Visões): Como os usuários/aplicações enxergam os dados (Views customizadas).
  2. Nível Conceitual (Esquema Lógico): Estrutura lógica global de todas as tabelas, colunas e relacionamentos (DER / Modelo Relacional).
  3. Nível Interno (Esquema Físico): Organização física dos arquivos de dados no disco, índices (B-Tree, Hash), blocos e ponteiros.

Garantia de Transações: Propriedades ACID

  • Atomicidade (Atomicity): Princípio do "Tudo ou Nada". A transação executa completamente ou é totalmente desfeita (Rollback).
  • Consistência (Consistency): Transição válida de um estado íntegro do banco para outro, respeitando todas as regras de integridade (Primary Key, Foreign Key, Check).
  • Isolamento (Isolation): Transações concorrentes devem ser executadas sem interferir no estado intermediário umas das outras.
    • Anomalias de concorrência: Dirty Read (Leitura Suja), Non-Repeatable Read (Leitura Não-Repetível) e Phantom Read (Leitura Fantasma).
  • Durabilidade (Durability): Uma vez confirmado (Commit), o resultado da transação persiste mesmo em caso de pane do sistema.

Controle de Concorrência e Mecanismos WAL

Uso de trava de bloqueio (Pessimistic Locking) ou controle de concorrência multiversão (MVCC - Optimistic). Mecanismos de log como WAL (Write-Ahead Logging) garantem as operações REDO e UNDO em recuperações de falha com Checkpoints.

9. Programação PL/SQL (Oracle / PostgreSQL PL/pgSQL)

Extensão procedural da linguagem SQL que permite o desenvolvimento de lógica de negócios diretamente no motor do banco de dados.

Estrutura Básica de um Bloco PL/SQL

DECLARE
   -- Declaração de variáveis, constantes e cursores
   v_aluno_id   NUMBER(6) := 101;
   v_nome       VARCHAR2(100);
   v_media      NUMBER(4,2);
BEGIN
   -- Bloco de Instruções Executáveis (SQL + Controle Procedural)
   SELECT nome, media 
     INTO v_nome, v_media 
     FROM alunos 
    WHERE id = v_aluno_id;

   IF v_media >= 7.0 THEN
      DBMS_OUTPUT.PUT_LINE('Aluno: ' || v_nome || ' - APROVADO');
   ELSE
      DBMS_OUTPUT.PUT_LINE('Aluno: ' || v_nome || ' - REPROVADO');
   END IF;

EXCEPTION
   -- Tratamento Robusto de Exceções
   WHEN NO_DATA_FOUND THEN
      DBMS_OUTPUT.PUT_LINE('Erro: Aluno não cadastrado.');
   WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE('Erro inesperado: ' || SQLERRM);
END;

Objetos do Banco: Procedures, Functions e Triggers

  • Procedure (Procedimento Armazenado): Bloco nomeado executado para realizar tarefas. Não é obrigado a retornar valor diretamente (usa parâmetros IN, OUT, IN OUT).
  • Function (Função): Bloco que DEVE retornar um valor via cláusula RETURN, podendo ser invocada dentro de instruções SQL normais.
  • Trigger (Gatilho): Bloco executado automaticamente em resposta a eventos DML (INSERT, UPDATE, DELETE) ou DDL, podendo agir BEFORE ou AFTER.

10. Linguagens de Programação

Linguagens de programação são notações formais para instrução e automação de processamento de dados.

Paradigmas Principais

  • Imperativo / Procedural: Focado em sequências de comandos e mudanças de estado (C, Pascal).
  • Orientado a Objetos (POO): Estruturado em torno de objetos que combinam dados (atributos) e comportamentos (métodos). Pilares: Abstração, Encapsulamento, Herança e Polimorfismo (Java, C++, C#).
  • Funcional: Baseado em avaliação de funções matemáticas puras, imutabilidade e ausência de efeitos colaterais (Haskell, Lisp, Clojure, Elixir).
  • Lógico: Baseado em declaração de fatos, regras e inferência lógica (Prolog).

Compilação, Interpretação e Bytecode

Modelo Processo Vantagens / Desvantagens Linguagens
Compilado Código-fonte traduzido de uma só vez para binário nativo da CPU. Alta performance de execução. Compilação demorada. C, C++, Rust, Go
Interpretado Código traduzido e executado instrução por instrução em tempo real. Desenvolvimento rápido e portátil. Velocidade de execução menor. Python, Ruby, PHP
Híbrido (Bytecode/JIT) Código compilado para um bytecode intermediário e executado por uma máquina virtual (JVM / CLR). Portabilidade total ("Write once, run anywhere") com otimização JIT. Java, C#

11. Noções de Linguagens Procedurais

O paradigma procedural organiza programas por meio de sub-rotinas (funções e procedimentos) reutilizáveis.

Mecanismos de Passagem de Parâmetros

  • Passagem por Valor (By Value): Uma cópia do dado é enviada para a sub-rotina. Alterações no parâmetro dentro da função não afetam a variável original.
  • Passagem por Referência (By Reference): O endereço de memória da variável original é passado. Alterações na sub-rotina modificam diretamente a variável no chamador.
Por Valor (Cópia) Var Origem [10] --Cópia--> Var Local [10] Origem Inalterada Por Referência (Ponteiro) Var Local --> [Endereço: 0x7FFA] Altera Valor Original

Recursividade

Técnica onde uma função chama a si mesma até atingir uma condição de parada (caso base).

// Exemplo em Pseudocódigo: Fatorial Recursivo
funcao fatorial(n)
   se n == 0 ou n == 1 entao
      retorne 1  // Caso Base
   senao
      retorne n * fatorial(n - 1)  // Passo Recursivo
   fimse
fimfuncao

12. Estruturas de Controle de Fluxo

Estruturas de controle determinam a ordem exata de execução das instruções do código.

1. Sequência

Execução linear e consecutiva de comandos linha após linha.

2. Seleção / Desvio Condicional

  • Simples / Composta: if (condicao) { ... } else { ... }
  • Múltipla Escolha: switch (valor) { case 1: ... break; default: ... }

3. Repetição / Laços (Loops)

  • Pré-testado (While): O bloco executa 0 ou N vezes enquanto a condição for verdadeira.
  • Pós-testado (Do-While / Repeat-Until): O bloco é executado garantidamente pelo menos 1 vez.
  • Contado (For): Utilizado quando se conhece previamente a quantidade finita de iterações.

13. Programação em Python

Python é uma linguagem de altíssimo nível, multiparadigma, com tipagem dinâmica e forte, destacando-se por sua sintaxe limpa e legível.

Estruturas de Dados Nativas em Python

  • Listas (list): Mutáveis, ordenadas, aceitam duplicatas. Ex.: [1, 2, 3]
  • Tuplas (tuple): Imutáveis, ordenadas. Ex.: (10, 20)
  • Dicionários (dict): Pares chave-valor, altamente otimizados via tabela Hash. Ex.: {"nome": "Ana", "idade": 25}
  • Conjuntos (set): Coleção não ordenada de elementos únicos. Ex.: {1, 2, 3}

Exemplos Avançados de Python

# List Comprehension com Filtragem Condicional
numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
quadrados_pares = [x**2 for x in numeros if x % 2 == 0]
print(quadrados_pares)  # Saída: [4, 16, 36, 64, 100]

# Manipulação Otimizada de Arquivos com Context Manager (with)
try:
    with open("relatorio.txt", "w", encoding="utf-8") as arq:
        arq.write("Processamento concluído com sucesso.\n")
except IOError as e:
    print(f"Erro na operação de E/S: {e}")

# Definição de Função com Argumentos Flexíveis
def calcular_media(*notas, **detalhes):
    media = sum(notas) / len(notas) if notas else 0.0
    aluno = detalhes.get("aluno", "Desconhecido")
    return f"Aluno: {aluno} | Média: {media:.2f}"

print(calcular_media(8.5, 9.0, 7.5, aluno="Carlos"))

14. Desenvolvimento Web: JavaScript, jQuery, PHP e Ruby on Rails

O ecossistema do desenvolvimento Web divide-se entre Frontend (Cliente) e Backend (Servidor).

Frontend: JavaScript (ES6+) e jQuery

  • JavaScript: Linguagem oficial do navegador. Recursos ES6+: let/const, Arrow Functions, Template Literals, Destructuring e manipulação do DOM.
    // Programação Assíncrona com Fetch API / Async-Await
    async function carregarDados() {
        try {
            const resposta = await fetch('https://api.example.com/dados');
            const dados = await resposta.json();
            console.log(dados);
        } catch (erro) {
            console.error('Falha na requisição:', erro);
        }
    }
  • jQuery: Biblioteca JavaScript clássica para abstração do DOM e suporte AJAX cross-browser.
    $(document).ready(function() {
        $("#btnOcultar").click(function() {
            $(".conteudo").fadeOut("slow");
        });
    });

Backend: PHP e Ruby on Rails

  • PHP: Linguagem server-side interpretada amplamente utilizada na Web. Conecta-se nativamente a SGBDs como MySQL e PostgreSQL via PDO.
    <?php
    // Conexão segura via PDO
    $pdo = new PDO('mysql:host=localhost;dbname=sistema', 'usuario', 'senha');
    $stmt = $pdo->prepare('SELECT * FROM usuarios WHERE id = :id');
    $stmt->execute(['id' => 1]);
    $usuario = $stmt->fetch();
    echo json_encode($usuario);
    ?>
  • Ruby on Rails (RoR): Framework MVC opinativo em Ruby fundamentado em "Convenção sobre Configuração" (CoC) e "Don't Repeat Yourself" (DRY), utilizando ActiveRecord para ORM.

15. Estruturas de Dados e Algoritmos

A escolha correta da estrutura de dados e do algoritmo é determinante para a eficiência assintótica de um sistema.

Estruturas Principais

  • Pilhas (LIFO - Last In, First Out): Operações push e pop ocorrem no topo. Usado em chamadas de funções e histórico do navegador.
  • Filas (FIFO - First In, First Out): Inserção no fim (enqueue) e remoção no início (dequeue). Usado em filas de impressão e mensageria.
  • Árvores Binárias de Busca (BST): Nós com no máximo 2 filhos. Para todo nó, valores à esquerda são menores e à direita são maiores.
Item 1 Item 2 (Topo) Pilha (LIFO) Sai Entra Fila (FIFO)

Complexidade Algorítmica (Notação Big-O)

Algoritmo Melhor Caso Caso Médio Pior Caso Espaço Auxiliar
Busca Seqüencial O(1) O(n) O(n) O(1)
Busca Binária (Requer Lista Ordenada) O(1) O(log n) O(log n) O(1)
Bubble / Insertion Sort O(n) O(n²) O(n²) O(1)
Quick Sort O(n log n) O(n log n) O(n²) O(log n)
Merge Sort O(n log n) O(n log n) O(n log n) O(n)

16. Referências

17. Teste Teórico Prático (Com Respostas Ocultas)

1. Qual a diferença fundamental entre arquitetura e organização de computadores?
Resposta: A arquitetura refere-se aos atributos visíveis ao programador (como o conjunto de instruções, modos de endereçamento e tipos de dados), enquanto a organização trata da implementação física e transparente ao programador (sinais de controle, tecnologia de memória e clock).

2. Cite três funções primordiais de um sistema operacional.
Resposta: Gerenciamento de processos, gerenciamento de memória principal/virtual e gerenciamento de arquivos e dispositivos de E/S.

3. O que define um software livre sob a licença GPL?
Resposta: O direito e a liberdade de executar, estudar, modificar o código-fonte e redistribuir cópias ou versões modificadas mantendo a mesma licença livre.

4. Explique em detalhes o que significa cada letra da sigla ACID em bancos de dados.
Resposta: Atomicidade (a transação é executada por inteiro ou revertida), Consistência (o banco transita entre estados válidos), Isolamento (transações concorrentes não interferem entre si) e Durabilidade (dados confirmados persistem fisicamente).

5. O que caracteriza um ataque de phishing e qual sua principal forma de prevenção?
Resposta: É uma técnica de engenharia social voltada a enganar o usuário para obtenção de dados confidenciais. A prevenção envolve treinamento de conscientização, uso de autenticação multifator (MFA) e verificação rigorosa de remetentes e URLs.

6. Qual a diferença entre uma lista e uma tupla em Python?
Resposta: As listas são mutáveis (podem ter seus elementos alterados, adicionados ou removidos após a criação), enquanto as tuplas são imutáveis.

7. Descreva o funcionamento de uma Árvore Binária de Busca (BST).
Resposta: É uma estrutura hierárquica onde cada nó possui no máximo dois filhos. Para qualquer nó, todos os elementos na subárvore esquerda possuem valores menores e todos na subárvore direita possuem valores maiores.

8. Qual é a complexidade de tempo de pior caso e de caso médio da busca binária?
Resposta: O(log n) tanto para caso médio quanto para pior caso, exigindo obrigatoriamente que os dados estejam ordenados.

9. Diferencie os modelos de serviço SaaS, PaaS e IaaS em computação em nuvem.
Resposta: SaaS fornece o software final pronto via web; PaaS entrega a plataforma completa para desenvolvimento e deploy de código; IaaS oferece recursos de infraestrutura virtualizada (servidores, redes e armazenamento).

10. O que é um SGBD e qual o seu papel na arquitetura ANSI/SPARC?
Resposta: É o software de gerenciamento de dados que abstrai o armazenamento em 3 níveis (externo, conceitual e interno), garantindo integridade, segurança e controle de concorrência.

18. Teste Prático de Código (Com Soluções Ocultas)

1. Python: Escreva uma função chamada soma_pares que recebe uma lista de números inteiros e retorna a soma de todos os números pares.

def soma_pares(lista):
    return sum(num for num in lista if num % 2 == 0)

# Teste da solução
print(soma_pares([1, 2, 3, 4, 5, 6]))  # Saída esperada: 12

2. Python: Crie uma list comprehension que gere os quadrados dos números de 1 a 10.

quadrados = [x**2 for x in range(1, 11)]
print(quadrados)  # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

3. PL/SQL: Escreva uma procedure que insira um novo registro na tabela alunos (id, nome, curso).

CREATE OR REPLACE PROCEDURE inserir_aluno(
    p_id IN NUMBER,
    p_nome IN VARCHAR2,
    p_curso IN VARCHAR2
) AS
BEGIN
    INSERT INTO alunos (id, nome, curso) 
    VALUES (p_id, p_nome, p_curso);
    
    COMMIT;
EXCEPTION
    WHEN DUP_VAL_ON_INDEX THEN
        DBMS_OUTPUT.PUT_LINE('Erro: ID de aluno já existente.');
        ROLLBACK;
    WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('Erro na inserção: ' || SQLERRM);
        ROLLBACK;
END;

4. JavaScript: Escreva uma função ES6 que filtre um array e retorne apenas valores estritamente maiores que 10.

const maioresQueDez = (array) => array.filter(num => num > 10);

console.log(maioresQueDez([5, 12, 8, 20, 3, 15])); // Saída: [12, 20, 15]

5. Estrutura de Dados: Implemente uma classe Pilha (Stack) em Python com métodos push, pop e is_empty.

class Pilha:
    def __init__(self):
        self._itens = []
        
    def push(self, item):
        self._itens.append(item)
        
    def pop(self):
        if self.is_empty():
            return None
        return self._itens.pop()
        
    def is_empty(self):
        return len(self._itens) == 0

# Teste
p = Pilha()
p.push(10)
p.push(20)
print(p.pop())  # 20
print(p.is_empty())  # False

6. Algoritmos: Implemente a Busca Binária de forma iterativa em Python.

def busca_binaria(lista, alvo):
    inicio = 0
    fim = len(lista) - 1
    
    while inicio <= fim:
        meio = (inicio + fim) // 2
        if lista[meio] == alvo:
            return meio  # Retorna o índice
        elif lista[meio] < alvo:
            inicio = meio + 1
        else:
            fim = meio - 1
            
    return -1  # Não encontrado

print(busca_binaria([10, 20, 30, 40, 50], 40))  # Saída: 3

19. Plano de Microaula Completo (Planejamento Pedagógico)

Plano Didático de Microaula

Tema: Introdução à Cibersegurança: Identificação e Prevenção de Engenharia Social (Phishing)

Objetivo Geral: Capacitar os alunos a identificar os vetores de ataque por phishing e aplicar os procedimentos operacionais de proteção.

Duração Total: 20 Minutos | Público-Alvo: Estudantes do Curso Técnico em Desenvolvimento de Sistemas

Slide Conteúdo e Estratégia Pedagógica Tempo Estimado
1 Abertura e Apresentação: Boas-vindas, apresentação do tema e objetivos de aprendizagem. 1 min
2 Problematização Inicial: Pergunta motivadora: "Quem aqui já recebeu uma mensagem informando que seu nome está no Serasa ou com link de encomenda retida?" 2 min
3 Conceituação Teórica: O que é Phishing e Engenharia Social. Diferenciação de Malware tradicional. 2 min
4 Tipologia dos Ataques: E-mail Phishing, Smishing, Vishing e Spear Phishing. 3 min
5 Estudo de Caso Prático: Análise visual guiada de um e-mail fraudulento real. 3 min
6 Checklist de Indicadores de Fraude: Domínio do remetente, erros ortográficos, senso de urgência e links mascarados. 3 min
7 Mecanismos Tecnológicos de Defesa: Autenticação Forte (MFA), SPF/DKIM/DMARC e Educação Continuada. 3 min
8 Atividade de Fixação Interativa: Apresentação de 2 cenários rápidos para classificação pelos alunos. 2 min
9 Encerramento e Síntese: Resumo dos pontos-chave, espaço para dúvidas e avaliação formativa. 1 min

20. Dicionário de Dados (Glossário Técnico Completo)

Terminologia técnica essencial para o perfil profissional de Instrutor e Desenvolvedor de Sistemas.

Termo Definição Técnica
AlgoritmoSequência finita e não ambígua de instruções passo a passo para resolver um problema.
API (Application Programming Interface)Conjunto de rotinas e padrões de programação para acesso a uma aplicação de software ou plataforma.
Arquitetura MVCPadrão arquitetural dividido em Modelo (Dados), Visão (Interface) e Controlador (Regra de Negócio).
Barramento (Bus)Conjunto de linhas físicas de comunicação que transferem dados entre os componentes do computador.
BytecodeFormato de código intermediário gerado por compiladores e executado por uma Máquina Virtual.
CacheMemória ultra-rápida de pequena capacidade usada para acelerar o acesso aos dados mais frequentes.
CompiladorPrograma que traduz todo o código-fonte de alto nível para código de máquina nativo antes da execução.
DeadlockSituação na qual dois ou mais processos ficam bloqueados indefinidamente aguardando recursos mantidos uns pelos outros.
DriverSoftware especialista que instrui o Sistema Operacional sobre como se comunicar com um hardware específico.
Engenharia SocialManipulação psicológica de pessoas para que executem ações ou divulguem informações confidenciais.
FirewallDispositivo ou software de segurança de rede que monitora e filtra o tráfego de entrada e saída.
FirmwareSoftware residente na memória ROM do hardware com rotinas de inicialização e controle do dispositivo.
HashFunção matemática unidirecional que mapeia dados de tamanho variável em um valor de tamanho fixo.
InterpretadorPrograma que lê e executa o código-fonte linha por linha em tempo de execução.
KernelNúcleo fundamental do Sistema Operacional responsável por conectar o software ao hardware.
MiddlewareSoftware que fornece serviços além dos oferecidos pelo SO para facilitar a comunicação entre aplicações.
ORM (Object-Relational Mapping)Técnica de programação para conversão de dados entre sistemas de tipos incompatíveis em linguagens orientadas a objetos e bancos relacionais.
Ponteiro (Pointer)Variável cujo valor é o endereço direto de memória de outra variável.
REST (Representational State Transfer)Estilo arquitetural para desenvolvimento de web services baseado nos métodos nativos do protocolo HTTP.
TransaçãoUnidade lógica de execução em banco de dados que deve satisfazer integralmente as propriedades ACID.