Conceitos de programação

Choose a study mode

Play Quiz
Study Flashcards
Spaced Repetition
Chat to Lesson

Podcast

Play an AI-generated podcast conversation about this lesson
Download our mobile app to listen on the go
Get App

Questions and Answers

Em contextos de programação avançada, qual das seguintes opções representa uma aplicação mais sofisticada do conceito de 'Ciclo', transcendendo a repetição básica de instruções?

  • Criação de _look-up tables_ dinâmicas para acelerar cálculos complexos, com o ciclo servindo para preencher a tabela com valores pré-computados.
  • Geração de números pseudoaleatórios utilizando métodos congruenciais lineares, onde o ciclo é usado para iterar a função geradora até atingir o período desejado.
  • Implementação de _coroutines_ para execução concorrente de tarefas, onde cada iteração do ciclo representa a suspensão e retomada de um fluxo de execução. (correct)
  • Otimização de algoritmos de ordenação através da minimização do número de iterações, utilizando ciclos aninhados com estratégias de _branch prediction_.

Num cenário de computação paralela com memória distribuída, qual estratégia de gestão de 'Variáveis' minimiza a latência de acesso aos dados e otimiza o throughput computacional?

  • Utilização de variáveis globais com _cache coherence protocols_ rigorosos para garantir a consistência dos dados entre os nós computacionais.
  • Replicação de variáveis críticas em cada nó computacional, com mecanismos de _lock-free synchronization_ para evitar _race conditions_.
  • Particionamento de variáveis com base na localidade dos dados e utilização de _message passing_ para comunicação explícita entre os nós. (correct)
  • Implementação de _distributed shared memory_ (DSM) com técnicas de _false sharing_ mitigation para reduzir a comunicação desnecessária.

Em sistemas embarcados com recursos computacionais limitados, qual é a abordagem mais eficiente para implementar um 'Ciclo' que execute uma tarefa em intervalos de tempo precisos, considerando restrições de jitter e deadline?

  • Utilização de um _scheduler preemptivo_ com alta prioridade para a tarefa, garantindo que ela seja executada assim que o intervalo de tempo expirar.
  • Implementação de um _real-time operating system_ (RTOS) com _scheduling policies_ determinísticas para garantir o cumprimento dos _deadlines_. (correct)
  • Implementação de um _timer interrupt_ que sinalize a tarefa a cada intervalo de tempo, com tratamento de interrupção otimizado para minimizar a latência.
  • Utilização de um _loop busy-waiting_ com calibração dinâmica para ajustar o tempo de espera, compensando variações na frequência do processador.

Em arquiteturas de software orientadas a eventos, como o padrão Reactor, qual é o papel fundamental da instrução 'Condicional' na determinação do fluxo de execução em resposta a eventos assíncronos?

<p>A instrução condicional é utilizada para despachar eventos para os <em>handlers</em> correspondentes com base no tipo de evento e no estado atual do sistema. (A)</p> Signup and view all the answers

Na otimização de código para hardware específico, como GPUs ou FPGAs, como a aplicação de transformações de 'Expressões Lógicas' pode impactar o desempenho de algoritmos complexos?

<p>A conversão de expressões lógicas em <em>look-up tables</em> pode acelerar a avaliação em <em>FPGAs</em> com recursos de <em>LUT</em>. (B)</p> Signup and view all the answers

No contexto da 'Abstração Funcional', qual a implicação do uso de closures em linguagens de programação que suportam funções de primeira classe, considerando o gerenciamento de estado e o ciclo de vida das variáveis?

<p><em>Closures</em> permitem a criação de funções com estado interno persistente, que pode ser compartilhado entre múltiplas invocações, mas exigem cuidado para evitar <em>side effects</em> indesejados. (C)</p> Signup and view all the answers

Em cenários de programação reativa, qual a importância de se distinguir entre 'Procedimentos' e Funções puras (sem efeitos colaterais) no contexto de streams de dados assíncronos e transformações encadeadas?

