Swim Lane Flowchart for Employee Onboarding

This document describes a swim lane flowchart for the employee onboarding process, outlining the steps and responsibilities for each department or role involved. The flowchart is organized into lanes, each representing a key stakeholder, with steps sequenced to show the flow of the process.

Lanes

The following lanes represent the departments or individuals involved in the onboarding process:

  1. HR Department: Manages administrative tasks, including job offer acceptance, background checks, orientation, and follow-up reviews.

  2. Facilities Management: Ensures the employee’s workspace is prepared.

  3. Communications/IT Team: Sets up communication tools, such as telephone lines.

  4. Service Desk: Provisions IT equipment and grants system access.

  5. Recruitment and Hiring: Coordinates team introductions and induction.

  6. New Employee: Completes required tasks and participates in onboarding activities.

Flowchart Steps by Lane

Lane

Steps

HR Department

1. Receive job offer acceptance

2. Conduct background check

3. Schedule orientation

4. Prepare employment documents

5. Conduct orientation (first day)

6. Collect signed documents

7. Distribute company handbook

8. Schedule 30-day review

9. Schedule 90-day review

Facilities Management

1. Arrange workspace (desk, chair, etc.)

Communications/IT Team

1. Set up telephone line

Service Desk

1. Grant access to company systems

2. Provision IT equipment (computer, software, etc.)

Recruitment and Hiring

1. Coordinate introduction and induction

2. Schedule meetings with department head and team

New Employee

1. Complete pre-onboarding requirements (background check, drug test)

2. Attend orientation

3. Sign employment documents

4. Participate in training sessions

5. Meet with department head and team

6. Begin work on initial projects

Process Flow

The onboarding process follows this sequence, with interactions between lanes:

  1. HR Department initiates the process by receiving the job offer acceptance and conducting a background check.

  2. HR schedules orientation, while Facilities Management arranges the workspace and Communications/IT Team sets up the telephone line in parallel.

  3. The Service Desk grants system access and provisions IT equipment before the employee’s first day.

  4. On the first day, the New Employee attends orientation conducted by HR, signs employment documents, and receives the company handbook.

  5. Recruitment and Hiring coordinates the employee’s introduction to the department, scheduling meetings with the department head and team.

  6. The New Employee participates in training sessions and begins initial projects.

  7. HR schedules and conducts 30-day and 90-day reviews to ensure successful integration.

Benefits of Using a Swim Lane Flowchart

  • Clarity: Clearly defines who is responsible for each task, reducing confusion.

  • Efficiency: Streamlines handoffs between departments, minimizing delays.

  • Transparency: Provides a visual overview of the process, aiding training and process improvement.

  • Employee Experience: Ensures a structured onboarding process, enhancing employee satisfaction and retention.

Tools for Creating the Flowchart

To create a visual swim lane flowchart, use tools like:

  • Microsoft Visio: Offers robust swim lane templates for process mapping.

  • Lucidchart: Provides user-friendly, cloud-based swim lane diagram creation (www.lucidchart.com).

  • PowerPoint: Includes customizable swim lane templates for quick diagramming.

  • HEFLO: A free BPMN tool for creating editable flowcharts (www.heflo.com).

Example Reference

An example of a swim lane flowchart for employee onboarding can be found at HEFLO’s New Employee Onboarding Process Flowchart. This example includes similar lanes and steps, such as HR administrative tasks, IT provisioning, and team introductions.

Additional Notes

  • If “profile lane” refers to a specific organizational term (e.g., a lane focused on employee profile data like skills or career aspirations), you may need to clarify its meaning. In standard HR practice, swim lane flowcharts are the most relevant tool for mapping onboarding processes.

  • The flowchart can be customized based on your organization’s specific needs, such as adding steps for compliance checks or role-specific training.

  • For further guidance on swim lane diagrams, refer to:

    • Atlassian’s Guide to Swimlane Diagrams

    • MindManager’s Guide to Swim Lane Diagrams

This flowchart structure ensures a comprehensive and organized approach to employee onboarding, aligning tasks with the appropriate departments for a seamless process.

Mermaid – by Gemini

graph TD
    %%{init: {'flowchart': {'curve': 'linear'}}}%%

    subgraph "Hiring Manager"
        A[Initiate Job Requisition] --> B{Approve Requisition?}
        B -- Yes --> C[Submit Job Description to HR]
        B -- No --> D[Revise Requisition] --> A
        C --> E[Interview Candidates]
        E --> F{Select Candidate?}
        F -- Yes --> G[Inform HR of Selection]
        F -- No --> E
    end

    subgraph "HR Department"
        H[Receive Job Requisition] --> I[Post Job Opening]
        I --> J[Screen Applications]
        J --> K[Schedule Interviews]
        K --> E
        G --> L[Prepare Offer Letter]
        L --> M[Send Offer Letter to Candidate]
        M --> N{Offer Accepted?}
        N -- Yes --> O[Initiate Onboarding Process]
        N -- No --> P[Notify Hiring Manager & Re-evaluate] --> J
        O --> Q[Collect New Hire Paperwork]
        Q --> R[Process Payroll & Benefits Enrollment]
        R --> S[Set Up Employee Record in HRIS]
        S --> T[Coordinate IT Setup]
        S --> U[Schedule Orientation]
    end

    subgraph "IT Department"
        V[Receive IT Setup Request] --> W[Create User Accounts & Email]
        W --> X[Prepare Hardware & Software]
        X --> Y[Grant System Access]
        Y --> Z[Notify HR of Completion]
    end

    subgraph "New Employee"
        AA[Receive Offer Letter] --> BB{Review & Sign Offer?}
        BB -- Yes --> CC[Return Signed Offer]
        BB -- No --> DD[Decline Offer]
        CC --> EE[Complete Onboarding Paperwork]
        EE --> FF[Attend Orientation]
        FF --> GG[First Day of Work]
    end

    C -- HR --> H
    G -- HR --> L
    M -- Candidate --> N
    O -- HR --> Q
    S -- IT --> V
    Z -- HR --> O
    AA -- Candidate --> N
    N -- New Hire --> CC
    Q -- New Hire --> EE
    U -- New Hire --> FF
    FF -- Start Work --> GG

DeepSeek

