Errou? Faz Estácio!
Esse mês eu fiz o concurso da UFCA. Foi o minha primeira vez fazendo concurso. Eram 3 vagas (ampla concorrência) para a área de Analista de Tecnologia da Informação / Área: Arquitetura e Desenvolvimento de Sistemas - Back-End .
Meu percentual de acertos foi o seguinte:
| Disciplina | Percentual | Percentual (%) |
|---|---|---|
| Português | 9/10 | (90%) |
| Legislação | 6/10 | (60%) |
| Específicas | 17/29 | (~59%) |
Errou? Faz Estácio!
A única coisa que usei para estudar foi uma prova que teve ano passado da mesma banca e área. Perfil da prova era acertar metade de cada conteúdo (Português, Legislação e Específicas). Achei que não ia conseguir fazer o perfil na parte de legislação. Passei 4 anos na faculdade de Ciências da Computação e nunca precisei ler 1 artigo. Porém, para minha surpresa meu percentual em legislação superou (por 1%) o das específicas.
Na parte de específicas, errei bastaste. Esperava que com meu conhecimento fresco da faculdade (me formei bem recentemente) conseguiria acertar pelo menos 80% da prova. Justifico isso pelo fato de muitas questões serem sobre Engenharia de Software. Fiz Ciência da Computação e só tive uma disciplina sobre Engenharia de Software. Então meu conhecimento nessa área é limitado. Alinhado a isso, a empresa que trabalho atualmente não segue praticamente nenhum princípio do Agile ou qualquer outro de engenharia.
Errou? Faz Estácio!
Tanto pessoas inteligentes, quanto pessoas burras erram constantemente. O que diferencia os dois é que um ignora ou persiste no erro, enquanto o outro aprende com ele. Assim, vamos analisar cada questão e encontrar as lacunas no meu raciocínio.
Questão 10 (Português)
Assinale a alternativa cuja oração exerce a mesma função sintática que o termo destacado em "Em todos os cenários, há um ponto comum." (linha 18).
- A) "...que geram valor consistente..." (linha 07).
- B) "...que conectam a IA à execução..." (linha 08).
- C) "...que utilizam IA diariamente no trabalho no país..." (linha 23).
- D) "...que pretendem aprender novas habilidades" (linha 25).
Questão 10 (Português)
Na minha opinião essa foi a única questão da parte de português que precisava de um bom conhecimento em gramática. Eu tentei fazer ela pela lógica. Quando ele falou "mesma função", eu entendi "mesmo sentido". Então eu pensei, "que conectam a IA à execução" é um "ponto em comum " entre todas diversas empresa, então marquei B. Esse raciocínio está completamente errado. Quando ele fala "mesma função", ele ta falado de "função sintática".
Certo... eu estava estudando para explicar qual a alternativa correta e acabei tendo um choque te realidade que eu não sei absolutamente nada de gramática.
Questão 10 (Português)
Vou tenter explicar o que eu entendi. Na frase "há um ponto comum" o verbo "há" no sentido de existir é um verbo impessoal, logo ele não tem sujeito. Além disso, "há" é um verbo transitivo direto, então ele necessita de um objeto direto, que nesse caso é o termo sublinhado "um ponto comum". Então a questão pedia pare selecionar a oração com sentido de objeto direto. Muitas dessas frases estão cortadas nas alternativas, então vou deixar elas mais completas a seguir:Questão 10 (Português)
- A) Davos mostram que as organizações [que geram valor consistente].
- B) Organizações que geram valor consistente são aquelas [que conectam a IA à execução].
- C) Profissionais [que utilizam IA diariamente no trabalho no país] saltou de 17% para 35%.
- D) 78% dos trabalhadores brasileiros afirmam [que pretendem aprender novas habilidades] ligadas à IA
Nas letras A, B, C, a oração entre colchetes tem sentido de adjunto adnominal que caracterizam um substantivo. Acho que é visível que elas estão caracterizando um substantivo, certo? Porém, na letra D, o verbo "afirmam" é transitivo direto e o complemento dele é "que pretendem aprender novas habilidades". Assim, essa oração tem o mesmo sentido que o do enunciado, servindo como objeto direto.
Questão 10 (Português)
Espero que tenha dado para entender alguma coisa. Até eu não sei se entendi 100% dessa questão. Preciso estudar mais sobre gramática.
Questão 12 (Legislação)
Responda, segundo a Lei Geral de Proteção de Dados Pessoais, qual a única alternativa correta.
- A) Constituem dados pessoais sensíveis a origem racial ou étnica, convicção religiosa e opinião política.
- B) O tratamento de dados pessoais de crianças deverá ser realizado com o consentimento específico e em destaque dado obrigatoriamente por ambos os pais, sob pena de responsabilização dos controladores.
- C) Na realização de estudos em saúde pública, os órgãos de pesquisa não poderão ter acesso a bases de dados pessoais, mesmo que tratados dentro do órgão ainda que para a finalidade de realização de estudos e pesquisas.
- D) Na hipótese em que o consentimento é requerido, se houver mudanças da finalidade para o tratamento de dados pessoais compatíveis com o consentimento original, o controlador deverá informar previamente o titular sobre as mudanças de finalidade, podendo o titular revogar o consentimento, caso discorde das alterações.
Questão 12 (Legislação)
Ok, essa é mais fácil de explicar. Eu marquei letra E pensando que, por exemplo, eu consinto com tudo em um contrato, só que no futuro a empresa muda uma clausula e deixa esse contrato absurdo. Eu deveria ter o direito de revogar, certo? Esse pensamento está correto. A pegadinha está em "compatíveis com o consentimento original". Eu não prestei atenção nisso na hora da prova. Se as modificações são compatíveis com o acordo original, o controlador não tem obrigação de "informar previamente o titular sobre as mudanças de finalidade, podendo o titular revogar o consentimento, caso discorde das alterações".
A alternativa B está errada, pois o consentimento é de pelo menos um dos pais e não ambos.
Questão 12 (Legislação)
A alternativa C está errada, pois órgãos de de saúde são permitidos sim de ter acesso a bases de dados pessoais. Isso apenas para realização de pesquisa, preferencialmente anonimizadas.
A letra A é a correta, porque, mesmo não apresentando todos, ele citou apenas casos que constituem dados pessoais sensíveis.
Questão 15 (Legislação)
De acordo com a Lei de Acesso à Informação (Lei 12.527/2011), assinale a alternativa correta.
- A) O acesso à informação independe de motivação do requerente.
- B) Informação pessoal é aquela relacionada ao servidor público identificado ou identificável.
- C) Cabe aos órgãos e entidades públicas e privadas, observadas as normas e procedimentos específicos aplicáveis, assegurar a gestão transparente da informação, propiciando amplo acesso a ela e sua divulgação.
- D) Autenticidade é a qualidade da informação coletada na fonte, com o máximo de detalhamento possível, sem modificações.
Questão 15 (Legislação)
Eu fui ingênuo de achar realmente todas as entidades deviam "assegurar a gestão transparente da informação, propiciando amplo acesso a ela e sua divulgação". Porém, na lei de Acesso à Informação, apenas entidades públicas e entidades privadas sem fins lucrativos que recebam recursos públicos tem esse dever. Mas, da para entender que o estado (ainda) não tem o direito do obrigar gestão transparente e acesso a informação de uma empresa completamente privada.
A letra B é claramente falsa pois informação pessoal não se refere apenas a servidores públicos. Mesmo não tendo lido a lei, isso é bem óbvio.
Questão 15 (Legislação)
A letra D diz Autenticidade, mas essa descrição é sobre Primariedade (condição do que é primário). Esse conceito diz respeito a uma informação bruta "sem modificações". Autenticidade fala sobre a garantia de quem produziu determinada informação. Claro que eles falam isso de uma maneira bem complicada, pois parece ser o modus operandi da área legislativa.
A alternativa certa é a letra A. É vedada a exigência de quaisquer motivações relativas a solicitação de uma informação de interesse público. Resumindo, se a informação é de interesse público como por exemplo: o valor de uma licitação, você não precisa dar nenhum cabimento.
Questão 17 (Legislação)
É diretriz do Programa Federal de Prevenção e Enfrentamento do Assédio e da Discriminação, segundo o disposto no Art. 5º. Decreto nº 12.122/2024:
- A) Publicidade.
- B) Razoabilidade.
- C) Universalidade.
- D) Proporcionalidade.
Questão 17 (Legislação)
Ok... essa daqui eu realmente tive um raciocínio bizarro. Eu nunca lí essa diretriz. Então, o que eu imaginei foi que, Proporcionalidade seria algo como, a proporção do assédio ou o a discriminação feita. Tipo, a diferença de proporção entre você xingar alguém pelo gênero dela e você MATAR alguém pelo gênero dela. Porém, essa diretriz de Proporcionalidade não existe. O mesmo acontece com Publicidade (que realmente essa aqui na não tem muita interpretação) e Razoabilidade.
A alternativa correta levando em conta a diretriz que está presente no "Programa Federal de Prevenção e Enfrentamento do Assédio e da Discriminação" é Universalidade. Como o nome dessa diretriz já entrega, ela fala sobre todos (sem exceção) terem direito a um ambiente de trabalho sem violência.
Questão 20 (Legislação)
A Convenção sobre a Eliminação de Todas as Formas de Discriminação contra a Mulher visa evitar que a mulher continue sendo objeto de grandes discriminações. Marque a alternativa correta.
- A) Esta Convenção iguala as mulheres urbanas e rurais, já que inexistem problemas específicos enfrentados pelas mulheres urbanas e rurais, incluído seu trabalho em setores monetários da economia.
- B) Segundo esta convenção, os Estados-Partes adotarão todas as medidas apropriadas para eliminar a discriminação contra a mulher na esfera dos cuidados médicos a fim de assegurar, em condições de igualdade entre homens e mulheres, o acesso a serviços médicos, inclusive os referentes ao planejamento familiar, garantindo à mulher assistência apropriada em relação à gravidez, ao parto e ao período posterior ao parto, proporcionando assistência gratuita quando assim for necessário, e lhe assegurando uma nutrição adequada durante a gravidez e a lactância.
- C) Qualquer controvérsia entre dois ou mais Estados-Partes relativa à interpretação ou aplicação desta Convenção e que não for resolvida por negociações será, a pedido de qualquer das Partes na controvérsia, submetida à Corte de Haia. Se no prazo de seis meses a partir da data do pedido de arbitragem as Partes não acordarem sobre a forma da arbitragem, qualquer das Partes poderá submeter a controvérsia à Corte Internacional de Justiça mediante pedido em conformidade com o Estatuto da Corte.
- D) Segundo esta convenção, os Estados-Partes adotarão todas as medidas apropriadas para eliminar a discriminação contra a mulher em outras esferas da vida econômica e social a fim de assegurar, em condições de igualdade entre homens e mulheres, os mesmos direitos, em particular o da obrigação do homem em arcar com todas as despesas do lar podendo inclusive obter empréstimos bancários, hipotecas e outras formas de crédito financeiro para tal fim.
Questão 20 (Legislação)
As alternativas A e D são completamente insanas. Eu coloquei letra B e não sei o porquê. Porque assim, eu não sei o que são Estados-Partes nem Corte de Haia. Acho que fiquei com pressa e simplesmente marquei essa.
Estados-Partes são os países que assinaram algum acordo. Nesse caso é o acordo CEDAW (Convention on the Elimination of All Forms of Discrimination Against Women) adotada pela ONU em 1979.
Quando ele fala Corte de Haia, creio que ele está falando da Corte Internacional de Justiça. Resumindo, ela visa resolve disputas entre Estados.
Questão 20 (Legislação)
A alternativa C está errada por causa da ordem. Ela fala de submeter a controvérsia diretamente a Corte de Haia e depois para o CIJ. Porém, o certo era primeiro submeter a controvérsia a uma arbitragem e depois de 6 messes, se não fosse resolvido, mandar para o CIJ.
A letra B está correta, ela explica exatamente o que está no artigo 12 da convenção citada.
Questão 23 (Específicas)
Um sistema backend expõe uma funcionalidade administrativa que recebe entradas do usuário para executar rotinas no servidor. Em razão da ausência de validação adequada desses dados, um atacante consegue executar comandos arbitrários no sistema operacional do host . Essa falha de segurança é classificada como:
- A) Path Traversal.
- B) Command Injection.
- C) Cross-Site Scripting (XSS).
- D) XML External Entity (XXE).
Questão 23 (Específicas)
Quando eu lí a parte "consegue executar comandos arbitrários no sistema operacional do host" eu fui seco na alternativa XSS. Pra ser sincero eu não lembro de ser abordado "Command Injection" nas cadeiras de segurança da faculdade. Sem contar que "Cross-site Scripting" é um nome bem mais memorável que "Command Injection".
Corrigi meus conhecimentos lendo o livro "Computer Security Principles and Practice 5th Edition". Vou explicar o que eu entendi baseado na minha leitura. Primeiro, irei abreviar "Command Injection" para CI e "Cross-Site Scripting" para XSS.
Questão 23 (Específicas)
Tanto o CI quanto o XSS são ataques de injeção. Nesse tipo de ataque o usuário entra com um comando arbitrário que será executado em uma máquina alvo. A diferença é que o o código do CI é executado no Host do servidor, ou seja, a máquina que está rodando o WebServer. Já no XSS o código é executado na máquina de outro usuário. Por isso nome, "Cross-Site", o código vai do atacante para o servidor e do servidor para a vítima. No XSS o código não é executado no servidor.
Questão 23 (Específicas)
A questão deixa bem claro que o atacante consegue "executar comandos arbitrários no sistema operacional do host". Ou seja, se trada de um CI, não XSS.
Se a questão tratasse de uma situação onde, por exemplo, em uma Wiki, um atacante consegue inserir códigos JavaScript em páginas específica. Nesse caso, seria XSS. Perceba que o código é somente injetado em uma página, mas não é executado no servidor. Esse código vai ser executado somente em vítimas que acessarem a página com o código malicioso.
Questão 26 (Específicas)
Em um framework extensível orientado a objetos, o núcleo do sistema define operações abstratas que dependem da criação de objetos responsáveis por executar etapas específicas do processamento. O framework não conhece previamente as classes concretas desses objetos, delegando às subclasses a responsabilidade de decidir qual implementação concreta será instanciada. Essa abordagem permite a introdução de novos comportamentos sem modificar o código do núcleo do framework. Considerando os padrões de projeto GoF, assinale a alternativa correta.
- A) Adapter.
- B) Strategy.
- C) Observer.
- D) Factory Method.
Questão 26 (Específicas)
A alternativa Observer não faz o menor sentido. O design pattern Observer define dependências one-to-many, aonde, quando o objeto Subject é atualizado, todos os objetos Observers são notificados. É aquele exemplo clássico de uma Newspaper. Diversas pessoas se inscrevem em uma Newspaper. Quando um novo conteúdo é criado, a Newspaper notifica todos os inscritos. Os inscritos são os Observers, a Newspaper é o Subject.
Questão 26 (Específicas)
Eu marquei Strategy por causa dessa parte: "o núcleo do sistema define operações abstratas que dependem da criação de objetos responsáveis por executar etapas". Quando eu lí, objetos responsáveis por executar etapas, eu já pensei em composition, dai fui logo na alternativa Strategy.
Porém, lendo agora o enunciado, é visível que ele está falando de um padrão aonde operações abstratas de uma classe depende da instanciação de objetos concretos. Isso não tem nada a ver com o Strategy Pattern. O Strategy é sobre encapsula diferentes algoritmos intercambiáveis utilizando composição.
O Design Patter Adapter, como o nome implica é sobre criar uma adaptador de uma interface X para uma interface Y. O enunciado nem cita a palavra a adaptar.
Questão 26 (Específicas)
A resposta era Factory Method. Acredito que o checkmate nessa alternativa é quando ele fala "delegando às subclasses a responsabilidade de decidir qual implementação concreta será instanciada" . Ou seja, a super classe não sabe qual instanciação vai ser feita, ela delega isso para suas subclasses, o que é o principal comportamento do Factory.
Questão 27 (Específicas)
Durante a modelagem de um processo de atendimento utilizando BPMN 2.0, um analista precisa representar uma decisão baseada no resultado de uma verificação automática. Caso a condição seja satisfeita, o processo é encerrado; caso contrário, é encaminhado para uma atividade complementar de tratamento. Após essa atividade, o fluxo deve permanecer aguardando a ocorrência de um evento externo, como um e-mail de confirmação, para então prosseguir. Assinale a alternativa correta que contempla o desvio de fluxo para tratamento condicional e o aguardo da confirmação, respectivamente.
- A) Gateway Exclusivo (XOR) e Intermediate Catching Event.
- B) Gateway Inclusivo (OR) e Gateway Paralelo (AND).
- C) Gateway de Complexidade e Message End Event.
- D) Gateway Exclusivo (XOR) e Task Event.
Questão 27 (Específicas)
Vou começar pela minha interpretação (errada) da questão (eu nunca tinha visto essa modelo BPMN na vida). Eu tinha entendido que existiam dois fluxos na questão, sendo eles:
- Caso a condição seja satisfeita, o processo é encerrado; caso contrário, é encaminhado para uma atividade complementar de tratamento.
- o fluxo deve permanecer aguardando a ocorrência de um evento externo... para então prosseguir"
Questão 27 (Específicas)
Nas linguagem de programação, quando temos um OR da seguinte forma:
condição1 OR condição2
Se a condição1 for satisfeita, a verificação termina aí. Não há necessidade de verificar a condição2, pois o condicional OR só precisa de um valor verdadeiro. Caso contrário ele vai verificar a condição2. Isso se parece muito com a primeira parte:
- condição satisfeita, processo encerrado; caso contrário, é encaminhado para uma atividade complementar.
Questão 27 (Específicas)
Agora a interpretação correta da questão. Na primeira alternativa ele utiliza um "ou exclusivo" (XOR), esse operador obriga você a escolher um dos fluxos, se você não escolher nenhum, ou mais de um, o resultado dele é falso. É igual quando você vai no RU da faculdade e tem que escolher apenas uma opção de "carne", só com a diferença que no RU você pode escolher nenhuma opção, mas no XOR não.
Já no segundo fluxo ele fala sobre esperar um fluxo externo. Aqui o cara realmente tinha que ter conhecimento do padrão BPMN, senão ele ia ficar em dúvida entre Task Event ou Intermediate Catching Event. No caso, não existe Task Event no BPMN. Existe Tasks e existem Events, mas não existe Task Event.
Questão 27 (Específicas)
Ainda tem uma explicação do porquê Intermediate Catching Event.:
- Intermediate: acontece no meio do fluxo (Intermediate = Intermediário).
- Catching: ele está esperando um evento (Catching = Captura).
- Event: é um evento.
Questão 30 (Específicas)
Em uma aplicação que utiliza JPA 2.1 (ou superior), ao listar entidades Pedido, ocorre o problema do N+1 selects ao acessar a associação pedido.cliente mapeada como @ManyToOne(fetch = FetchType.LAZY). Para garantir que Cliente seja carregado na mesma consulta que busca Pedido, eliminando o N+1, o desenvolvedor deve:
- A) Utilizar JOIN FETCH na consulta JPQL.
- B) Alterar o relacionamento para FetchType.EAGER.
- C) Utilizar uma consulta JPQL com JOIN para filtrar ou restringir os resultados.
- D) Utilizar limitação de intervalo (setFirstResult / setMaxResults) na consulta JPQL.
Questão 30 (Específicas)
Na faculdade eu fiz uma disciplina chamada Programação Para Persistência. Lá o professor ensinou a utilizar o FastAPI com SQLModel. Ele também chegou a explicar o problema das N+1 requisições
Esse problema acontece assim: considere uma tabela A que é relacionada com uma tabela B e você pega N elementos da tabela A. Geralmente o ORM faz um Lazy Loading. Isso é, ele faz um "carregamento preguiçoso", e só vai fazer o JOIN da tabela A com a tabela B se você tentar acessar esse campo. Então se você acessar esse campo nos N elementos que você pegou da tabela A, o banco vai receber 1 requisição (a primeira que você fez e retornou os N elementos) + N requisições (A união do elemento A[i] com seu elemento B[j] relacionado), o que vai totalizar N + 1 requisições para o banco.
Isso acaba acanalhando toda a performance do teu sistema
Questão 30 (Específicas)
Pare resolver isso, o professor tinha explicando como utilizar o método Eager (Ansioso). Nesse caso o banco já faz os N relacionamentos em uma requisição só (nada de preguiça).
Por causa desse background eu acabei marcando a alternativa "Alterar o relacionamento para FetchType.EAGER.". Mas, aparentemente, mudar a relacionamento para Eager no JPA é considerado uma má prática. Isso porque você vai perder as vantagens do Lazy Loading. Sempre vai está fazendo o JOIN da tabela A com a tabela B, o que vai diminuir a performance do sistema em outras requisições.
O correto é fazer o JOIN FETCH pedido.cliente, que exclusivamente nesse caso, vai informar para o JPA retornar todos os relacionamentos de pedido com cliente utilizando um só requisição para o banco.
Questão 31 (Específicas)
Um arquiteto de software está modernizando a documentação de uma aplicação construída com Spring Boot 3. Ele optou por utilizar a biblioteca springdoc-openapi para expor a interface do Swagger conforme os padrões da especificação OpenAPI 3.x. Ao implementar o controlador responsável pela gestão de inventário, ele precisa anotar um método que recupera um item específico pelo seu código identificador (ex: GET /produtos/{codigo}). Considerando as boas práticas e a compatibilidade com a especificação OpenAPI 3.x, assinale a alternativa que apresenta as anotações específicas de documentação do pacote io.swagger.v3.oas.annotations para descrever, respectivamente, a finalidade do endpoint e o detalhamento do parâmetro recebido na URL.
- A) @Api para a definição do recurso e @ImplicitParam para documentar o código identificador na rota.
- B) @ApiOperation para descrever a ação do método e @ApiParam para detalhar as restrições do código do produto.
- C) @Operation para descrever o objetivo do endpoint e @Parameter para fornecer informações detalhadas sobre o identificador do produto.
- D) @GetMapping para o mapeamento da rota, sendo desnecessário qualquer outro recurso.
Questão 31 (Específicas)
Eu não marquei letra C porque eu pensei que eram anotações muito simples. Muito fácil o Java que tem uma LIB nativa gigantesca já ter alguma coisa com a anotação @Operation ou @Parameter. Porem, acabei errando.
Uma interpretação que você podia ter tido era, no final do enunciado ele fala: "anotações específicas de documentação do pacote io.swagger.v3.oas.annotations para descrever, respectivamente, a finalidade do endpoint e o detalhamento do parâmetro recebido na URL".
Dá para fazer a seguinte ligação lógica:
| enunciado | questão correta | |
|---|---|---|
| finalidade do endpoint | ~= | descrever o objetivo do endpoint |
| detalhamento do parâmetro | ~= | informações detalhadas sobre o identificador do produto. |
Questão 33 (Específicas)
Em aplicações desenvolvidas com React, é comum que componentes realizem renderizações frequentes. Em cenários nos quais funções são repassadas como propriedades para componentes filhos, a recriação dessas funções a cada renderização pode causar impactos negativos de desempenho. Nesse contexto, o React 16.8 ou superior disponibiliza Hooks nativos para otimização do ciclo de renderização. Considerando um caso em que se deseja memorizar a definição de uma função entre renderizações, evitando sua recriação desnecessária, assinale a alternativa correta.
- A) useState.
- B) useEffect.
- C) useMemo.
- D) useCallback.
Questão 33 (Específicas)
Esse é o tipo de questão onde, se nunca tivesse escutado nada sobre React na minha vida, talvez eu tivesse acertado ela. Sempre escutei meus amigos do front falarem sobre useState e useEffect. Literalmente qualquer problema no front eles diziam: "faz um useEffect", "é so criar um useState para isso". Então eu nem imaginei que as opções useMemo ou useCallback fossem certas.
Quando eu digo que, se eu nunca tivesse ouvido falar sobre React, talvez eu tivesse acertado essa questão, eu quero dizer pelo fato da seguinte parte do enunciado: "Em cenários nos quais funções são repassadas como propriedades para componentes filhos". Em programação, quando você fala de passar uma função como propriedade de algo, a maioria das vezes a gente está falando sobre callback. Então era fácil saber qual alternativa era correta.
Questão 36 (Específicas)
Uma autarquia pública pretende integrar diversos sistemas legados desenvolvidos em diferentes linguagens de programação e plataformas. Para viabilizar essa integração, a equipe técnica decidiu implementar um componente que atue como uma camada intermediária que seja responsável por intermediar, rotear, transformar e orquestrar mensagens entre diferentes serviços e aplicações, promovendo baixo acoplamento, interoperabilidade e independência de plataforma. Nesse contexto, o componente de arquitetura SOA mais adequado é o:
- A) Registro de Serviços (Service Registry).
- B) Mecanismo de Notificação por Eventos (Event-driven).
- C) Barramento de Serviço Corporativo (Enterprise Service Bus).
- D) Arquitetura Baseada em Microsserviços Independentes(Microservices).
Questão 36 (Específicas)
Quando eu lí essa parte: "orquestrar mensagens entre diferentes serviços e aplicações, promovendo baixo acoplamento", eu já pensei em algo orientado a eventos, tipo um RabbitMQ. A ideia principal de padrões de eventos, como por exemplo o padrão Observer é justamente promover baixo acoplamento. Porém, eu não prestei atenção na parte que ele fala "transformar mensagens". Serviços orientados a eventos não fazem transformações nas mensagens, então só por isso já estaria errado.
Primeiramente, que porra é um SOA? Essa sigla significa Service-Oriente Architecture. É o padrão de serviços focados em serviços discretos (claramente separados) em vez de grandes blocos monolíticos. Por exemplo, em um sistema de supermercado, podia existir o serviço de estoque e o serviço financeiro. Quem se comunica com eles não precisa saber exatamente como eles funcionam. Basta saber como se comunicar com o serviço que o resto é transparente.
Questão 36 (Específicas)
Esses serviços, podem tranquilamente ser feitos em linguagens e frameworks diferentes. Por exemplo, o sistema monetário ser feito em Java e o de estoque em Python. A comunicação entres os servições é feito por uma linguagem intermediário como XML (SOAP) ou JSON (REST).
Alguns benefícios dessa arquitetura são:
- Reutilização de serviços
- Baixo acoplamento
Questão 36 (Específicas)
Para esses diversos sistemas se comunicarem é utilizado um ESB (Enterprise Service Bus) é um orquestrador que ajuda na comunicação entre os serviços. Em vez dos serviços se comunicarem diretamente entre si, eles se comunicam com o ESB e esse orquestra tudo corretamente. O enunciado da questão descreve bem as obrigações de um ESB.
Questão 39 (Específicas)
Um analista precisa listar o nome de todos os clientes, independentemente de possuírem pedidos associados, e os identificadores dos pedidos cujo status seja 'APROVADO'. Para clientes que não possuam pedidos com esse status, o identificador do pedido deve ser exibido como NULL. Considere que as tabelas apresentadas estão corretamente modeladas em um banco de dados relacional PostgreSQL, com integridade referencial garantida por meio de chaves primárias e estrangeiras, sendo pedidos.cliente_id uma chave estrangeira que referencia clientes.id.
clientes
| id | nome |
|---|---|
| 1 | Ana Silva |
| 2 | Bruno Costa |
| 3 | Carla Lima |
| 4 | Daniel Souza |
| 5 | Elisa Rocha |
pedidos
| id | cliente_id | status |
|---|---|---|
| 1 | 1 | APROVADO |
| 2 | 2 | PENDENTE |
| 3 | 3 | APROVADO |
| 4 | 3 | CANCELADO |
Assinale a consulta SQL que atende corretamente a todos os requisitos.
- A) SELECT c.nome, p.id FROM clientes c LEFT JOIN pedidos p ON c.id = p.cliente_id WHERE p.status = 'APROVADO' OR p.id IS NULL;
- B) SELECT c.nome, p.id FROM clientes c LEFT JOIN pedidos p ON c.id = p.cliente_id AND p.status = 'APROVADO';
- C) SELECT c.nome, p.id FROM clientes c INNER JOIN pedidos p ON c.id = p.cliente_id WHERE p.status = 'APROVADO';
- D) SELECT c.nome, p.id FROM clientes c LEFT JOIN pedidos p ON c.id = p.cliente_id HAVING p.status = 'APROVADO';
Questão 39 (Específicas)
A alternativa D nem roda, pois está usando uma clausula HAVING. A letra C utiliza um INNER JOIN, então não vai pegar "todos os clientes". A dúvida mesmo fica entre a alternativa A e B.
Eu marquei a alternativa A) pesando: "GG Easy, só dar um LEFT JOIN, que vai pegar geral e depois filtra por APROVADO ou NULL". Porém, eu me esqueci do status PENDENTE. Ou seja, a alternativa A) remove pedidos pendentes.
A alternativa B é mais sofisticada (e certa). Ela faz um LEFT JOIN somente com as tabelas de pedidos aprovados. E o que acontece com os outros casos? Ou seja, as que tem pedidos pendentes ou as que não tem pedido? A resposta é: voltam como NULL, justamente como a questão pediu.
Questão 40 (Específicas)
Durante a evolução de um sistema corporativo orientado a objetos, a equipe de desenvolvimento identificou dificuldades na substituição de componentes e na realização de testes unitários, devido ao forte acoplamento entre classes centrais e implementações específicas. Para mitigar esse problema, decidiu-se adotar práticas alinhadas aos princípios SOLID. Nesse contexto, uma abordagem coerente com o Princípio da Inversão de Dependência (Dependency Inversion Principle - DIP) é:
- A) Projetar o sistema de forma que as classes de mais alto nível conheçam diretamente as implementações concretas das classes de nível inferior.
- B) Criar dependências diretas entre classes especializadas e suas generalizações, garantindo que a hierarquia de herança substitua a necessidade de inversão.
- C) Definir abstrações estáveis, de modo que tanto os módulos de alto nível quanto os de baixo nível dependam dessas abstrações, e não de implementações concretas.
- D) As classes de baixo nível devem exclusivamente fornecer as interfaces que as classes de alto nível são obrigadas a implementar, invertendo o fluxo de controle tradicional.
Questão 40 (Específicas)
A alternativa A descreve o contrário do DIP. Ela basicamente fala para as classes de alto ter conhecimento da implementação das de baixo nível. Já a letra B é completamente insana, ao dizer "Criar dependências diretas entre classe".
Na época que fiz essa prova, eu tinha noção que o DIP era sobre interfaces e comunicação entre classes de baixo e alto nível. Porém o que me pegou e fez eu selecionar essa alternativa D foi a parte que ele diz "invertendo o fluxo de controle tradicional". Quando ele disse "invertendo o fluxo", eu já pensei, eita, falou sobre interfaces e falou sobre inversão, só pode ser essa.
A alternativa D está errado porque ele fala sobre as classes de baixo nível fornecerem as interfaces que as classes de alto nível devem implementar. Porém, no DIP, é totalmente o contrário. As classes de alto nível é que delegam as interfaces que as de baixo nível devem implementar.
Questão 46 (Específicas)
No processo de medição do tamanho funcional de sistemas de software, a Análise por Pontos de Função (APF), conforme o padrão do IFPUG (International Function Point Users Group), prevê diferentes tipos de contagem, variando conforme o nível de informação disponível sobre os requisitos e as funcionalidades. Em determinadas situações iniciais do projeto, utiliza-se um tipo de contagem em que todas as funções recebem uma complexidade funcional previamente definida, sem detalhamento completo de seus elementos.
Essa modalidade de contagem é tecnicamente denominada:
- A) Contagem Analítica.
- B) Contagem Indicativa.
- C) Contagem Estimativa.
- D) Contagem Preliminar.
Questão 46 (Específicas)
Conteúdo sobre Análise de Pontos de Função na internet é bem escasso. Até as páginas da Wikipedia sobre sobre Análise de Pontos de Função e Pontos de Função são muito pequenas e carecem de detalhes.
Os conteúdos do IFPUG e da ISO/IEC 20926:2009 que é o padrão que define os pontos de função são todos pagos, e não existe cópias em meios alternativos.
Esse questão aqui, ou o cara sabe, ou o cara chuta. Não tem muito o que fazer. Eu pensei em argumentos lógicos para justificar o nome Contagem Estimativa, mas isso não importa. Da mesma forma eu poderia encontrar argumentos para justificar os nome Contagem Preliminar e Contagem Indicativa.
Questão 46 (Específicas)
Deixando de lado a questão em sí, vou discorrer um pouco sobre o que eu entendi sobre esse assunto.
Análise de Pontos de Função é um método que utiliza conceito de Pontos de Função para mensurar tamanho de Software. A métrica não leva em conta as tecnologias utilizadas para desenvolver a aplicação, como linguagem, framework, hardware utilizado e ETC. O foco da métrica é definir a quantidade de funcionalidades disponíveis para o usuário.
Pelo que eu entendo, você segue uma metodologia específica de contagem de pontos de função, e no final da metodologia você tem como resultado uma métrica única que vai representa o tamanho do Software. Isso é útil para documentos de licitação.
Questão 46 (Específicas)
É fácil você fazer uma licitação para a construção de um prédio físico. Possuímos diversas métricas como metros quadrados, quantidade de andares, quantidade de quartos. Porém, para algo abstrato como um software é difícil você licitar exatamente a quantidade de esforço e o tamanho do projeto. Os pontos do função tentam sanar isso.
Cheguei a ver algumas críticas desse métrica, pois, como citado anteriormente, ela não leva em conta a tecnologia utilizado. E vamos ser sinceros, a tecnologia utilizada, considerando vastidão de linguagens e frameworks que temos atualmente, é muito importante.
Fazer um backend com x pontos de função utilizando FastAPI não leva o mesmo esforço de fazer o mesmo backend só que em Java. FastAPI é mais direto, enquanto o Java é mais verboso. Mesmo utilizando LLMs, você provavelmente irar demorar mais tempo para concluir o backend em Java.
Questão 49 (Específicas)
Uma equipe de desenvolvimento está adotando o método Kanban e decidiu implementar algumas cadências recomendadas para melhorar o gerenciamento do fluxo de trabalho. Nesse contexto, a reunião conhecida como Replenishment Meeting tem como principal finalidade:
- A) Realizar o acompanhamento diário das tarefas em andamento, identificando impedimentos e ajustando prioridades em tempo real.
- B) Promover uma retrospectiva sobre como o time executou o trabalho anterior, com foco em melhorias no processo e lições aprendidas.
- C) Medir continuamente o desempenho do fluxo por meio de métricas como lead time e throughput, garantindo previsibilidade de entrega.
- D) Selecionar e priorizar novos itens de trabalho a serem inseridos no fluxo de execução.
Questão 49 (Específicas)
A alternativa A claramente fala sobre a reunião de daily na metodologia Scrum. Já alternativa B encaixa muito bem na descrição sprint retrospective. A letra C, sequer parece algum tipo de reunião. Parece mais uma característica de alguma metodologia. Então, só sobra a letra D, que é a certa
Na época que eu fiz essa questão, eu não sabia o que significava a palavra em inglês replenishment. O significado dessa palavra é reabastecer. A alternativa D claramente fala sobre atividades de reabastecimento das tarefas, o que encaixa bem com o significado de replenishment..
Questão 49 (Específicas)
Uma equipe de desenvolvimento está adotando o método Kanban e decidiu implementar algumas cadências recomendadas para melhorar o gerenciamento do fluxo de trabalho. Nesse contexto, a reunião conhecida como Replenishment Meeting tem como principal finalidade:
- A) Realizar o acompanhamento diário das tarefas em andamento, identificando impedimentos e ajustando prioridades em tempo real.
- B) Promover uma retrospectiva sobre como o time executou o trabalho anterior, com foco em melhorias no processo e lições aprendidas.
- C) Medir continuamente o desempenho do fluxo por meio de métricas como lead time e throughput, garantindo previsibilidade de entrega.
- D) Selecionar e priorizar novos itens de trabalho a serem inseridos no fluxo de execução.
Questão 50 (Específicas)
No contexto da engenharia de requisitos, a técnica de casos de uso é amplamente empregada para representar interações entre usuários e sistemas, servindo como base para especificação e rastreabilidade funcional. Assinale a alternativa que apresenta uma prática que compromete principalmente a rastreabilidade dos requisitos ao se utilizar casos de uso.
- A) Utilizar notação padronizada e compreensível pelos usuários finais, facilitando a validação colaborativa dos requisitos.
- B) Atualizar os casos de uso apenas ao final do projeto, evitando revisões durante as iterações para reduzir retrabalho documental.
- C) Não descrever fluxos alternativos e condições de exceção nos casos de uso, limitando a documentação ao cenário principal.
- D) Elaborar casos de uso priorizando apenas a visão dos stakeholders principais, sem envolver usuários operacionais no levantamento inicial.
Questão 50 (Específicas)
Na época que eu fiz essa questão, eu simplesmente não sabia o que significava rastreabilidade. Eu sabia que a palavra tinha a ver com você rastrear alguma coisa, mas eu não sabia o que.
Rastreabilidade em engenharia de software fala sobre a capacidade de acompanhar um requisito desde sua criação, implementação até a entrega. Ou seja, é dizer porque aquilo foi implementado da quela forma.
Eu marquei a letra C no chute mesmo. Porem a correta era a letra B. Se for deixado para atualizar os casos de uso apenas no final do projeto, o link entre requisito e código implementado e entregado é quebrado. Ou seja, um requisito pode ter sido mudado, mas como no caso de uso ele só vai ser alterado no final do projeto, não tem como você rastrear o requisito correto da aplicação.