<p>Funções puras são essenciais em <em>streams</em> reativos, pois garantem a determinacidade e a testabilidade das transformações, facilitando o <em>debugging</em> e a otimização do código. (D)</p> Signup and view all the answers

Em algoritmos de machine learning que utilizam otimização iterativa, como Gradient Descent, qual a relevância da 'Variável Iteradora' e quais estratégias avançadas podem ser empregadas para acelerar a convergência?

<p>A variável iteradora controla o <em>learning rate</em> do <em>Gradient Descent</em>, e estratégias como <em>momentum</em> e <em>Adam</em> adaptam dinamicamente o <em>learning rate</em> com base no histórico das iterações. (D)</p> Signup and view all the answers

No desenvolvimento de software modular e escalável, qual o impacto do uso extensivo de 'Funções' (em oposição a blocos de código inline) na capacidade de refatoração, teste unitário e reutilização de componentes?

<p>O uso extensivo de funções simplifica o teste unitário, pois permite isolar e testar cada componente individualmente, garantindo a qualidade do código. (A)</p> Signup and view all the answers

Em algoritmos de Data Science que envolvem processamento recursivo de árvores de decisão, de que forma a 'Recursão' pode ser otimizada para evitar stack overflow e melhorar a performance em datasets massivos?

<p>A recursão pode ser otimizada através da técnica de <em>tail call optimization</em> (TCO), que transforma chamadas recursivas em <em>loops</em> iterativos, evitando o crescimento da <em>stack</em>. (A)</p> Signup and view all the answers

Num contexto de alocação e gestão de memória em sistemas de real-time, qual das seguintes opções representa o maior desafio ao se utilizar heap para alocação de memória, considerando as restrições de determinismo e latência?

<p>A fragmentação externa inerente à alocação e desalocação dinâmicas pode levar a tempos de alocação imprevisíveis, comprometendo o determinismo. (B)</p> Signup and view all the answers

Em cenários de programação concorrente onde múltiplas threads acessam e modificam uma estrutura de dados complexa, qual mecanismo de sincronização seria mais adequado para garantir a integridade dos dados e evitar condições de corrida, minimizando o overhead e maximizando o paralelismo?

<p>Emprego de <em>bloqueios de leitura/escrita</em> (read/write locks) para permitir que múltiplas <em>threads</em> leiam a estrutura simultaneamente, enquanto apenas uma <em>thread</em> pode escrever, otimizando o desempenho em cenários de leitura intensiva. (B)</p> Signup and view all the answers

Considerando a necessidade de implementar uma estrutura de dados que permita tanto o acesso FIFO (First-In-First-Out) quanto o acesso LIFO (Last-In-First-Out) de forma eficiente, qual das seguintes estruturas seria a mais apropriada e como ela seria adaptada para suportar ambos os comportamentos?

<p>Uma <em>lista ligada duplamente encadeada</em> que utiliza dois ponteiros, um para o início (head) e outro para o fim (tail), permitindo a inserção e remoção de elementos em ambas as extremidades com complexidade $O(1)$. (D)</p> Signup and view all the answers

Num sistema embarcado com recursos limitados, qual seria a estratégia mais eficiente para alocar memória para uma estrutura de dados que armazena um número variável de elementos, sabendo que o tamanho máximo dessa estrutura é conhecido a priori e que a fragmentação de memória deve ser minimizada?

<p>Implementar um <em>memory pool</em> (pool de memória) com blocos de tamanho fixo, alocando e desalocando blocos dentro do pool conforme necessário, evitando a fragmentação externa. (C)</p> Signup and view all the answers

Em um contexto de computação de alto desempenho (HPC), onde grandes volumes de dados precisam ser processados em paralelo, qual mecanismo de comunicação entre processos (IPC) seria mais apropriado para minimizar a latência e maximizar a throughput na troca de mensagens entre nós de computação, considerando a necessidade de escalabilidade e tolerância a falhas?