flowchart TD
    subgraph "New Employee"
        A[Signs Offer Letter] --> B[Submit Onboarding Documents]
        B --> C[Attend Orientation]
        C --> D[Complete IT Setup]
    end

    subgraph "HR Department"
        A1[Issue Offer Letter] --> A
        B --> B1[Verify Documents]
        B1 --> B2[Initiate Background Check]
        B2 --> C1[Schedule Orientation]
        C1 --> C
        D --> D1[Confirm Probation Start]
    end

    subgraph "Hiring Manager"
        E1[Request Hiring Approval] --> E2[Send Role Details to HR]
        E2 --> E3[Prepare Workspace]
        C --> E4[Assign Buddy/Mentor]
        E4 --> E5[Define 30-60-90 Plan]
    end

    subgraph "IT Department"
        F1[Receive Setup Request] --> F2[Create Accounts/Email]
        F2 --> F3[Provision Hardware]
        F3 --> F4[Deploy Software]
        F4 --> D
    end

    subgraph "Finance Department"
        G1[Receive Payroll Data] --> G2[Setup Bank/Tax Details]
        G2 --> G3[Enroll in Benefits]
    end

    %% Cross-Lane Connections
    E2 --> A1
    B1 --> G1
    D1 --> G1
    E3 --> F1

Informix Replication AI

Prompt

Quais informações importantes, são necessárias para implementar uma replicação de Banco de Dados Informix, em real time?

Resposta

Para implementar uma replicação de Banco de Dados Informix em tempo real, você precisará considerar diversas informações cruciais para garantir uma configuração eficiente e robusta. A seguir, listo os pontos mais importantes:


 

1. Conhecimento do Ambiente Atual

 

  • Versão do Informix: É fundamental saber a versão exata do Informix (ex: 12.10, 14.10) tanto no servidor primário quanto nos secundários. Isso porque as funcionalidades e a compatibilidade podem variar.
  • Sistema Operacional: Identifique o sistema operacional (Linux, AIX, Windows, etc.) e sua versão em todos os servidores.
  • Configuração de Hardware: Avalie a CPU, memória RAM e capacidade de armazenamento (discos) de todos os servidores envolvidos. A replicação em tempo real pode exigir recursos significativos.
  • Configuração de Rede: Entenda a topologia da rede, latência e largura de banda entre os servidores. Uma rede lenta ou instável pode comprometer a replicação.
  • Tamanho do Banco de Dados: Qual o volume de dados a ser replicado? Isso impacta diretamente o tempo inicial de sincronização e os requisitos de armazenamento.
  • Volume de Transações (TPS/QPS): Quantas transações por segundo (TPS) ou queries por segundo (QPS) o banco de dados primário processa? Isso afeta a carga sobre o sistema de replicação.
  • Objetivo da Replicação: Para que a replicação será usada? Alta disponibilidade (HA), recuperação de desastres (DR), balanceamento de carga, relatórios offload? O objetivo influencia a escolha da tecnologia e da arquitetura.

 

2. Escolha da Tecnologia de Replicação

 

O Informix oferece diferentes tecnologias para replicação em tempo real. As mais comuns são:

  • HDR (High Availability Data Replication): É a solução nativa e mais utilizada para alta disponibilidade e recuperação de desastres. Requer que os servidores estejam em uma configuração mestre-escravo e a replicação é síncrona ou assíncrona.
    • Síncrona: Garante que a transação só é confirmada no primário após ser confirmada no secundário. Oferece zero perda de dados, mas pode impactar o desempenho em longas distâncias.
    • Assíncrona: A transação é confirmada no primário e replicada posteriormente para o secundário. Maior desempenho, mas com pequena chance de perda de dados em caso de falha catastrófica no primário antes da replicação.
  • ER (Enterprise Replication): Mais flexível e permite topologias mais complexas (bidirecional, multi-direcional, em cascata). Ideal para consolidação de dados, distribuição de dados entre diferentes locais ou cenários de leitura/escrita distribuída.
  • RSS (Remote Standalone Secondary): Permite um ou mais servidores secundários para balanceamento de carga de leitura ou para cenários de relatórios, onde a consistência não precisa ser imediata como no HDR.
  • SDS (Shared Disk Secondary): Menos comum para replicação “real-time” no sentido de estar ativo e processando logs, mas é uma opção para cenários de HA que compartilham os mesmos discos, onde o failover é muito rápido.

 

3. Configuração de Rede e Conectividade

 

  • Endereços IP e Hostnames: Configure corretamente os endereços IP e hostnames de todos os servidores no arquivo /etc/hosts ou no DNS.
  • Portas de Comunicação: Certifique-se de que as portas necessárias para a comunicação entre os servidores Informix (geralmente a porta do serviço ONLISTEN ou ONCONFIG) estão abertas e configuradas no firewall.
  • Largura de Banda: Monitore e garanta largura de banda suficiente para o volume de dados que será replicado.
  • Latência: Para replicação síncrona (HDR), a latência entre os servidores é crítica. Baixa latência é essencial para evitar gargalos de desempenho.

 

4. Configuração do Informix

 

  • Parâmetros ONCONFIG: Diversos parâmetros no arquivo ONCONFIG precisam ser ajustados para a replicação, como:
    • DRINTERVAL, DRTIMEOUT, DRAUTO, DRLOSTFILE (para HDR).
    • ENCRYPT_HDR, ENCRYPT_ER (para criptografia da replicação).
    • LOGGING (deve ser em modo buffered ou unbuffered para replicação de logs).
    • CDR_DBSERVERS (para ER).
    • LBUFSIZE, LOGBUFF (para otimização de logs).
    • PHYSLOG e LOGFILES (tamanho e quantidade dos logs físicos e lógicos).
  • Espaços de Disco (dbspaces, chunks): Certifique-se de que os espaços de disco sejam idênticos ou compatíveis entre o primário e os secundários para evitar problemas durante a replicação, especialmente em cenários de HDR.
  • Estrutura do Banco de Dados: A estrutura do banco de dados (tabelas, índices, etc.) deve ser idêntica ou consistente entre o primário e os secundários.

 

5. Gerenciamento de Logs

 

  • Logs Lógicos: A replicação em tempo real do Informix se baseia na leitura e aplicação dos logs lógicos (logical logs). É crucial ter espaço suficiente para os logs e uma estratégia de backup para eles.
  • Log Backup: Implemente uma rotina de backup de logs para evitar que os logs lógicos fiquem cheios e interrompam as operações do banco de dados.

 

