Viktor's Tech Lab

Blog pessoal

Sobre mim

Olá, meu nome é Victor. Tenho vinte e três anos e sou desenvolvedor autodidata desde os dez anos de idade. Tenho formação em eletrônica então espere ver muitos projetos de arquitetura de baixo nível, robótica, microcontroladores no geral. Atualmente sou estudante de Bacharelado em Física com ênfase em física teórica, trabalhando com simulação computacional em projetos para a indústria privada. Também tenho desenvolvido muito interesse em computação quântica — em especial Criptografia Quântica e Óptica Quântica.

Tenho estudado a parte teórica da Mecânica Quântica — especialmente seu formalismo matemático — estendendo a possibilidade de publicar artigos pessoais aqui também sobre isso. Fiz pesquisa na universidade durante um ano em modelos de aprendizado de máquina usando matemática moderna particularmente o Teorema Viés-Variância e suas implicações. Estudo sobre topologia algébrica e aplicação de teoria de grupos em mecânica quântica.

Em relação ao desenvolvimento de software, tenho familiaridade com microkernels, sistemas distribuídos no geral — experiência com protocolos descentralizados — e redes no geral. Minha experiência atualmente se resume:

  • Java: Spring Batch, Spring Cloud, Spring Security, Quarkus, RestClient Microprofile, Agroal, Panache, Hibernate
  • Python: Flask, task automation algorithms, web scraping, data analysis, e machine learning
  • DevOps & Infrastructure: Docker, K8S, Oracle Cloud, CI/CD

Também sou um entusiasta de cibersegurança — servidores C2 — e gosto bastante de estudar sobre protocolos de privacidade em Web3 principalmente em Bitcoin e Monero, explorando stealth addresses, ring signatures e Confidential Transactions (RingCT). No tempo livre eu gosto de programar em Rust e tenho experiência com as bibliotecas mais famosas: tokio, axum e hyper.

Meus últimos artigos:

Criptografia quântica: Protocolo BB84, Error Estimation, Eavesdropping Check, Cascade, Parity-Check e Privacy Amplification

Tabela

O protocolo BB84 é o primeiro modelo formal de distribuição quântica de chaves (Quantum Key Distribution – QKD), proposto em 1984 pelos cientistas Charles Bennett e Gilles Brassard, além de também ser o primeiro protocolo de fóton-único da criptografia quântica explorando diretamente a não comutatividade dos observáveis — não podem ser medidos simultaneamente com precisão; e a inviabilidade de clonagem de estados arbitrários (Teorema da não-clonagem).

Collection API: definições, abstrações, estruturas fail-test/fail-safe e complexidade computacional

A public interface Collection<E> extends Iterable<E> em Java, introduzida no JDK 1.2 (Java 2), é a raiz do que chamamos de hierarquia de coleções. Ela define o comportamento básico para a manipulação de coleções, ou seja, conjuntos de objetos conhecidos como elementos. Essa interface fornece métodos essenciais para operações como adicionar, remover e consultar elementos, criando uma base padronizada para lidar com grupos de dados.

Uma collection representa, essencialmente, um grupo de objetos, permitindo que o Java organize e manipule dados de forma eficiente. Embora a JDK não implemente diretamente a interface Collection, ela define subinterfaces que representam diferentes tipos de coleções, como Set, List e Queue. Essas subinterfaces oferecem comportamentos específicos para necessidades variadas, mantendo a consistência em toda a hierarquia de coleções.

JVM: Class Loaders, standard (non-diagnostic) e diagnostic flags, CLI parsing.

A Java Virtual Machine (JVM) é o núcleo do ecossistema Java, fornecendo todas as ferramentas essenciais para a execução de código. Para compreender plenamente seu funcionamento, é crucial entender o ciclo de vida desse interpretador e as suas implicações para o desempenho e otimização de aplicações.

Java Virtual Machine Bootstrapping

Todo o ciclo de vida da JVM inicia-se com um processo fundamental chamado de “JVM Bootstrapping” que é responsável por construir todo o ambiente de execução e prepará-lo. É nesse contexto que: os argumentos passados na linha de comando são interpretados, o código da JVM é alocado na memória, as estruturas de dados internas da JVM são inicializadas, o gerenciamento de memória se inicia, e por fim a principal thread da aplicação passa a operar. Vamos explorar cada subprocesso descrito nesse parágrafo individualmente:

JVM: -XX:+PrintCompilation, JIT, código nativo, C1 e C2

Java Virtual Machine

Não é segredo para ninguém que A Máquina Virtual Java, ou JVM (Java Virtual Machine), é uma parte fundamental do ecossistema da linguagem de programação Java. Ela foi revolucionária em sua época, trazendo inovações que transformaram a forma como o software é desenvolvido, executado e distribuído. A JVM é uma máquina virtual que permite que os programas Java sejam executados em diferentes plataformas, proporcionando uma abstração eficiente e independente do sistema operacional subjacente.

Não se limitando apenas a esse escopo revolucionário, mas ela também trouxe revoluções no que diz respeito a performance de código, tendo em vista que a abstração por trás da JVM carregou consigo um conjunto de ferramentas para impressionar nesse contexto: JIT, Garbage Collection, técnicas de inling, otimização de laços, perfil de desempenho... Hoje falaremos sobre sua incrível capacidade de traçar um perfil durante a execução de um código, analisar trechos de códigos que são frequentemente executados durante o tempo de execução e transformá-los em código nativo de máquina.