O React Native é um dos frameworks de software mais populares e tem sido usado para desenvolver aplicativos como Facebook, Instagram e Skype. Se você está no ramo de criação de aplicativos móveis, um desenvolvedor React Native habilidoso é imprescindível.
Para encontrar a pessoa certa para o trabalho, primeiro você precisa estabelecer um processo completo de seleção de candidatos. Depois de fazer a triagem dos candidatos com uma avaliação de habilidades em React Native, a entrevista é a sua oportunidade de identificar a melhor opção para a sua empresa fazendo as perguntas certas.
O objetivo é encontrar o desenvolvedor com as habilidades que melhor atendam às necessidades da sua organização, seja mantendo um portfólio de aplicativos existente ou criando novos aplicativos do zero.
Com as 40 perguntas de entrevista sobre React Native abaixo, há muito espaço para adaptar as entrevistas às necessidades da sua empresa.
Dividimos as perguntas em três categorias, com base no nível de experiência necessário para a função que você está procurando preencher:
Iniciante, para desenvolvedores React Native juniores
Intermediário, para desenvolvedores React Native com alguma experiência
Avançado, para desenvolvedores React Native sênior
Incluímos exemplos de respostas para cada pergunta para que você possa avaliar os candidatos de forma eficaz, mesmo que não tenha experiência com o React Native.
Você pode usar essas perguntas de entrevista para iniciantes para avaliar as habilidades e o conhecimento de desenvolvedores React Native iniciantes ou juniores no início de suas carreiras.
Exemplo de resposta:
Desde seu lançamento em 2015, o React Native construiu uma reputação como um framework JavaScript confiável e eficaz. Alguns de seus principais pontos fortes incluem:
Compatibilidade entre plataformas: A maior parte do código é multiplataforma, o que significa que os desenvolvedores só precisam criar um aplicativo em vez de dois aplicativos separados para iOS e Android
Feedback em tempo real: O React Native oferece um recurso de "hot reloading" em que os desenvolvedores podem visualizar imediatamente as alterações feitas em uma janela de visualização separada
Interface de usuário flexível: A interface do React Native é elegante e facilita o trabalho conjunto de vários desenvolvedores em um projeto
Plug-ins de terceiros: O React Native é compatível com muitos plug-ins de terceiros que podem ser usados para dar suporte e melhorar o processo de desenvolvimento de aplicativos
Comunidade: Como uma estrutura popular de código aberto, o React Native tem uma grande comunidade de desenvolvedores que trocam conhecimentos
Exemplo de resposta:
O React Native é usado para desenvolver aplicativos móveis para iOS e Android, enquanto o ReactJS é usado para criar aplicativos da Web em um navegador da Web.
Ambos usam componentes XML JavaScript reutilizáveis, mas a sintaxe varia: enquanto o React Native usa componentes de visualização de aplicativos, como e , o ReactJS usa tags HTML, como e .
Exemplo de resposta:
Os aplicativos híbridos são desenvolvidos para serem usados em todas as plataformas, enquanto os aplicativos nativos são desenvolvidos para uma plataforma específica. O React Native é usado para o desenvolvimento de aplicativos híbridos.
Embora os aplicativos híbridos sejam mais rápidos de desenvolver e normalmente exijam menos manutenção do que os aplicativos nativos, eles podem ter um desempenho um pouco pior do que seus equivalentes nativos.
Exemplo de resposta:
O React Native é uma ótima opção para desenvolver um aplicativo híbrido que não exija desempenho extremamente alto.
A compatibilidade entre plataformas significa que as equipes de desenvolvimento podem economizar muito tempo ao usar o React Native em comparação com uma estrutura nativa.
No entanto, ele pode não ser adequado ao projetar aplicativos complexos ou se os desenvolvedores ainda não estiverem bem familiarizados com o código React.
Exemplo de resposta:
Os componentes são os blocos de construção do React Native; quando combinados, eles formam o aplicativo como um todo. Alguns dos componentes mais comuns são:
View, usado para exibir todo o layout do aplicativo
Text, usado para exibir texto
TextInput, usado para inserir texto
ScrollView, usado para inserir um contêiner de rolagem
StyleSheet, usado para inserir objetos de estilo
Image, usado para renderizar imagens
Button, usado para inserir botões
Exemplo de resposta:
O desenvolvimento orientado por componentes (CDD) é uma metodologia de desenvolvimento em que o processo de construção é ancorado em componentes em vez de objetos. Os componentes são fracamente acoplados e cada um tem sua própria finalidade.
Quando reunidos, os componentes (botões, barras de navegação, imagens) formam o programa como um todo. O React Native é um framework orientado por componentes.
Exemplo de resposta:
As props fornecem propriedades aos componentes inseridos em um programa, o que torna os componentes modificáveis e personalizáveis. Por exemplo, o mesmo componente pode ser usado em diferentes partes de um aplicativo. Quando usamos props, podemos alterar a aparência ou o comportamento do componente.
Exemplo de resposta:
O AsyncStorage é o módulo de armazenamento não criptografado de valor-chave do React Native que permite aos desenvolvedores armazenar dados para uso off-line. Normalmente, ele é usado para armazenar dados quando um aplicativo não está vinculado a um serviço de nuvem ou quando recursos específicos exigem armazenamento de dados.
Exemplo de resposta:
Nos aplicativos React Native, o Flexbox é usado para fornecer um layout consistente em diferentes tipos de tela. O algoritmo Flexbox ajuda a estruturar o posicionamento de diferentes componentes e a criar uma interface de usuário responsiva para o usuário final.
Exemplo de resposta:
No React Native, o estado se refere às informações sobre uma propriedade em um determinado momento. Ao contrário das props, o estado é mutável; ele pode mudar. Normalmente, isso ocorre quando um usuário interage com o componente.
Por exemplo, se seu aplicativo tiver um formulário de preenchimento que os usuários são convidados a preencher, o estado desse componente mudará quando o usuário digitar algo.
Exemplo de resposta:
No React Native, você pode importar componentes do zero ou também importar componentes prontos de outro arquivo.
Para importar um componente, você precisa digitar <import { Component } from 'react-native'>, alterando a palavra entre colchetes, dependendo do tipo de componente que deseja importar.
Exemplo de resposta:
Embora o React Native seja geralmente usado com JavaScript, a compatibilidade com outras linguagens de programação, incluindo Python, C++ e C, também é possível por meio da Java Native Interface (JNI) da estrutura.
Exemplo de resposta:
No React Native, o código JavaScript é executado por meio de dois mecanismos:
JavaScriptCore é usado em simuladores de iOS e emuladores de Android; praticamente todas as operações são executadas por meio desse mecanismo
V8 é usado quando a depuração do Chrome está sendo realizada
Você pode usar essas perguntas intermediárias da entrevista sobre o React Native para cargo de desenvolvedor React Native de nível intermediário, em que o candidato já tem alguns anos de experiência.
Exemplo de resposta:
Como em qualquer estrutura de software, o React Native tem seu conjunto de desvantagens. Entre elas estão:
Não natividade: O React Native não é uma solução nativa, o que significa que seus aplicativos podem ser um pouco mais lentos do que os nativos
Problemas de depuração: O React Native é desenvolvido usando Javascript, Objective-C, Java e C ou C ++, o que pode dificultar a depuração
Gerenciamento de memória: As limitações de memória significam que o React Native não é adequado para o desenvolvimento de aplicativos com uso intensivo de computação
Baixa segurança: O design de código aberto do React Native deixa os aplicativos mais expostos a ameaças, o que é especialmente perigoso para aplicativos que contêm informações confidenciais, como serviços bancários
Curva de aprendizado: O React Native é uma das estruturas de software mais difíceis de aprender, especialmente para desenvolvedores iniciantes
Exemplo de resposta:
Alguns dos problemas de desempenho mais comuns no React Native incluem:
Alto uso da CPU: O descarregamento de funções complexas para o thread JavaScript pode causar problemas de desempenho
Vazamento de memória: As informações podem ser perdidas na ponte durante a transferência do domínio primário para o domínio React Native, especialmente em aplicativos Android
Navegação lenta: A ponte de vários threads também pode causar tempos de navegação mais lentos
Exemplo de resposta:
Há várias técnicas que podem ser usadas para otimizar o desempenho de um aplicativo no React Native, tais como:
Remover todas as instruções do console
Redimensionar e diminuir a escala das imagens
Armazenar imagens em cache internamente
Comprimir ou converter dados brutos Dados JSON
Usar a divisão de código para listas grandes
Programar animações
Remover bibliotecas e recursos desnecessários
Exemplo de resposta:
O processo de renderização de código no React Native é o seguinte:
Quando o aplicativo é aberto, o thread principal (ou thread da interface do usuário) inicia a execução carregando os pacotes JavaScript
Depois que o código JavaScript é carregado com êxito, o thread principal o envia para o segundo thread JS, onde mais cálculos são realizados
Quando o React Native inicia a renderização, o algoritmo do reconciliador gera um DOM virtual ou layout, que é então enviado para um terceiro thread, chamado de shadow thread
O shadow thread calcula um novo DOM e envia as características do layout para o thread principal da interface do usuário
O thread da interface do usuário renderiza o DOM recebido para exibição no aplicativo móvel
Exemplo de resposta:
A ponte atua como uma camada de transporte entre os módulos JavaScript e Native. No processo de renderização:
A ponte primeiro recebe a resposta do usuário para abrir o aplicativo do módulo nativo
Em seguida, ela passa a carga serializada para o módulo JavaScript
Depois que o evento é processado e um DOM virtual é gerado no módulo JavaScript, a ponte recebe a resposta em lote serializada
A ponte passa a resposta em lote serializada para o módulo nativo para renderização final
Exemplo de resposta:
No React Native, o gerenciador de interação é usado para adiar a execução de uma função até que uma "interação" especificada tenha sido concluída.
Isso é importante, pois o React Native tem um único thread por natureza, o que significa que as animações enfileiradas na interface do usuário podem ficar congestionadas. O gerenciador de interação ajuda com esse problema e garante que as animações sejam executadas sem problemas de maneira programada.
Exemplo de resposta:
Fabric é um tipo moderno de arquitetura que foi criado pela primeira vez em 2018 e tem como objetivo resolver alguns dos problemas de desempenho do React Native. O Fabric moderniza a camada de renderização da estrutura, permitindo que tarefas de prioridade especificada sejam executadas de forma síncrona e, portanto, mais rapidamente.
Exemplo de resposta:
No React Native, podemos realizar a depuração de duas maneiras:
Depuração remota
Para iOS, abra o menu e selecione 'Debug remotely' (Depurar remotamente)
Para Android, abra o menu e selecione "Debug remotely"
O botão "Debug remotely" iniciará a ferramenta de depuração do Chrome Developer Tools
Depuração no aplicativo
Para iOS, execute o comando
Para Android, execute o comando
Esses comandos iniciarão as ferramentas de depuração no aplicativo no sistema operacional relevante
Exemplo de resposta:
A inserção de texto básico em aplicativos React Native é tratada pelos componentes Text e TextInput. O TextInput permite que os usuários digitem no aplicativo. Podemos implementá-lo usando a seguinte sintaxe: <import { View, Button, StyleSheet } from “react-native”>.
Exemplo de resposta:
Há vários truques úteis para otimizar o desempenho das imagens no React Native. Entre eles estão:
Uso de ferramentas de cache de imagens
Uso de formatos PNG ou WEBP em vez de JPEG
Uso de imagens menores
Redução do número de renderizações
Exemplo de resposta:
No React Native, os timers permitem que os desenvolvedores manipulem a ordem em que os eventos de um programa ocorrem. Há quatro tipos diferentes de timers, cada um com uma finalidade diferente:
Timeout implementa um atraso
Interval permite que ações repetidas ocorram em determinados intervalos
Immediate permite que ações ocorram o mais rápido possível
Animation permite que as animações sejam exibidas quando o programa estiver pronto para renderizar quadros
Exemplo de resposta:
Os hooks permitem que os desenvolvedores se "conectem" a componentes existentes e acessem seus recursos de estado e ciclo de vida. Anteriormente, esses recursos não eram acessíveis para uso em outro lugar. Com os hooks, os desenvolvedores agora podem acessar os recursos de estado e ciclo de vida de um componente sem precisar escrever uma nova classe.
Exemplo de resposta:
Podemos criar botões básicos usando a seguinte sintaxe: <import { View, Button, StyleSheet } from "react-native">. Os botões básicos suportam um nível mínimo de personalização e podem ser modificados usando TouchableOpacity ou TouchableWithoutFeedback.
Exemplo de resposta:
A atualização rápida permite que os desenvolvedores obtenham feedback quase instantâneo sobre as alterações recentes no aplicativo. Quando a opção "Enable fast refresh" (Ativar atualização rápida) no menu do desenvolvedor é ativada, todas as novas edições no programa ficam visíveis em poucos segundos para facilitar a avaliação.
Você pode usar as perguntas avançadas da entrevista abaixo ao contratar um desenvolvedor sênior no React Native com vários anos de experiência.
Exemplo de resposta:
A maioria dos dados do React Native é armazenada no Async Storage. Como uma forma de armazenamento local não criptografada, ela não é adequada para armazenar dados confidenciais, como tokens e senhas.
Como alternativa, o React Native Keychain oferece uma forma segura de armazenamento que também funciona de forma semelhante ao Async Storage. No iOS, o armazenamento Keychain pode ser usado para proteger dados confidenciais, enquanto os desenvolvedores do Android podem usar o Facebook Conceal e o Android Keystone.
Exemplo de resposta:
Quando ocorrem problemas de desempenho, há várias soluções disponíveis para os desenvolvedores. Por exemplo, aqui estão algumas soluções para alguns problemas comuns de desempenho:
Alto uso da CPU: A otimização de aplicativos por meio da compactação de dados, da eliminação de renderizações desnecessárias e do uso de armazenamento em cache melhorará a velocidade de desempenho
Vazamento de memória: O vazamento de memória pode ser evitado por meio da depuração, evitando o uso de instruções de console e verificando regularmente o código em busca de inconsistências
Navegação lenta: O uso do React Navigation em vez de outras ferramentas de navegação, como o Navigator ou o NavigationExperimental, ajudará a amenizar os problemas de navegação
Exemplo de resposta:
Cerca de 85% do código do React Native é multiplataforma, o que significa que a maioria dos processos é a mesma no iOS e no Android. No entanto, há algumas pequenas diferenças. Entre elas, estão:
O desenvolvimento do iOS usa o Mac e o Xcode, enquanto o desenvolvimento do Android usa o Android SDK e um emulador
Os plug-ins de terceiros que não oferecem funcionalidade nativa precisarão ser usados de forma diferente
O processo de ponte pode ser ligeiramente diferente ao desenvolver aplicativos complexos
Exemplo de resposta:
Várias etapas podem ser seguidas para otimizar as animações no React Native. Elas incluem:
Usar lazy loading para que os componentes sejam renderizados somente quando estiverem em uso
Remover os valores animados do estado para evitar sobrecarga desnecessária
Usar shouldComponentUpdate para acelerar o processo de renderização rastrear o processo de renderização
Usar useNativeDriver para Android para transferir todo o trabalho de animação para a camada nativa
Exemplo de resposta:
Use uma integração de relatório de erros de terceiros para obter um relatório de erros e diagnosticar melhor o bug. Esses plug-ins ajudam a coletar, organizar e analisar relatórios de falhas e também fornecem correções rápidas para que o aplicativo possa voltar a funcionar. Os plug-ins populares de relatório de erros incluem:
Bugsnag
Crashlytics
Sentry
TestFairy
Rollbar
Exemplo de resposta:
O Redux é uma ferramenta útil de gerenciamento de estado. Ele pode ser implementado seguindo estas etapas:
Instale os pacotes Redux necessários on-line
Crie uma pasta Redux na raiz do aplicativo
Na pasta Redux, adicione três arquivos: actions.js, reducer.js e store.js
No novo arquivo reducer.js, importe de 'redux'
No arquivo store.js, importe de 'redux' para criar a loja
Importe a loja para o aplicativo React Native
Exemplo de resposta:
No React Native, TouchableOpacity é um wrapper usado para alterar a transparência de um botão. Quando usado em um botão, a opacidade é reduzida em resposta ao toque, permitindo que os usuários vejam o plano de fundo sempre que o pressionarem.
Exemplo de resposta:
O Flexbox geralmente funciona da mesma forma no React Native e no CSS na Web. No entanto, há algumas pequenas diferenças nos valores. Elas incluem:
O valor padrão no React Native é coluna, enquanto o valor padrão para CSS é linha
O valor padrão no React Native é flex-start, enquanto o valor padrão para CSS é stretch
O valor padrão no React Native é 0, enquanto o valor padrão para CSS é 1
Exemplo de resposta:
Um vazamento de memória ocorre quando a memória que não é mais necessária para um aplicativo permanece no aplicativo em vez de ser devolvida ao sistema operacional. Essa é uma das causas mais comuns de problemas de desempenho.
Em teoria, o gerenciamento de memória é feito automaticamente pelo coletor de lixo. Entretanto, esse processo ainda está sujeito a erros. As ferramentas de depuração podem ser usadas para identificar problemas de vazamento de memória. Algumas das causas mais comuns para os problemas são:
Timers e listeners em componentDidMount
Estilos em linha
Vazamentos de escopo de fechamento
O uso de console.log
A depuração pode identificar a raiz do vazamento de memória; uma vez removida, o problema deverá ser resolvido.
Exemplo de resposta:
Há várias técnicas para otimizar o desempenho dos itens FlatList. Por exemplo, podemos:
Evitar usar imagens HD 1080P
Otimizar a propriedade maxToRenderPerBatch
Usar a propriedade getItemLayout
Usar a propriedade keyExtractor
Usar menos exibições
Otimizar a propriedade windowSize
Exemplo de resposta:
O live reloading no React Native atualiza todo o aplicativo quando um arquivo é alterado, enquanto o hot reloading atualiza apenas os arquivos que foram alterados.
Quando o hot reloading é usado em um aplicativo, o estado permanece o mesmo e o desenvolvedor retorna à página em que começou. O oposto é verdadeiro para o live reloading.
Exemplo de resposta:
O ScrollView carrega todos os itens de dados em uma tela para fins de rolagem. Todos os dados são armazenados na RAM, o que pode causar problemas de desempenho em grandes quantidades de dados.
O FlatList exibe somente os itens que estão sendo mostrados na tela no momento (10 por padrão), evitando assim qualquer problema de desempenho.
Portanto, é melhor usar o FlatList para grandes conjuntos de dados, enquanto o ScrollView pode ser usado para conjuntos de dados menores.
Exemplo de resposta:
Os vetores são parte integrante do design de aplicativos no React Native. Eles podem ser instalados inicialmente com a execução do seguinte comando: . Os ícones vetoriais selecionados podem então ser importados para o aplicativo React Native para uso.
Exemplo de resposta:
No React Native, setNativeProps é usado para alterar um componente diretamente em um nó do DOM, e não no estado do aplicativo. Embora isso possa ajudar a resolver problemas, também torna o código mais difícil de trabalhar no futuro.
Ele é considerado uma solução de backup para problemas de desempenho relacionados a animações e só deve ser usado se setState e shouldComponent não resolverem o problema.
A realização de uma entrevista eficaz é uma etapa importante ao contratar um novo desenvolvedor de aplicativos, mas vários outros estágios devem vir antes disso. A natureza técnica do React Native significa que é essencial testar primeiro a proficiência do candidato.
Por exemplo, você pode criar uma tarefa cronometrada do React Native para os candidatos concluírem, como identificar problemas com uma amostra de código. Adapte a tarefa às suas necessidades comerciais sempre que possível.
Como alternativa, você pode usar o teste de React Native da TestGorilla para avaliar rapidamente as habilidades e os conhecimentos dos candidatos e selecionar os melhores candidatos, que podem ser convidados para uma entrevista. Isso permite simplificar e otimizar a etapa de triagem e avaliar a experiência de um candidato, mesmo que você não tenha conhecimento de programação.
A realização de uma avaliação de habilidades no início do processo de seleção lhe ajudará a identificar os candidatos mais qualificados. Assim, você pode dedicar mais tempo aos candidatos pré-selecionados: em vez de realizar dezenas de entrevistas e avaliações de programação, você pode se concentrar apenas em alguns candidatos selecionados.
Isso permite que você compare com confiança a experiência dos candidatos com as necessidades da sua empresa para avaliar se eles serão uma boa opção.
Usando as perguntas da entrevista acima juntamente com avaliações de habilidades, você pode identificar os melhores candidatos para sua empresa. Com o desenvolvedor React Native certo em sua equipe, você poderá competir no mercado de aplicativos móveis, que está em constante evolução e é extremamente lucrativo, agora estimado em US$ 700 bilhões.
Lembre-se de adaptar suas perguntas ao nível de experiência correto e aos requisitos do seu negócio. O processo de seleção não se trata de encontrar o melhor desenvolvedor React Native para todos os fins, mas aquele que é a combinação certa para as necessidades de sua empresa.
O teste de React Native da TestGorilla pode ajudar você a encontrar os melhores desenvolvedores React Native rapidamente e sem vieses. Comece a usar gratuitamente hoje mesmo e comece a tomar melhores decisões de contratação.
Em minutos, você cria avaliações para selecionar as pessoas candidatas ideais, economizar tempo e contratar profissionais excelentes.
Sem spams. Cancele a assinatura quando quiser.
Com nossos testes, fica muito fácil encontrar a pessoa certa para sua vaga e tomar decisões acertadas e justas durante todo o processo.