6. Monitoramento e Gerenciamento

 

  • Ferramentas de Monitoramento: Utilize ferramentas como onstat -g dri, onstat -g nss, cdr list server (para ER) para monitorar o status da replicação, desempenho e identificar possíveis problemas.
  • Alertas: Configure alertas para notificar sobre falhas na replicação, logs cheios, ou qualquer outro evento crítico.
  • Plano de Failover/Switchover: Tenha um plano bem documentado para realizar failover (em caso de falha do primário) e switchover (troca planejada de papéis) entre os servidores.
  • Testes Regulares: Realize testes periódicos de failover e switchover para garantir que o plano funciona e que a equipe está familiarizada com o processo.

 

7. Segurança

 

  • Criptografia: Considere usar criptografia para a comunicação da replicação, especialmente se os servidores estiverem em redes não seguras.
  • Acesso Restrito: Restrinja o acesso aos servidores e aos arquivos de configuração do Informix apenas a usuários autorizados.

Ao considerar cuidadosamente todos esses pontos, você estará em uma posição muito melhor para planejar e implementar uma replicação de Banco de Dados Informix em tempo real que seja eficiente, resiliente e atenda aos seus requisitos de negócio.

Há alguma tecnologia de replicação específica (HDR, ER) que você está considerando, ou um cenário de uso em mente?

Prompt

É possível adotar estratégia de replicação diferenciada, entre tabelas com mais volume de transações e tabelas com baixo volume de transações?

Resposta

Sim, é totalmente possível e, em muitos casos, altamente recomendável adotar estratégias de replicação diferenciadas entre tabelas com alto volume de transações e tabelas com baixo volume de transações no Informix.

A principal tecnologia do Informix que permite essa granularidade é o Enterprise Replication (ER).

 

Como o Enterprise Replication (ER) permite a replicação diferenciada:

 

Ao contrário do High Availability Data Replication (HDR), que replica o banco de dados inteiro (ou seja, todos os dados e logs são espelhados), o ER opera em um nível mais granular, permitindo que você:

  1. Selecione Tabelas Específicas para Replicação: Você pode configurar o ER para replicar apenas um subconjunto de tabelas de um banco de dados, em vez do banco de dados completo. Isso é feito definindo “replicação de tabelas” (table replications) ou “replicação de conjuntos de tabelas” (set replications).
  2. Defina Regras de Replicação Diferentes: Para cada tabela ou grupo de tabelas, você pode especificar:
    • Direção da Replicação: Unidirecional (do primário para o secundário), bidirecional (entre dois ou mais servidores), ou multi-direcional (em topologias mais complexas).
    • Tipos de Operações Replicadas: Apenas INSERT, UPDATE, DELETE, ou todas as operações DML.
    • Filtros de Linhas: Replicar apenas um subconjunto de linhas de uma tabela com base em critérios específicos (ex: replicar apenas dados de uma determinada região).
    • Transformações de Dados: Em cenários mais avançados, é possível até mesmo transformar dados durante a replicação (embora isso adicione complexidade).

 

Cenários de Uso para Estratégias Diferenciadas:

 

  • Tabelas de Alto Volume de Transações (Ex: Transações Financeiras, Logs de Eventos):
    • Objetivo: Garantir que essas tabelas críticas sejam replicadas com a menor latência possível e com alta consistência.
    • Estratégia ER: Configurar replicação unidirecional ou bidirecional com baixa latência, talvez com um servidor dedicado para receber essas transações, otimizando os recursos de rede e disco para elas. Pode-se usar grupos de replicação específicos para essas tabelas.
    • Consideração: Monitore de perto a fila de replicação (cdr list queue) para garantir que o volume de transações não sobrecarregue o sistema.
  • Tabelas de Baixo Volume de Transações (Ex: Tabelas de Configuração, Dados Mestres Estáticos):
    • Objetivo: Manter a consistência desses dados entre os servidores, mas com menos urgência.
    • Estratégia ER: A replicação pode ser configurada com uma frequência menor de sincronização ou com menos recursos dedicados, se a consistência em tempo real não for um requisito absoluto. No entanto, para a maioria dos casos, o ER processará essas transações de forma eficiente junto com as outras. A principal diferença aqui é que elas não causarão o mesmo nível de estresse no sistema.
  • Tabelas para Relatórios/Análise (OLAP):
    • Objetivo: Descarregar a carga de consultas complexas do servidor de produção.
    • Estratégia ER: Replicar as tabelas necessárias para um servidor secundário dedicado a relatórios. Isso pode incluir apenas as tabelas relevantes para a análise, e não o banco de dados inteiro. Isso evita que as consultas de relatório impactem o desempenho do ambiente OLTP.
  • Consolidação de Dados:
    • Objetivo: Coletar dados de várias fontes em um único servidor central.
    • Estratégia ER: Replicar apenas as tabelas ou partes das tabelas de interesse de múltiplos servidores de origem para um servidor de destino.

 

Vantagens da Estratégia Diferenciada:

 

  • Otimização de Recursos: Reduz o tráfego de rede e a carga de E/S nos servidores, pois apenas os dados necessários são replicados.
  • Flexibilidade: Permite criar topologias de replicação complexas e personalizadas para atender a requisitos de negócios específicos.
  • Melhor Desempenho: Ao focar os recursos de replicação nas tabelas mais críticas, você pode garantir um desempenho superior para essas operações.
  • Gerenciamento Simplificado: Em alguns casos, pode simplificar o gerenciamento ao isolar problemas de replicação em conjuntos específicos de tabelas.

 

Limitações e Considerações:

 

  • Complexidade: A configuração do Enterprise Replication é mais complexa do que a do HDR, exigindo um planejamento cuidadoso e conhecimento aprofundado do Informix.
  • Consistência Global: Gerenciar a consistência entre diferentes conjuntos de dados replicados pode ser um desafio, especialmente em topologias bidirecionais ou multi-direcionais.
  • Gerenciamento de Esquema: Alterações de esquema (DDL) nas tabelas replicadas precisam ser gerenciadas cuidadosamente em todos os nós da replicação.

Em resumo, sim, o Informix, através do Enterprise Replication, oferece a flexibilidade necessária para implementar estratégias de replicação diferenciadas, permitindo que você otimize o desempenho, a consistência e o uso de recursos com base no volume e na criticidade das transações de cada tabela.

Fonte: Gemini

AI – Prompt – Human Resources

Prompt

Atue como Arquiteto de Solução com nível especialista. Sua tarefa é mapear as business capabilities para implantação de um sistema de Folha de Pagamento.
Identifique as atividades macro de arquitetura e detalhe os itens até o nível de tarefas.

Prompt melhorado

Atue como Arquiteto de Solução com nível especialista. Sua tarefa é mapear as capacidades de negócios (business capabilities) para a implantação de um sistema de Folha de Pagamento, identificando as atividades macro de arquitetura e detalhando-as até o nível de tarefas específicas.

1. **Defina o Escopo e os Objetivos do Projeto de Folha de Pagamento**
– Identifique as partes interessadas (stakeholders) e suas expectativas.
– Estabeleça os requisitos funcionais e não funcionais do sistema.
– Defina os indicadores-chave de desempenho (KPIs) para medir o sucesso do projeto.

2. **Mapeie as Capacidades de Negócios (Business Capabilities) Relevantes para a Folha de Pagamento**
– Identifique as capacidades de negócios relacionadas à gestão de folha de pagamento, como processamento de salários, gestão de benefícios, e conformidade legal.
– Analise como essas capacidades se alinham com os processos de negócios existentes.

3. **Desenvolva a Arquitetura de Negócios**
– Modele os processos de negócios atuais relacionados à folha de pagamento.
– Identifique oportunidades de melhoria nos processos.
– Defina a visão de futuro para os processos de folha de pagamento.

4. **Defina a Arquitetura de Dados**
– Identifique as entidades de dados relevantes para a folha de pagamento (por exemplo, funcionários, salários, impostos).
– Desenvolva um modelo de dados conceitual, lógico e físico para o sistema.
– Defina estratégias de integração com outros sistemas (por exemplo, RH, contabilidade).

5. **Desenvolva a Arquitetura de Aplicativos**
– Identifique os componentes de software necessários para atender às capacidades de negócios.
– Defina a estrutura de aplicativos, incluindo a escolha entre soluções comerciais prontas (COTS) ou desenvolvimento personalizado.
– Detalhe as interfaces de usuário e as APIs necessárias.

6. **Defina a Arquitetura Tecnológica**
– Especifique a infraestrutura necessária, incluindo servidores, armazenamento e rede.
– Defina as tecnologias específicas para o desenvolvimento (por exemplo, linguagens de programação, frameworks).
– Desenvolva uma estratégia para segurança, escalabilidade e desempenho.

7. **Planeje a Implementação e Migração**
– Desenvolva um plano de projeto detalhado, incluindo cronogramas e marcos importantes.
– Identifique os riscos potenciais e desenvolva estratégias de mitigação.
– Planeje a migração de dados e a integração com sistemas existentes.

8. **Garanta a Segurança e a Conformidade**
– Implemente medidas de segurança para proteger os dados dos funcionários.
– Assegure a conformidade com as leis e regulamentos relevantes (por exemplo, legislação trabalhista, GDPR).

9. **Desenvolva um Plano de Testes e Validação**
– Defina os casos de teste e os critérios de aceitação para o sistema.
– Planeje os testes de unidade, integração, sistema e aceitação do usuário.
– Desenvolva um plano para a realização de testes de desempenho e segurança.

10. **Implemente e Monitore o Sistema**
– Execute o plano de implementação.
– Monitore o desempenho do sistema e ajuste conforme necessário.
– Forneça suporte e treinamento aos usuários finais.

**Tarefas Específicas:**
– Realizar workshops com stakeholders para coletar requisitos.
– Modelar processos de negócios usando BPMN ou ferramentas similares.
– Desenvolver um dicionário de dados para o sistema de folha de pagamento.
– Criar protótipos de interfaces de usuário.
– Especificar requisitos de segurança e conformidade.
– Desenvolver um plano de testes detalhado.
– Executar testes e validar o sistema contra os requisitos.
– Documentar a arquitetura e os processos de implantação para futuras manutenções e atualizações.

8 Most Important System Design Concepts You Should Know

Building scalable systems requires anticipating and solving problems before they become critical. Here are eight common system design challenges and their solutions:


1. High Read Volumes

Challenge: When many users frequently access data (e.g., a news website with millions of readers), the database can become overloaded.

Solution: Implement caching. A fast cache layer stores frequently accessed data, reducing the need to hit the slower database. While effective, caching requires strategies like Time-to-Live (TTL) on keys or write-through caching to maintain consistency with the database and manage expiration. Tools like Redis and Memcached simplify this.


2. High Write Volumes

Challenge: Systems like logging platforms or social media feeds handle massive amounts of incoming writes per second.

Solution: Use asynchronous writes with message queues and worker processes. This queues writes for background processing, providing instant user feedback. Additionally, LSM-Tree based databases like Cassandra are optimized for fast writes by collecting data in memory and periodically flushing it to disk, performing compactions to maintain performance.


3. System Downtime and Failures

Challenge: A single point of failure can bring down an entire system, like an e-commerce platform with one database server.

Solution: Implement redundancy and failover through database replication. A primary database handles writes, while multiple replicas handle reads. If the primary fails, a replica can take over. This involves choosing between synchronous replication (data consistency, higher latency) and asynchronous replication (better performance, risk of slight data loss). Load balancers also distribute traffic and reroute around failures, ensuring high availability. Multiple-primary replication can distribute writes geographically but adds complexity.


4. Global User Access and Latency

Challenge: Users far from server locations experience high latency when accessing content.

Solution: Utilize Content Delivery Networks (CDNs). CDNs cache static content (like videos and images) closer to users, significantly reducing loading times. For dynamic content, edge computing can complement CDN caching. Proper cache-control headers are crucial for different content types.


5. Managing Large Amounts of Data

Challenge: Modern platforms deal with vast quantities of diverse data.

Solution: Employ a combination of block storage and object storage. Block storage offers low latency and high IOPS, making it ideal for databases and frequently accessed small files. Object storage is cost-effective and designed for large, static files like videos and backups at scale.


6. Monitoring Performance Issues

Challenge: As systems scale, it becomes difficult to track performance and identify bottlenecks.

Solution: Implement robust monitoring tools like Prometheus (for collecting logs and metrics) and Grafana (for visualization). Distributed tracing tools like OpenTelemetry help debug performance issues across multiple components. Effective monitoring involves sampling routine events, detailed logging for critical operations, and setting up alerts for real problems.


7. Slow Database Queries

Challenge: Databases can become slow if queries scan every record.

Solution: The primary defense is indexing. Indexes allow the database to quickly locate specific data without scanning the entire dataset. Composite indexes further optimize multi-column queries. However, indexes slightly slow down writes as they need to be updated.


8. Extreme Database Scaling

Challenge: When indexing alone isn’t enough to handle the scale of a database.

Solution: As a last resort, consider sharding. This involves splitting the database across multiple machines using strategies like range-based or hash-based distribution. While highly scalable, sharding adds substantial complexity and is difficult to reverse. Tools like Vitess can simplify sharding for databases like MySQL, but it’s a strategy to use sparingly.


By addressing these challenges with the right strategies and tools, companies can build robust and scalable systems that meet the demands of growth.

Source: https://www.youtube.com/watch?v=BTjxUS_PylA

Diferença entre Arquitetura de Solução e Arquitetura de Software

A arquitetura de solução atua como um elo entre negócios e tecnologia, transformando requisitos comerciais em representações arquiteturais que ajudam na negociação e decisão técnica e comercial. Já a arquitetura de software é uma disciplina da engenharia de software focada no desenvolvimento e estruturação técnica dos sistemas, definindo componentes, padrões arquiteturais e garantindo a sustentabilidade do software ao longo do tempo. Wesley também aborda a influência da arquitetura de software na estrutura organizacional e a importância do arquiteto de software em mediar equipes, reforçar boas práticas e garantir a qualidade do produto final. Por fim, ele ressalta que, apesar das diferenças, ambas as arquiteturas se complementam no processo de criação de soluções tecnológicas.

Highlights
🏗️ Arquitetura de solução conecta áreas de negócio e tecnologia, traduzindo requisitos em soluções técnicas.
🖼️ Utiliza diagramas e modelos (como C4 e UML) para representar a estrutura da solução.
💼 Atua frequentemente em reuniões comerciais para alinhar aspectos técnicos e custos.
💻 Arquitetura de software foca na criação, desenvolvimento e manutenção da estrutura técnica do sistema.
🔄 A arquitetura de software pode influenciar a estrutura organizacional da empresa, moldando times e comunicação.
⚙️ O arquiteto de software atua como mediador entre especialistas e desenvolvedores, reforçando boas práticas e padrões.
🤝 Arquitetura de solução precede e complementa a arquitetura de software no ciclo de desenvolvimento.
Key Insights
🧩 Integração entre negócio e tecnologia: A arquitetura de solução é crucial para garantir que as necessidades do negócio sejam corretamente traduzidas em soluções técnicas viáveis, facilitando a comunicação entre áreas comerciais e técnicas.
📊 Representação visual como ferramenta estratégica: Diagramas e modelos arquiteturais usados pela arquitetura de solução ajudam a clarear os requisitos complexos e alinhar expectativas entre clientes e equipes técnicas.
💰 Impacto comercial das decisões técnicas: A escolha de tecnologias e arquiteturas influencia diretamente nos custos e viabilidade do projeto, reforçando a importância do arquiteto de solução em negociações pré-venda.
🛠️ Foco técnico e prático da arquitetura de software: Enquanto a arquitetura de solução é mais conceitual, a arquitetura de software se aprofunda na implementação, definindo componentes, integrações e padrões para garantir a qualidade do código e a evolução do sistema.
🏢 Influência na estrutura organizacional: A arquitetura de software pode moldar a organização das equipes de desenvolvimento, alinhando a comunicação interna com a estrutura do sistema, conforme a Lei de Conway.
🤝 Mediação e coordenação técnica: O arquiteto de software atua como ponte entre especialistas do domínio e desenvolvedores, minimizando ruídos e assegurando que o software atenda os requisitos.

Passagens Aéreas – Última hora

Para comprar passagens aéreas de última hora, em horários alternativos ou passagens encalhadas (voos com baixa ocupação que podem ter descontos), existem várias plataformas confiáveis que oferecem ferramentas para encontrar as melhores ofertas. Abaixo, listo as principais opções, com base em informações recentes e estratégias recomendadas para economizar:

Plataformas Recomendadas

  1. KAYAK (www.kayak.com.br)

    • Por que usar? Pesquisa centenas de sites de companhias aéreas e agências, permitindo comparar preços rapidamente. Oferece ferramentas como “KAYAK Explore” para encontrar voos baratos para destinos variados dentro de um orçamento e “Alerta de Preço” para monitorar mudanças de valores.
    • Dicas para última hora: Use a opção “adicionar aeroportos próximos” para encontrar preços mais baixos em aeroportos alternativos e a ferramenta “Tarifas Hackeadas” para combinar voos de ida e volta mais baratos. É ideal para voos domésticos e internacionais, com dados indicando que preços podem estar abaixo da média até uma semana antes da partida.
    • Horários alternativos: Filtre por voos em horários menos concorridos, como madrugadas ou meio de semana (terças e quartas).
  2. Skyscanner (www.skyscanner.com.br)

    • Por que usar? Um metabuscador global que compara preços de companhias aéreas e agências, com filtros para multidestinos e datas flexíveis. Permite ativar alertas de preço por e-mail ou aplicativo.
    • Dicas para última hora: Use a função “Qualquer lugar” para descobrir destinos baratos saindo da sua cidade e a opção de “datas flexíveis” para encontrar voos em horários alternativos.
    • Horários alternativos: Voos noturnos ou em dias como terça, quarta e sábado costumam ter preços mais baixos.
  3. Google Flights (www.google.com/travel/flights)

    • Por que usar? Interface intuitiva que mostra preços em um calendário interativo e permite explorar destinos com base no orçamento. Não vende diretamente, mas redireciona para sites de companhias ou agências.
    • Dicas para última hora: Use a função “Explorar” para encontrar voos baratos em datas flexíveis e a opção “Datas flexíveis” para ajustar horários.
    • Horários alternativos: O calendário de preços ajuda a identificar dias e horários mais baratos, como voos noturnos ou em baixa temporada (fevereiro para voos domésticos e internacionais).
  4. Melhores Destinos (www.melhoresdestinos.com.br)

    • Por que usar? Especializado em promoções, monitora preços 24 horas por dia e envia alertas de passagens baratas via aplicativo, e-mail ou redes sociais.
    • Dicas para última hora: Acompanhe os alertas para promoções relâmpago, que podem incluir passagens encalhadas. O site desmente o mito de que comprar de madrugada garante preços melhores, mas promoções podem surgir a qualquer hora.
    • Horários alternativos: Recomenda voos em terças, quartas e sábados, que geralmente têm menor demanda.
  5. ViajaNet (www.viajanet.com.br)

    • Por que usar? Agência online brasileira com boa reputação (nota 7,3/10 no Reclame Aqui) que oferece promoções relâmpago para voos nacionais e internacionais.
    • Dicas para última hora: Verifique promoções diárias e use filtros para horários menos populares.
    • Horários alternativos: Permite comparar preços em dias diferentes, com destaque para voos em horários de menor movimento.
  6. Decolar (www.decolar.com)

    • Por que usar? Uma das maiores agências da América Latina, com promoções de madrugada e opções de parcelamento sem juros. Oferece filtros para voos com escalas, que podem ser mais baratos.
    • Dicas para última hora: Fique atento às “Promoções de Madrugada” (23h às 6h), quando passagens não pagas voltam à venda.
    • Horários alternativos: Voos com escalas ou em horários noturnos podem reduzir custos.
  7. Voopter (www.voopter.com.br)

    • Por que usar? Comparador de preços que destaca voos promocionais e permite buscas flexíveis por datas e destinos.
    • Dicas para última hora: Ideal para encontrar passagens encalhadas, já que compara preços em tempo real.
    • Horários alternativos: Use o calendário de preços para identificar voos mais baratos em dias e horários específicos.
  8. CheapOair (www.cheapoair.com)

    • Por que usar? Eficaz para voos internacionais, com acesso a tarifas de última hora e descontos de US$15-20 para novos cadastros.
    • Dicas para última hora: Acesse a seção “Last Minute Travel” para promoções de voos com partida em 2 a 4 dias.
    • Horários alternativos: Foco em voos internacionais com escalas ou em horários menos concorridos.
  9. Vai de Promo (www.vaidepromo.com)

    • Por que usar? Oferece “Promos de Madrugada” (23h às 6h) com passagens liberadas de reservas não pagas. Tem ótima reputação (nota 8,8/10 no Reclame Aqui).
    • Dicas para última hora: Cadastre-se para receber alertas de promoções relâmpago.
    • Horários alternativos: Priorize voos em horários de baixa demanda, como madrugadas.
  10. Expedia (www.expedia.com.br)

    • Por que usar? Oferece uma área com promoções semanais para voos de última hora, além de pacotes de viagem.
    • Dicas para última hora: Verifique a seção de ofertas semanais para voos com poucos assentos disponíveis.
    • Horários alternativos: Filtre por voos noturnos ou com escalas para economizar.

