Skip to content

Repository files navigation

☕ Estudos Java — Engenharia de Software & Práticas Corporativas

Java PostgreSQL Threads License

Repositório curado com exemplos práticos, arquitetura limpa e conceitos fundamentais do ecossistema Java. Desenvolvido durante os estudos da Pós-Graduação em Engenharia de Software e transição profissional para o mercado de desenvolvimento backend.

🎯 Objetivo: Demonstrar não apenas a sintaxe da linguagem, mas as nuances profundas que diferenciam um engenheiro de software: ciclo de vida de threads na JVM, atomicidade de instruções no processador, integridade de dados concorrentes, segurança de conexões relacionais e polimorfismo.


📂 Estrutura Modular do Projeto

Estudos_Java/
├── 01-concorrencia-multithreading/
│   ├── ThreadStatesDemo.java        # Ciclo de vida completo dos 6 estados da JVM
│   └── RaceConditionDemo.java       # Simulação de perda de dados e correções com Mutex e CAS
│
├── 02-banco-de-dados-jdbc/
│   ├── .env.example                 # Modelo de variáveis de ambiente (Credenciais seguras)
│   └── DatabaseConnectionDemo.java  # Conexão com PostgreSQL, PreparedStatement e Metadados
│
├── 03-io-e-serializacao/
│   ├── Aluno.java                   # Entidade Serializable (serialVersionUID explícito)
│   ├── SerializacaoObjetosDemo.java # ObjectOutputStream e ObjectInputStream com Try-with-resources
│   └── ArquivosBinariosDataDemo.java# Manipulação de tipos primitivos binários e tratamento de EOF
│
├── 04-programacao-orientada-a-objetos/
│   ├── Conta.java                   # Classe Abstrata base com regras de negócio encapsuladas
│   ├── ContaCorrente.java           # Subclasse com cheque especial e taxas
│   ├── ContaPoupanca.java           # Subclasse com rendimento e saque protegido
│   └── BancoAppDemo.java            # Demonstração de Despacho Dinâmico (Polimorfismo em runtime)
│
└── 05-colecoes-e-estruturas-dados/
    ├── ColecoesComparacaoDemo.java  # Análise prática: ArrayList vs LinkedList vs HashSet vs TreeSet
    └── OrdenacaoComparatorDemo.java # Ordenação customizada com Comparable, Comparator e Iterator

🚀 Destaques Técnicos dos Módulos

1. Concorrência & Multithreading

  • Os 6 Estados Oficiais da JVM (Thread.State): Demonstração em código da transição entre NEW, RUNNABLE, TIMED_WAITING, WAITING, BLOCKED e TERMINATED.
  • Desmistificação de count++: Análise em nível de Bytecode comprovando que o incremento não é atômico (ILOAD $\rightarrow$ IADD $\rightarrow$ ISTORE), gerando condições de corrida em concorrência desprotegida.
  • Soluções Comparadas:
    • synchronized: Exclusão mútua através de Monitor Locks intrínsecos.
    • AtomicInteger: Abordagem moderna Lock-Free utilizando instruções diretas da CPU via CAS (Compare-And-Swap).

2. Banco de Dados & JDBC (PostgreSQL)

  • Segurança em Primeiro Lugar: Isolamento completo de senhas e dados sensíveis via .env (nunca expostos no repositório).
  • Prevenção contra SQL Injection: Uso estrito de PreparedStatement com parâmetros indexados (?).
  • Clean Code: Gestão de conexões e cursores com try-with-resources, eliminando memory leaks e conexões zumbis no banco.

3. I/O e Serialização de Objetos

  • Serialização Binária: Persistência de grafos de objetos na memória para arquivos físicos utilizando ObjectOutputStream.
  • Tratamento Seguro de Streams: Demonstração de fechamento de buffers de I/O e detecção de término de arquivos binários com EOFException.

4. POO Avançada & Domínio Bancário

  • Princípio da Responsabilidade Única (SRP): Separação estrita entre contas e clientes.
  • Polimorfismo Real: Execução de listas genéricas List<Conta> onde cada chamada de saque ou extrato executa a lógica especializada da subclasse em tempo de execução (Dynamic Method Dispatch).
  • Java Moderno: Uso de Pattern Matching para instanceof (Java 16+).

5. Collections & Estruturas de Dados

  • Trade-offs de Engenharia: Quando escolher busca rápida $O(1)$ (ArrayList), inserção nas pontas (LinkedList), unicidade com hashing (HashSet) ou ordenação natural $O(\log n)$ com árvore Red-Black (TreeSet).
  • Iteração Segura: Prevenção do erro ConcurrentModificationException utilizando Iterator.remove().

🛠️ Como Executar os Exemplos

Todos os módulos utilizam apenas a biblioteca padrão do Java (JDK 17+) e podem ser compilados e executados diretamente pelo terminal.

1. Clonar o repositório

git clone https://github.com/Jklimaitis/Estudos_Java.git
cd Estudos_Java

2. Executar Concorrência & Threads

# Ciclo de vida e estados das threads (Execução direta no Java 11+)
java 01-concorrencia-multithreading/ThreadStatesDemo.java

# Simulação de Race Condition na bilheteria
java 01-concorrencia-multithreading/RaceConditionDemo.java

3. Executar Banco de Dados & JDBC

java 02-banco-de-dados-jdbc/DatabaseConnectionDemo.java

4. Executar I/O e Serialização

javac 03-io-e-serializacao/*.java
java -cp 03-io-e-serializacao SerializacaoObjetosDemo
java 03-io-e-serializacao/ArquivosBinariosDataDemo.java

5. Executar Domínio Bancário (POO)

javac 04-programacao-orientada-a-objetos/*.java
java -cp 04-programacao-orientada-a-objetos BancoAppDemo

6. Executar Coleções & Estruturas de Dados

java 05-colecoes-e-estruturas-dados/ColecoesComparacaoDemo.java
java 05-colecoes-e-estruturas-dados/OrdenacaoComparatorDemo.java

👤 Autor

Jonas Klimaitis

  • Estudante de Pós-Graduação em Engenharia de Software
  • Foco: Python, Django, Java, Bancos de Dados Relacionais, Arquitetura de Software e Concorrência.
  • GitHub: @Jklimaitis

Licença MIT — Livre para uso e consulta para fins educacionais e profissionais.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages