Perguntas de entrevista para desenvolvedor Android júnior

Milad Bonakdar
Autor
Prepare-se para uma entrevista Android júnior com perguntas sobre Kotlin, ciclo de vida, Jetpack Compose, Room, rede e coroutines.
Introdução
Em uma entrevista para desenvolvedor Android júnior, espere perguntas que avaliam se você consegue explicar Kotlin, ciclos de vida do Android, estado no Compose, armazenamento local, chamadas de rede e coroutines de forma prática. Boas respostas conectam cada conceito a uma app pequena e confiável: estado da UI no lugar certo, main thread livre, dados persistidos com segurança e erros tratados com clareza.
Use este guia para praticar respostas curtas e relacione cada tema a um projeto do seu currículo ou portfólio. Uma app de tarefas, clima ou uma tela ligada a uma API torna suas respostas mais específicas e menos decoradas.
Fundamentos do Kotlin (6 Perguntas)
1. Qual é a diferença entre val e var em Kotlin?
Resposta:
val: Declara uma variável imutável (somente leitura). Uma vez atribuída, seu valor não pode ser alterado.var: Declara uma variável mutável. Seu valor pode ser alterado após a inicialização.- Melhor Prática: Use
valpor padrão para segurança. Usevarsomente quando precisar reatribuir o valor.
Raridade: Muito Comum Dificuldade: Fácil
2. Explique os tipos Nullable e o operador Safe Call em Kotlin.
Resposta: O sistema de tipos do Kotlin distingue entre tipos nullable e não nullable para evitar exceções de ponteiro nulo.
- Tipo Nullable: Adicione
?após o tipo:String? - Safe Call (
?.): Chama um método somente se o objeto não for nulo - Elvis Operator (
?:): Fornece um valor padrão se for nulo - Not-null Assertion (
!!): Lança exceção se for nulo (use com moderação)
Raridade: Muito Comum Dificuldade: Fácil
3. Qual é a diferença entre uma class e uma data class em Kotlin?
Resposta:
- Classe Regular: Definição de classe padrão
- Data Class: Gera automaticamente métodos úteis para armazenar dados
equals()ehashCode()toString()- Função
copy() - Funções
componentN()para desestruturação
Raridade: Muito Comum Dificuldade: Fácil
4. O que são expressões Lambda e funções Higher-order em Kotlin?
Resposta:
- Lambda: Função anônima que pode ser passada como um valor
- Função Higher-order: Função que recebe funções como parâmetros ou retorna uma função
Raridade: Muito Comum Dificuldade: Médio
5. Explique as Extension Functions em Kotlin.
Resposta: As extension functions permitem adicionar novas funções às classes existentes sem modificar seu código-fonte.
Raridade: Comum Dificuldade: Fácil
6. Qual é a diferença entre == e === em Kotlin?
Resposta:
==: Igualdade estrutural (compara valores usandoequals())===: Igualdade referencial (compara referências de memória)
Raridade: Comum Dificuldade: Fácil
Componentes Android (5 Perguntas)
7. O que é uma Activity e explique seu ciclo de vida.
Resposta: Uma Activity representa uma única tela com uma interface de usuário. Possui um ciclo de vida bem definido:
onCreate(): A Activity é criada. Inicialize a UI, defina o content view.onStart(): A Activity se torna visível.onResume(): A Activity está em primeiro plano e interativa.onPause(): A Activity está perdendo o foco (outra activity vindo para o primeiro plano).onStop(): A Activity não está mais visível.onDestroy(): A Activity é destruída.
Raridade: Muito Comum Dificuldade: Fácil
8. Qual é a diferença entre uma Activity e um Fragment?
Resposta:
- Activity: Representa uma tela inteira. Ponto de entrada para a interação do usuário. Tem seu próprio ciclo de vida.
- Fragment: Porção reutilizável da UI dentro de uma Activity. Vários fragments podem existir em uma activity. Tem seu próprio ciclo de vida vinculado à activity hospedeira.
- Benefícios dos Fragments:
- Reutilização entre activities
- Componentes de UI modulares
- Suporte para tablets (layouts multi-pane)
- Integração do componente de navegação
Raridade: Muito Comum Dificuldade: Fácil
9. O que é uma Intent e quais são seus tipos?
Resposta: Intent é um objeto de mensagem usado para solicitar uma ação de outro componente do aplicativo.
- Intent Explícita: Especifica o componente exato para iniciar (pelo nome da classe)
- Intent Implícita: Declara uma ação geral e o sistema encontra o componente apropriado
Raridade: Muito Comum Dificuldade: Fácil
10. O que é um Service no Android?
Resposta: Um Service é um componente que é executado em segundo plano para executar operações de longa duração sem uma interface de usuário.
- Tipos:
- Foreground Service: Executa operações perceptíveis (tocador de música). Mostra notificação.
- Background Service: Executa operações não percebidas diretamente pelo usuário.
- Bound Service: Permite que os componentes se liguem a ele e interajam.
Raridade: Comum Dificuldade: Médio
11. O que é um BroadcastReceiver?
Resposta: BroadcastReceiver é um componente que responde a anúncios de broadcast em todo o sistema.
- Casos de Uso: Bateria fraca, mudanças na conectividade de rede, SMS recebido, inicialização concluída
- Registro:
- Estático: No AndroidManifest.xml (limitado em versões mais recentes do Android)
- Dinâmico: No código (preferido)
Raridade: Comum Dificuldade: Fácil
Desenvolvimento de UI (4 Perguntas)
12. Qual é a diferença entre LinearLayout, RelativeLayout e ConstraintLayout?
Resposta:
- LinearLayout: Organiza os filhos em uma única linha ou coluna. Simples, mas pode levar a layouts aninhados.
- RelativeLayout: Posiciona os filhos em relação uns aos outros ou ao pai. Mais flexível, mas complexo.
- ConstraintLayout: Layout moderno e flexível. Hierarquia de visualização plana. Recomendado para UIs complexas.
Raridade: Muito Comum Dificuldade: Fácil
13. O que é RecyclerView e como funciona?
Resposta: RecyclerView é um widget eficiente para exibir grandes listas reciclando visualizações.
- Componentes:
- Adapter: Vincula dados às visualizações
- ViewHolder: Mantém referências às visualizações (evita chamadas
findViewById) - LayoutManager: Posiciona os itens (Linear, Grid, Staggered)
Raridade: Muito Comum Dificuldade: Médio
14. O que é Jetpack Compose?
Resposta: Jetpack Compose é o moderno kit de ferramentas de UI declarativo do Android.
- Declarativo: Descreva como a UI deve ser, não como construí-la
- Benefícios: Menos código, intuitivo, poderoso, acelera o desenvolvimento
- Funções Composable: Blocos de construção da UI do Compose
Raridade: Muito Comum Dificuldade: Fácil
15. Qual é a diferença entre match_parent e wrap_content?
Resposta: Esses são parâmetros de layout que definem as dimensões da visualização:
match_parent: A visualização se expande para preencher o tamanho do paiwrap_content: A visualização se dimensiona para ajustar seu conteúdo- Tamanho Fixo: Valor dp específico (por exemplo,
100dp)
Raridade: Muito Comum Dificuldade: Fácil
Dados e Rede (5 Perguntas)
16. Como você faz uma solicitação de rede no Android?
Resposta:
Use bibliotecas como Retrofit ou OkHttp para rede. Evite usar HttpURLConnection diretamente.
Raridade: Muito Comum Dificuldade: Médio
17. O que é Room e como você o usa?
Resposta: Room é uma camada de abstração sobre o SQLite para facilitar o acesso ao banco de dados.
- Componentes:
- Entity: Representa uma tabela
- DAO (Data Access Object): Define operações de banco de dados
- Database: Contêiner do banco de dados
Raridade: Muito Comum Dificuldade: Médio
18. O que é SharedPreferences?
Resposta: SharedPreferences armazena pequenas quantidades de dados primitivos como pares de chave-valor.
- Casos de Uso: Configurações do usuário, preferências, flags simples
- Não para: Grandes dados, objetos complexos (use Room em vez disso)
Raridade: Muito Comum Dificuldade: Fácil
19. Qual é a diferença entre apply() e commit() em SharedPreferences?
Resposta: Ambos salvam as alterações no SharedPreferences, mas diferem no comportamento:
apply(): Assíncrono. Retorna imediatamente. Alterações gravadas no disco em segundo plano. Sem valor de retorno.commit(): Síncrono. Bloqueia até que as alterações sejam gravadas. Retorna booleano (sucesso/falha).- Melhor Prática: Use
apply()a menos que precise do valor de retorno.
Raridade: Comum Dificuldade: Fácil
20. O que são Coroutines em Kotlin?
Resposta: As Coroutines fornecem uma maneira de escrever código assíncrono sequencialmente, tornando-o mais fácil de ler e manter.
- Benefícios: Leve, concorrência estruturada, tratamento de exceções
- Conceitos Chave:
suspend: Função que pode ser pausada e retomadalaunch: Inicia uma coroutine (disparar e esquecer)async: Inicia uma coroutine e retorna um resultado- Dispatchers: Controla em qual thread a coroutine é executada
Raridade: Muito Comum Dificuldade: Médio