Dicas para Encontrar Passagens de Última Hora ou Encalhadas

  • Flexibilidade é essencial: Passagens de última hora são mais baratas se você for flexível com datas, destinos e horários. Voos em terças, quartas, sábados ou em horários noturnos (madrugada) tendem a ser mais acessíveis.
  • Use alertas de preço: Ative notificações em plataformas como KAYAK, Skyscanner ou Melhores Destinos para ser avisado sobre quedas de preço ou promoções relâmpago.
  • Considere voos com escalas: Voos com conexões podem ser significativamente mais baratos, especialmente para destinos internacionais.
  • Aeroportos alternativos: Pesquise voos para aeroportos próximos ao seu destino (ex.: Campinas em vez de Guarulhos, ou Fort Lauderdale em vez de Miami).
  • Evite alta temporada: Fevereiro é geralmente o mês mais barato para voos domésticos e internacionais, enquanto dezembro é o mais caro.
  • Promoções de madrugada: Embora não seja garantido que passagens sejam mais baratas de madrugada, promoções relâmpago (como as do Vai de Promo ou Decolar) podem surgir nesse horário.
  • Passagens encalhadas: Companhias aéreas podem liberar assentos não vendidos a preços mais baixos 2 a 4 dias antes do voo, mas isso não é garantido. Plataformas como CheapOair e Voopter são úteis para rastrear essas ofertas.
  • Cuidado com golpes: Preços muito abaixo da média podem indicar fraudes. Prefira plataformas com boa reputação no Reclame Aqui, como Vai de Promo (9,2/10) ou Submarino Viagens (8,3/10).

Cuidados e Observações

  • Reputação das plataformas: Evite sites com avaliações ruins, como Skyscanner (nota 4,9/10 no Reclame Aqui) ou ViajaNet (5,6/10), a menos que você compare preços em outras fontes.
  • Voos fantasmas: Algumas companhias operam voos com baixa ocupação sem oferecer descontos, então não conte apenas com passagens encalhadas.
  • Cartão internacional: Para sites como CheapOair, é necessário um cartão de crédito internacional.
  • Emergências: Em casos como falecimento de parentes, algumas companhias oferecem descontos específicos; contate diretamente a companhia aérea.

Recomendações Finais

Para maximizar suas chances de encontrar passagens baratas de última hora ou encalhadas, combine o uso de metabuscadores (KAYAK, Skyscanner, Google Flights) com alertas de promoções de sites como Melhores Destinos e Vai de Promo. Pesquise em horários alternativos (madrugada, terças ou quartas) e considere aeroportos próximos. Para promoções relâmpago, acompanhe redes sociais e newsletters de agências como Decolar e ViajaNet. Se possível, evite períodos de alta demanda, como feriados e férias escolares, e compre imediatamente ao encontrar uma boa oferta, pois os preços mudam rapidamente.

Prompt: Quais sites ou plataformas é possível comprar passagens aéreas, de última hora, em horários alternativos ou passagens encalhadas?

Architecture Review Board

Understanding the Architecture Review Board

Introduction

An Architecture Review Board (ARB) is a governance body within an organization responsible for overseeing and guiding the development, implementation, and maintenance of IT and enterprise architectures. The ARB ensures that architectural decisions align with the organization’s strategic goals, standards, and long-term vision. By fostering consistency, interoperability, and efficiency, the ARB plays a critical role in modern enterprises, particularly those managing complex IT ecosystems.

This article explores the purpose, composition, processes, benefits, challenges, and best practices of an Architecture Review Board, offering insights for organizations seeking to establish or optimize their ARB.

What is an Architecture Review Board?

An Architecture Review Board is a formalized group of stakeholders tasked with reviewing, approving, and governing architectural decisions across an organization’s IT and business systems. The ARB ensures that proposed architectures—whether for software, infrastructure, or enterprise-wide systems—adhere to established standards, policies, and best practices. It acts as a checkpoint to mitigate risks, reduce technical debt, and promote alignment with business objectives.