<p><em>Remote Direct Memory Access (RDMA)</em> para transferência direta de dados entre a memória de diferentes nós de computação, contornando o sistema operacional e minimizando a latência e o <em>overhead</em> da CPU. (D)</p> Signup and view all the answers

No desenvolvimento de drivers de dispositivo para sistemas operacionais modernos, qual técnica seria essencial para lidar com interrupções de hardware de forma eficiente, garantindo que o sistema responda prontamente a eventos externos sem comprometer a estabilidade e o desempenho?

<p>Dividir o tratamento de interrupção em duas partes: uma <em>rotina de tratamento de interrupção rápida (ISR)</em> que executa o mínimo de trabalho possível e agenda uma <em>rotina de tratamento de interrupção atrasada (DPC)</em> para realizar o restante do processamento em um contexto de menor prioridade. (C)</p> Signup and view all the answers

Ao projetar um sistema de banco de dados distribuído com alta disponibilidade e tolerância a falhas, qual estratégia de replicação de dados seria mais adequada para garantir a consistência dos dados em caso de falhas de nós, minimizando a latência de escrita e maximizando a throughput de leitura?

<p><em>Quorum replication</em>, onde as escritas são confirmadas após serem replicadas em um número mínimo de nós (quorum), e as leituras exigem a leitura de um número suficiente de nós para garantir a consistência, oferecendo um equilíbrio entre consistência e disponibilidade. (D)</p> Signup and view all the answers

Na implementação de um sistema operacional de tempo real (RTOS), qual técnica de escalonamento de tarefas seria mais apropriada para garantir que tarefas críticas para a segurança (safety-critical) recebam prioridade absoluta e sejam executadas dentro de um prazo máximo (deadline), mesmo em cenários de alta carga do sistema?

<p>Escalonamento por <em>taxa monotônica</em> (rate-monotonic scheduling - RMS), onde as tarefas são escalonadas com base em suas taxas de execução, e as tarefas com taxas mais altas recebem maior prioridade. (B)</p> Signup and view all the answers

Em um sistema de realidade virtual (VR) que busca proporcionar uma experiência imersiva e sem interrupções, qual seria a estratégia mais eficaz para minimizar a latência entre os movimentos da cabeça do usuário e a atualização da imagem exibida nos óculos VR, considerando as restrições de potência computacional e largura de banda?

<p>Utilizar <em>rendering assíncrono</em> (asynchronous timewarp) para distorcer a imagem renderizada com base nas mudanças de postura da cabeça do usuário detectadas após o início da renderização, minimizando a latência. (D)</p> Signup and view all the answers

Ao projetar um sistema de armazenamento em nuvem escalável e tolerante a falhas, qual arquitetura de armazenamento de objetos seria mais apropriada para garantir a durabilidade dos dados, mesmo em caso de falhas simultâneas de múltiplos nós de armazenamento, minimizando o overhead de armazenamento e maximizando a disponibilidade dos dados?

<p><em>Erasure coding</em>, onde cada objeto é dividido em fragmentos de dados e paridade, permitindo a reconstrução dos dados mesmo com a perda de alguns fragmentos, oferecendo um bom equilíbrio entre durabilidade e <em>overhead</em>. (D)</p> Signup and view all the answers

Flashcards

Ciclo

Instrução repetida até uma condição ser falsa.

Variável

Entidade que armazena um valor mutável.

Condicional

Instrução executada dependendo de uma condição.

Função

Bloco de código reutilizável.

Signup and view all the flashcards

Recursão

Função que se chama a si mesma.

Signup and view all the flashcards

Vetor

Conjunto de variáveis do mesmo tipo.

Signup and view all the flashcards

Variável iteradora

Variável que controla o fim de um ciclo.

Signup and view all the flashcards

Operador ->

Permite aceder a um membro de uma struct através de um ponteiro.

Signup and view all the flashcards

Stack

Local de memória para variáveis locais de funções.

Signup and view all the flashcards

Typedef