The ARB typically operates within the context of enterprise architecture frameworks like TOGAFZachman, or C4 Model, ensuring that architectural decisions support scalability, security, and maintainability. It is not a bureaucratic gatekeeper but rather a collaborative body that balances innovation with governance.

Purpose of an Architecture Review Board

The primary purposes of an ARB include:

  1. Alignment with Business Goals: Ensuring architectural decisions support the organization’s strategic objectives, such as cost reduction, scalability, or customer experience improvement.
  2. Standardization and Consistency: Promoting adherence to architectural standards, frameworks, and technologies to avoid fragmentation and ensure interoperability.
  3. Risk Mitigation: Identifying and addressing risks related to security, performance, scalability, or compliance in proposed architectures.
  4. Technical Debt Management: Preventing short-term, ad-hoc solutions that could lead to long-term maintenance challenges.
  5. Knowledge Sharing: Facilitating collaboration and communication among stakeholders to share best practices and lessons learned.
  6. Innovation Enablement: Balancing governance with the flexibility to adopt new technologies and approaches.

Composition of an Architecture Review Board

The composition of an ARB varies depending on the organization’s size, structure, and industry. However, a typical ARB includes:

  • Chief Architect or Enterprise Architect: Leads the ARB and provides strategic oversight.
  • Solution Architects: Offer expertise in specific domains, such as application, data, or infrastructure architecture.
  • Business Stakeholders: Represent business units to ensure alignment with organizational goals.
  • Security Specialists: Focus on compliance, risk management, and cybersecurity.
  • IT Operations Representatives: Provide insights into operational feasibility and infrastructure impacts.
  • Development Team Leads: Ensure that development practices align with architectural guidelines.
  • External Consultants (optional): Provide independent perspectives or specialized expertise.

The ARB should be diverse yet manageable in size (typically 5–10 members) to balance expertise with efficient decision-making.

ARB Processes and Workflow

The ARB operates through a structured process to review and govern architectural decisions. A typical workflow includes:

  1. Submission of Proposals:

    • Teams (e.g., project managers, architects, or developers) submit architecture proposals or designs for review. These may include diagrams (e.g., using the C4 Model), technical specifications, or business cases.
    • Proposals should outline the problem, proposed solution, technologies, risks, and alignment with organizational goals.
  2. Pre-Review Preparation:

    • ARB members review the submitted materials in advance, often using tools like Sparx Enterprise ArchitectArchi, or Structurizr for modeling and visualization.
    • Clarifications or additional details may be requested from the submitting team.
  3. Review Meeting:

    • The ARB convenes (in-person or virtually) to discuss the proposal. The submitting team may present their case and answer questions.
    • The board evaluates the proposal based on predefined criteria, such as alignment with standards, scalability, security, and cost-effectiveness.
  4. Decision and Feedback:

    • The ARB approves, rejects, or requests modifications to the proposal. Feedback is provided to guide improvements.
    • Approved architectures are documented and tracked for future reference.
  5. Ongoing Governance:

    • The ARB monitors the implementation of approved architectures to ensure compliance and address deviations.
    • Regular updates or audits may be conducted to assess the architecture’s performance.

Benefits of an Architecture Review Board

An effective ARB delivers significant value to an organization, including:

  • Improved Decision Quality: Ensures decisions are informed, consistent, and aligned with long-term goals.
  • Reduced Technical Debt: Prevents poorly designed systems that lead to costly rework.
  • Enhanced Collaboration: Fosters communication between business and IT stakeholders, reducing silos.
  • Risk Reduction: Identifies potential issues early, such as security vulnerabilities or scalability limitations.
  • Standardization: Promotes reusable components and consistent technology choices, reducing complexity.
  • Agility with Governance: Balances the need for innovation with adherence to standards, enabling faster delivery of reliable systems.

Challenges of an Architecture Review Board

While valuable, ARBs can face challenges that organizations must address:

  1. Bureaucracy Perception: If not managed well, the ARB can be seen as a bottleneck, slowing down projects.
  2. Resource Constraints: ARB members often have other responsibilities, leading to scheduling conflicts or limited bandwidth.
  3. Scope Creep: The ARB may become involved in low-level decisions, diluting its strategic focus.
  4. Resistance to Change: Teams may resist ARB oversight, especially if it’s perceived as overly rigid.
  5. Keeping Up with Technology: Rapidly evolving technologies (e.g., cloud, AI, microservices) require the ARB to stay current.
  6. Balancing Stakeholder Interests: Conflicting priorities between business and IT can complicate decision-making.

Best Practices for a Successful ARB

To maximize the effectiveness of an ARB, organizations should adopt the following best practices:

  1. Define Clear Objectives and Scope:

    • Establish the ARB’s purpose, authority, and scope to avoid overreach or ambiguity. Focus on strategic decisions rather than micromanagement.
    • Use frameworks like TOGAF or C4 Model to guide reviews and ensure consistency.
  2. Streamline Processes:

    • Implement lightweight submission and review processes to avoid delays. Tools like LucidchartPlantUML, or Structurizr can simplify documentation.
    • Use templates for proposals to standardize submissions.
  3. Foster Collaboration:

    • Encourage open dialogue between the ARB and project teams. Treat reviews as collaborative discussions, not adversarial evaluations.
    • Include diverse perspectives to ensure well-rounded decisions.
  4. Leverage Tools and Automation:

    • Use architecture tools (e.g., ArchiMateEnterprise Architect, or Draw.io) to visualize and analyze proposals.
    • Integrate with DevOps pipelines or repositories (e.g., via Structurizr) to automate documentation and tracking.
  5. Educate and Train:

    • Train ARB members on emerging technologies and frameworks to maintain relevance.
    • Educate teams on the ARB’s role to reduce resistance and improve submissions.
  6. Measure and Iterate:

    • Track the ARB’s impact through metrics like project success rates, reduced technical debt, or improved compliance.
    • Regularly review and refine ARB processes based on feedback and outcomes.

Case Study: ARB in Action

Consider a large financial institution implementing a new customer-facing application. The development team proposes a microservices architecture using Kubernetes and a cloud-native database. The ARB reviews the proposal, ensuring:

  • Alignment: The architecture supports the bank’s goal of improving customer experience.
  • Standards: The chosen technologies align with the organization’s cloud strategy.
  • Security: The proposal includes robust security measures, validated by the security specialist.
  • Scalability: The architecture can handle peak loads during high-traffic periods.

The ARB approves the proposal with minor adjustments, such as adopting a standardized API gateway. Post-implementation, the ARB monitors the system’s performance, ensuring it meets expectations.

Conclusion

An Architecture Review Board is a vital component of effective IT and enterprise governance. By aligning architectural decisions with business goals, enforcing standards, and mitigating risks, the ARB enables organizations to build robust, scalable, and innovative systems. While challenges like bureaucracy or resource constraints exist, adopting best practices—such as clear objectives, streamlined processes, and collaborative tools—can ensure the ARB’s success.

For organizations looking to establish or enhance their ARB, leveraging frameworks like TOGAFC4 Model, or ArchiMate, combined with modern tools like Structurizr or Enterprise Architect, can streamline the process. By fostering a culture of collaboration and continuous improvement, the ARB can drive long-term value in an increasingly complex technological landscape.

This article provides a detailed overview of the Architecture Review Board, tailored for readers seeking a comprehensive understanding. If you’d like me to generate a diagram (e.g., a C4 Model context diagram for an ARB process) or focus on a specific aspect (e.g., tools or case studies), let me know! For further details on tools or subscriptions mentioned.

System Design Blueprint

8 Best System design resources for Coding Interviews
1. ZTM – https://bit.ly/3YpWu4q
2. ByteByteGo – https://bit.ly/3P3eqMN
1. Grokking the System Design – https://bit.ly/3ckZlsl
3. Pragmatic Design – https://bit.ly/3vFNPid
4. Software Design – https://bit.ly/3BxMXzr
5. Software Architecture 101 – https://bit.ly/3pzJCJh
6. Modern design – https://bit.ly/3OQKX8B
7. DesignGuru – https://bit.ly/3pMiO8g
8. Meetapro – https://bit.ly/48UAXpJ

 

Fluente sem curso

Como eu fiquei fluente em inglês sem fazer nenhum cursinho

Se você tivesse me conhecido aos 12 anos, teria rido da ideia de me ver falando inglês fluentemente. Eu mesma ria. Eu era aquela adolescente com medo de errar o “verb to be” na frente da sala. E adivinha? Nunca fiz cursinho. Zero. Nadinha.

Mas hoje, leio livros em inglês, assisto filmes sem legenda e trabalho com tecnologia usando a língua todos os dias. Como isso aconteceu?

A resposta é simples — mas não é fácil: eu fui autodidata. E fui constante.

Aprender inglês sozinho pode parecer uma missão impossível, mas na verdade é um processo bem parecido com aprender a tocar violão. Você não precisa de um conservatório pra tirar um som bonito — mas precisa de prática, rotina e os métodos certos.

E é aí que entra a ciência.

A tríade do aprendizado de línguas: input, output e repetição espaçada

Depois de muita tentativa e erro (e alguns tropeços feios), descobri que existem três pilares cientificamente comprovados para aprender qualquer idioma:

1. Input compreensível (Stephen Krashen vibes)

Você aprende mais quando entende 70-90% do que está ouvindo ou lendo. Isso ativa o seu cérebro sem sobrecarregá-lo.
O segredo aqui é consumir conteúdo no seu nível. Eu comecei com músicas e séries que eu amava, com legenda em inglês. Era como colocar o cérebro numa academia: no início, dói. Depois, cresce.

2. Output ativo (fala e escrita)

Você precisa falar. Sim, mesmo que erre. Falar ativa regiões do cérebro diferentes da leitura e da escuta. É como aprender a dirigir: não dá pra só ver vídeo no YouTube — tem que sentar no volante.
Eu gravava áudios pra mim mesma no celular, escrevia pequenos textos e participava de fóruns online. Errava horrores, mas melhorava a cada dia.

3. Repetição espaçada (Spaced Repetition)

O cérebro esquece — é da natureza dele. Mas ele também ama padrões. Eu usava apps como Anki pra revisar palavras e expressões com base na curva do esquecimento. Isso me salvou.
Revisar no tempo certo é como regar uma planta: se rega todo dia, ela afoga; se nunca rega, morre. Mas se rega no momento certo, floresce.

Aprender inglês é um hábito, não um evento

Aprender línguas é um jogo de longo prazo, onde quem vence não é o mais inteligente, mas o mais teimoso.

E sobre a vergonha de errar?

Aprender inglês é como ir pra academia usando roupas estranhas e levantando pesos tortos — no início, todo mundo parece estar olhando. Mas a real é que ninguém se importa.
E aos poucos, você vai ajustando os movimentos, entendendo o ritmo e percebendo que aquele “you is” do passado virou “you are” com naturalidade.

Você não precisa de cursinho. Precisa de direção.

Hoje, olhando pra trás, vejo que o que mais me ajudou foi a clareza de que fluência não é talento, é construção.
E se eu consegui, sendo só uma garota com um celular na mão e muita vontade de entender as letras da Taylor Swift… você também consegue.

Seja curioso, constante e compassivo com você mesmo. O resto é consequência.

Fonte: https://www.linkedin.com/posts/amanda-fernandes-software-engineer_como-eu-fiquei-fluente-em-ingl%C3%AAs-sem-fazer-activity-7319756738922999809-hMFd

Maximum Subarray

Introdução ao Subarray Máximo

O problema do Subarray Máximo nos pede para encontrar o subarray com a maior soma de um dado array. Este problema pode ser resolvido usando programação dinâmica e, mais especificamente, o Algoritmo de Kadane.

Problema de Submatriz Máxima

Dado um array de inteiros nums, encontre o subarray com a maior soma e retorne sua soma.

1 public class Solution {
2    public int maxSubArray(int[] nums) {
3        int maxSum = nums[0];
4        int currentSum = nums[0];
5
6        for (int i = 1; i < nums.length; i++) {
7            currentSum = Math.max(nums[i], currentSum + nums[i]);
8            maxSum = Math.max(maxSum, currentSum);
9        }
10
11        return maxSum;
12    }
13
14    public static void main(String[] args) {
15        Solution solution = new Solution();
16
17        int[] nums1 = {-2, 1, -3, 4, -1, 2, 1, -5, 4};
18        int[] nums2 = {1};
19        int[] nums3 = {5, 4, -1, 7, 8};
20
21
22        System.out.println(solution.maxSubArray(nums1)); // Expected output: 6
23        System.out.println(solution.maxSubArray(nums2)); // Expected output: 1
24        System.out.println(solution.maxSubArray(nums3)); // Expected output: 23
25    }
26}

Fonte: https://interviewing.io/questions/maximum-subarray