Define um novo nome para um tipo de dado existente.

Signup and view all the flashcards

Operador condicional

Permite um condicional numa expressão.

Signup and view all the flashcards

Heap

Local onde se aloca e liberta memória dinamicamente.

Signup and view all the flashcards

Estrutura de dados

Conjunto organizado para armazenar e manipular dados eficientemente.

Signup and view all the flashcards

Lista

Estrutura que facilita a recursão.

Signup and view all the flashcards

Struct

Agrupa variáveis relacionadas.

Signup and view all the flashcards

Union

Acede ao mesmo bloco de memória com tipos diferentes.

Signup and view all the flashcards

Listas

Alternativa aos vetores para sequências de variáveis.

Signup and view all the flashcards

Study Notes

  • Uma instrução executada até que uma condição deixe de ser verdadeira é chamada de ciclo.
  • Uma variável é uma entidade com um valor que pode mudar a cada instante.
  • A execução repetida de instruções é um ciclo.
  • Uma instrução que depende de uma condição lógica para ser executada é condicional.
  • Variáveis são necessárias para guardar informação na memória.
  • Executar diferentes instruções com base em diferentes condições requer condicionais.
  • Criar um condicional requer uma expressão lógica e uma ou duas instruções.
  • Uma abstração funcional é uma função onde se pode ignorar o resto do código durante a implementação.
  • Se o objetivo é processar dados sem calcular uma grandeza, usa-se um procedimento.
  • Um procedimento é uma função chamada pelas ações que realiza, sem calcular uma grandeza.
  • Uma variável iteradora é necessária para controlar o fim de um ciclo.
  • Uma variável iteradora controla facilmente o fim de um ciclo.
  • Uma função é um bloco de código reutilizável.
  • Recursão é controlar a complexidade numa função chamando a si mesma
  • A utilização da abstração funcional numa função é recursão.
  • A abstração funcional controla a complexidade do código.
  • Um vetor é um conjunto de variáveis do mesmo tipo.
  • Vetores são necessários para referenciar variáveis distintas em cada iteração num ciclo.
  • Uma variável iteradora controla a paragem de um ciclo.
  • Funções são necessárias para evitar código duplicado.
  • Funções são necessárias para evitar código duplicado parecido.
  • O operador -> permite aceder a membros de uma estrutura através de um apontador.
  • O operador -> simplifica o acesso a campos de uma estrutura, evitando parêntesis.
  • Stack é onde as variáveis locais são guardadas na memória.
  • Structs são usadas para tratar variáveis relacionadas como uma só.
  • Typedef permite definir um novo nome para um tipo de dados.
  • Heap aloca apenas a memória necessária para executar.
  • A abstração permite abstrair-se de detalhes, tipo abstrato de dados
  • Um tipo abstrato de dados permite controlar a complexidade do código.
  • O operador ? permite condicionais dentro de expressões.
  • Heap permite retornar um novo bloco de memória por uma função.
  • Estrutura de dados é o nome dado um conjunto de estruturas definidas
  • Listas facilitam a recursão.
  • Structs agrupam variáveis relacionadas.
  • O operador ? é importante para compactar expressões.
  • Union permite aceder ao mesmo bloco de memória com tipos alternativos.
  • Typedef permite decidir sobre o tipo de um conjunto de variáveis num ponto do programa.
  • Listas são uma sequência de variáveis do mesmo tipo, cada uma no seu bloco de memória.
  • Listas são uma alternativa aos vetores para guardar uma sequência de variáveis.
  • Heap permite alocar e libertar memória.
  • Estruturas de Dados asseguram o carregamento de dados e suportam operações.
  • Stack é essencial para ter variáveis locais.
  • Uma boa Estrutura de dados possibilita algoritmos simples
  • Listas são estruturas de dados que facilitam a recursão.

Studying That Suits You

Use AI to generate personalized quizzes and flashcards to suit your learning preferences.

Quiz Team

Related Documents

Use Quizgecko on...
Browser
Browser