Um programador Android comum trabalhou duro para resumir oito entrevistas com grandes e pequenas fábricas, coletando uma onda de sistema de conhecimento expandido!

Escreva na frente

(O texto completo tem cerca de 4 mil palavras)
Um total de 8 empresas (2 pequenas, 4 médias, 2 grandes fábricas)

Todos os pequenos foram escolhidos, 3 de 4 em uma rodada e 1 em três rodadas. Os dois grandes falaram sobre salário.

As pequenas empresas tendem a se concentrar mais nos negócios e também se concentram nos negócios durante as entrevistas, como o que fizeram, o plano geral, quais bibliotecas são usadas e os princípios das bibliotecas.

Basicamente, eles se concentrarão no processamento de imagem, pacote de rede e visualização personalizada.

Dachang vai começar do negócio e se aprofundar nos princípios e pontos de conhecimento relacionados, focando especialmente na parte do princípio, onde existem certos requisitos para a leitura normal do código-fonte.

Ou pergunte diretamente se você tem algum conhecimento do código-fonte xxx.

Por exemplo, um mecanismo de manipulador, porque envolve muitos lugares e é fácil de implantar, se você quiser uma resposta perfeita, realmente não pode ser feito uma ou duas vezes.

Recomenda-se que sempre que a entrevista for finalizada, o conteúdo da entrevista seja relembrado e registrado a tempo. Atualmente, isso não é para vazar e perder perguntas. No futuro, gabar-se não tem sentido.

O objetivo é revisar e aperfeiçoar sua resposta.

índice

  • Retomar a escrita
  • Perguntas da entrevista original
  • Escovagem de algoritmo
  • resumir

Retomar a escrita

É altamente recomendável que você coloque seus próprios pontos fortes e destaques na capa do seu currículo.Todo mundo está ocupado e irritado, para que as pessoas vejam as vantagens rapidamente e sejam amigáveis ​​com ambas as partes.

Porque estou interessado na otimização de desempenho do Android, e normalmente passo muito tempo trabalhando aqui, vou destacar em meu currículo que fiz otimização de memória e sou proficiente no uso de xxx, e o desempenho de memória melhorou xxx.

(Como o conteúdo aqui é controlável, se o entrevistador estiver interessado em você, você também pode preparar a resposta com antecedência)

Como escrever a experiência do projeto? Recomenda-se escrever de acordo com o que é, o que é feito e quais indicadores de dados estão apoiando.

Por exemplo, fiz o projeto xx, responsável pelo módulo xx, e usei o framework xxx, que pode cooperar com xx para fazer xxx, o que melhora a eficiência em xxx%

Entrevista-byte

Rodada de bytes

1. Fale primeiro sobre o seu currículo.

2. Fale sobre otimização de desempenho.Eu falarei sistematicamente sobre lag, perda de peso, memória, falha e outras experiências de otimização.

3. Qual é a diferença entre sincronizado e volátil?
Aqui pode ser uma resposta sistemática, principalmente da perspectiva de JMM para responder e, finalmente, aprofundar a diferença entre o nível de bytecode. Como há uma diferença no escopo da modificação, há a próxima questão.

4. Qual é a diferença no efeito do objeto de bloqueio.

5. Fale sobre o mecanismo Handler.
Esta pergunta foi feita demais, então certifique-se de verificar o código-fonte.
A resposta chave é MessageQueue, inclusive quando está ocioso e bloqueado.
Discussão divergente sobre ThreadLocal e IdleHandler relacionados a threads

6. Há uma questão de design. Quando seu provedor de serviços tiver um problema, crie um plano para a disponibilidade da rede.
Provavelmente resposta de HttpDNS, tolerância a desastres de nome de domínio e assim por diante.

7. Desenhe um plano, o apk foi enviado, o código java é o mais recente, mas o arquivo so emitido pelo subcontratado é uma versão antiga, como fazer um plano compatível para garantir a compatibilidade e disponibilidade.
Não há resposta aqui e esqueci como responder.

8. Mecanismo de carregamento de classe Java.

Esta é uma pergunta de conceito básico. Se você não respondeu bem, o mecanismo de carregamento pai da resposta.
Em seguida, leva à diferença entre PathClassLoader e DexClassLoader, o processo de carregamento de um dex em uma classe java.

9. Um problema de algoritmo.

Byte dois round

1. Fale sobre currículos.

2. Otimização de desempenho, expandida para falar sobre atraso e memória.

3. A questão da estrutura de dados, o algoritmo de perturbação do hashCode, envolve um número 31. De onde vem esse 31?

4. O campo de atributo estático da classe, como public static int a = 1, é atribuído quantas vezes?
Isso requer uma compreensão do mecanismo de carregamento da classe.

5. Várias atividades vinculam um serviço, uma atividade destrói e perguntam sobre o serviço.
Aqui está para perguntar sobre o ciclo de vida do serviço e examinar a diferença entre bind e start.

6. O modo decorador é diferente do modo proxy.
Examine os padrões de design comuns

7. implementação da lógica de cache okhttp.
Achei que fosse sobre cache de link e cache de io. O que eu respondi foi a reutilização do pool de conexão e a reutilização de io do okio.
Mais tarde, quando o lembrete era cache, respondi CacheInterceptor e sua implementação de código-fonte.

8. A diferença entre a confirmação e a aplicação de SharedPreference.

9. O problema de desempenho de SharedPreference.
O anr de apply tem um campo que bloqueia o thread principal e precisa limpar a fila queuedWork.

10. Segurança do thread SharedPreference, e se o processo é seguro, quem é o alvo do bloqueio SharedPreference?

11. Objeto de bloqueio sincronizado, implementado na montagem. A compilação de voláteis.

12. O volátil pode modificar a atomicidade da garantia booleana?

13. Que tipos de animações o Android tem.

14. Projete perguntas, projete uma biblioteca de relatórios de dados de pontos enterrados, quais módulos são necessários e quais interfaces são fornecidas.

15. Problema algorítmico, modelo de consumo de produção.

16. A correlação de ConcurrentHashMap.
Incluindo o princípio de implementação, método put, árvore, expansão, quem o herdou e como os intervalos restantes percebem quando expandem.

17. A diferença entre a assinatura de empacotamento do Android v1, v2 e v3.

Byte três rodadas

1. A diferença entre o modo decorador e o modo adaptador. Dê um exemplo de um aplicativo em Android ou java.
2. As vantagens e desvantagens dos singletons.
3. A arquitetura foi feita?
4. Fale sobre o projeto, as coisas no projeto que melhor refletem sua capacidade.
5. Como você costuma aprender.
6. Planejamento de carreira futura
7. Motivos para demissão
8. Plug-in. Você já fez plug-in? Quais as soluções convencionais que você conhece?
9. Questões algorítmicas.

Como o terceiro round estava suspenso, eu saí e mudei de posição para lutar novamente.

Byte Supper Round (esta rodada durou 175 minutos, o que está bem guardado na memória)

Tópico básico

1. Fale sobre as otimizações de desempenho que foram feitas em geral.

2.
Interrupção da interface Comece pelo código-fonte do ViewStub para falar sobre todo o processo de LayoutInflate,
incluindo análise xml, como analisar tags e os detalhes nos quais as tags especiais estão dentro.

3. Quais são os aspectos demorados da análise, reflexão, leitura de arquivo e análise de xml.

4. Como otimizar este processo: xml é gerado como um arquivo de classe durante a compilação, então este é o estágio de compilação do gradle para fazer isso.

5. O problema do checkthread, desde o Window até a criação de ViewRootImpl, e a relação entre eles.

A descrição acima está relacionada ao desenho e depois à renderização.

6. O princípio do diagrama vetorial.

7. Como surgiu a tela?

8. A relação entre Janela e Visualização.

9. O princípio da aceleração de hardware.

10. Mecanismo de buffer duplo.

11. Razões para perda de quadro.

12. Cálculo do número de quadros.

13. Ferramentas de projeto para detectar o desenho excessivo, que devem ser específicas para o View.

14. Princípio e propósito do Blockcanary.

15. Otimização deslizante de Listview, por exemplo, um emoji pode ser renderizado com TextView ou ImageView, o que é melhor.

16. Por que o Toast é exibido sem permissão.

17. O motivo para Window BadTokenExcetion.

18. Como realizar a janela flutuante.

Iniciar aceleração

1. Como fazer a aceleração de inicialização do aplicativo

Minha resposta disse que o uso de IntentService é um mecanismo de carregamento assíncrono. Mas não é suficiente.

2. Oriente-me para iniciar o processo de inicialização do aplicativo para ver se consigo encontrar uma maneira de iniciar o processo.

3. A implementação interna do zigoto, você conhece o zygote.fork?

4. Qual é o método de comunicação entre o zigoto e o ams.

5. O que o mHandler faz durante todo o processo de inicialização.

6. Projete uma ferramenta para monitorar o tempo de inicialização e a granularidade é necessária no nível do método.

Relacionado com a memória

1. Fale sobre vazamentos de memória. Pegue a classe interna anônima do manipulador como exemplo. Qual é a corrente de vazamento.

2. O que looper.prepare faz.

3. Implementação de ThreadLocalMap.

4. Princípio do Leakcanary.

5. Por que você precisa verificar o jitter e para que serve?

6. Por que há instabilidade.

7. Existem vazamentos online sobre como coletar, investigar e projetar soluções.

estabilidade

1. Metodologia para resolver bugs de estabilidade online.

2. Fale sobre um caso de solução de bugs online que podem refletir os pontos positivos.

3. Dê um caso específico, deixe-me analisar o motivo no local.

Examine principalmente a maneira de pensar.

4. Como coletar travamentos de java.

5. Como coletar travamentos nativos.

6. Com a estrutura de dados thread-safe, ConcurrentHashMap modificaráCountException?

ANR relacionado

1. Como resolver problemas comuns de anr.

2. Anr incomum, como MessageQueue.nativePollOnce, é normal, como localizá-lo, se estiver online, como coletá-lo.

3. Razões para ANR

4. IntentService fará ANR, falará sobre implementação interna.

Problemas relacionados ao Keep-Alive

1. O código-fonte do mecanismo do processo de eliminação.
2. Prioridade do processo.
3. Como aumentar a prioridade.
4. Meios comuns de se manter vivo.

Estou aqui para me concentrar no princípio de manter vivo de Tim. Há também o princípio da biblioteca de terceiros Leonic.

APP emagrecimento relacionado

1. Princípio andRes.
2. Código-fonte do Proguard.
3. Redex do Facebook, princípio de bytes do bytex.
4. Princípio Multidex.
5. Muitos pacotes de recursos, como perder peso.

Perguntado sobre a biblioteca do github que mantenho

1. Princípio de abertura anti-múltipla
2. Princípio do simulador de detecção
3. Verifique a autoridade de root, se for uma rom auto-editada, como lidar com ela.

Falei sobre a experiência no currículo

1. O tempo inicial de contentProvider.

A principal questão aqui é me perguntar qual é a diferença entre o LeakCanary 1. * e 2. *.

2. A diferença entre LocalBroadcast e Broadcast.

3. O princípio de xposed.

4.beforeMethodHooked, o que o xposed fez internamente

5. A implementação do código-fonte da legenda sem estrutura de gancho raiz.
Não me lembro bem, parece que estou falando sobre a mudança do ponteiro do método nativo.

6. Um algoritmo.

7. Projete uma biblioteca de pontos enterrados. Quais módulos são necessários.

8. Projete um componente para contar o tempo de recepção da atividade e o tempo de recepção do fragmento.

Esqueci de gravar o replay na entrevista de acompanhamento de BYTE e não consigo me lembrar agora. Essa rodada de entrevistas me tirou do sério de qualquer maneira.

Finalmente, entra na fase de negociação salarial. Eu simplesmente não concordo, haha.

Entrevista-Goose Factory

A última é a fábrica de bonecas Yuehai que eu sempre quis ir.

Não vou entrar em detalhes sobre a rodada específica de entrevistas aqui. Os tópicos são na verdade esses tópicos, então vamos nos concentrar em fornecer orientações para o aprendizado.

1. Fale sobre currículos e otimize o desempenho.

2. O processo de desenho de vista deve ser tão detalhado quanto possível e abrangente, o melhor.
Por causa da experiência anterior da entrevista com Byte, falei muito sobre view aqui.

Provavelmente começando de ActivityThread, para a
implementação interna de Window, WindowManager, ViewRootImpl, setContentView, LayoutInflater.

Envie para requestLayout, checkThread, scheduleTraversals,
buffer duplo de mensagem de barreira de sincronização , sinal de vsync e, finalmente, performSechdules ...

Na verdade, estou me perguntando não apenas para escrever a interface, mas também para aprender o código-fonte.
Muitos problemas estranhos de negócios são realmente resolvidos lendo o código-fonte.

3. Solicite a otimização da rede. Quando a largura de banda da rede é grande o suficiente e o sinal é bom, qual é a velocidade de download de arquivos grandes?

Abra vários links, wi-fi + 4G ao mesmo tempo, divida.
Na camada de protocolo, vá para udp e execute a verificação de integridade localmente.Lembro de ter feito isso no cliente qq.
A ideia do m3u8 desce.

4. Medidas de segurança do Apk, quando o apk foi quebrado, como lidar com isso?
Eu respondi que com a ajuda das idéias de assinatura v1, a verificação local do arquivo md5 é feita. Ou com a ajuda de v3, assinaturas contínuas.

5. A diferença entre os dois padrões de design. Eu esqueci quais dois.

6. Três questões algorítmicas

O primeiro tópico é escrever um código que esteja vinculado a um deadlock. Fale sobre a maneira de resolver o impasse. A diferença entre os objetos de bloqueio.

O primeiro personagem a aparecer.

Os elementos da matriz são combinados para encontrar o valor máximo.

7. Quando o tópico em checkThread é atribuído?

8. Diga-me o que é um certificado digital.

9. Resolva o caso real de instabilidade de memória.

10. Casos reais de redução de bugs.

11. Projete um plano para lidar com dados sujos recebidos pelo aplicativo do servidor.

12. Projete um álbum de fotos na nuvem.

13. O princípio do mecanismo classLoader.

14. A implementação subjacente da aceleração de hardware.

15. Problemas relacionados ao sistema operacional.

16. Como lidar com questões multilíngues.

17. Problemas relacionados à máquina virtual Jvm, especificamente esquecidos.

18. Relacionado ao planejamento de carreira.

Enfim, todos são bem-vindos à fábrica de ganso, uma coisa não é se gabar, os colegas aqui são muito bons.

Sobre o algoritmo

Para dizer mais algumas palavras, o cliente deve aprender o algoritmo, não que o algoritmo seja inútil, você sabe o que é travessia de árvore, você pode entender o processo de análise de viewTree.

E quando todos estiverem em um nível diferente, use algoritmos para retornar ao mesmo nível para ver quem tem uma lógica forte e um bom estilo de codificação. Isso é bom para a triagem de entrevistas.

Todo mundo diria: devo usar números altos para fazer compras? Mas se não o fizer, é uma perda na entrevista.

O tópico, meu algoritmo, mostra o caminho.

Comece com uma oferta: https://cyc2018.github.io/CS-Notes/#/README

Há muitas perguntas nele. Você pode ver várias soluções na área de comentários do Likou. É recomendável ler mais soluções para experimentar ideias diferentes.

Para resolver as questões, você deve escrever o código sozinho, depurar e executar.

Você mesmo pode criar uma pequena biblioteca e solicitar que a envie.

A propósito, também revisei padrões de design comuns.

Depois de quase terminar a classificação básica, travessia, ganância e pensamento ideal local, haverá uma centena de perguntas.

Neste momento, diante da entrevista, estou familiarizado com ela. Eu realmente não recomendo usar uma abordagem surpresa; devemos fazer um plano de longo prazo para escrever perguntas.

resumir

Peguei relacionado a lock, thread-related, mecanismo Handler e outros conhecimentos relacionados ao Android, comecei com o tópico e fiz um índice que costumo estudar de forma progressiva e divergente.

Índice de aprendizado de sete assuntos do Android Advanced Architect

Existem tantos pontos de conhecimento no desenvolvimento do cliente e ainda há tão poucas coisas na entrevista. Portanto, não há outros truques para a entrevista, apenas para ver o quão bem você se prepara para esses pontos de conhecimento. Portanto, quando você sai para uma entrevista, é bom ver em que estágio você chegou em sua avaliação.

Direção de aprendizagem do sistema:

  • Habilidades essenciais para arquitetos: genéricos Java aprofundados + anotações em linguagem simples + programação simultânea + transmissão e serialização de dados + princípios de máquina virtual Java + reflexão e carregamento de classe + proxy dinâmico + E / S eficiente
  • IU avançada do Android e código-fonte do FrameWork: promoção da IU avançada + análise do kernel do Framework + kernel do componente Android + persistência de dados
  • 360 ° ajuste de desempenho geral : ideias de design e otimização da qualidade do código + otimização do desempenho do programa + otimização da eficiência de desenvolvimento
  • Interpretação de ideias de design de estrutura de código aberto: design de reparo a quente + interpretação de estrutura de plug-in + design de estrutura de componente + estrutura de carregamento de imagem + design de estrutura de acesso à rede + design de estrutura de programação responsiva RXJava + design de arquitetura IOC + componente de arquitetura Android Jetpack
  • Desenvolvimento do módulo NDK: sistema de conhecimento básico NDK + processamento de imagem subjacente + desenvolvimento de áudio e vídeo
  • Mini programa WeChat: Introdução ao mini programa + Desenvolvimento de IU + Operação de API + Docking WeChat
  • Desenvolvimento híbrido e Flutter: combate de projeto Html5 + Flutter avançado

Eu também resumi um índice de estruturas de dados comuns

Índice de aprendizagem Java

A próxima etapa é aprofundar a inicialização do aplicativo, renderização, AMS e outras questões para fazer um índice centralizado.

Índice de aprendizagem do framework Android

Minha própria leitura de código-fonte do Android

Índice de aprendizagem de código-fonte Android

"A linguagem de programação é a forma como o programador se expressa, e a arquitetura é a percepção do programador do mundo." Portanto, se os programadores desejam compreender e aprender rapidamente a arquitetura, a leitura do código-fonte é essencial. Ler o código-fonte é resolver problemas + entender as coisas e, mais importante: ver as idéias por trás do código-fonte; os programadores dizem: leia milhares de linhas de código-fonte e pratique milhares de maneiras.

Notas de leitura orientadas para entrevistas organizadas de bibliotecas de terceiros

O conteúdo é detalhado, cobrindo várias bibliotecas de código-fonte relacionadas ao desenvolvimento do Android. Não só analisa o código-fonte de forma simples, mas também registra os problemas encontrados pelos grandes na hora de usá-lo e fornece soluções.

Ele é dividido em dez capítulos, incluindo uma análise detalhada do código-fonte do Glide, LeakCanary, ARouter, EventBus e Retrofit, bem como seu uso e alguns problemas que são fáceis de encontrar.

O conteúdo acima é gratuito para compartilhar com todos, amigos que precisam da versão completa, clique aqui para ver todo o conteúdo .

Acho que você gosta

Origin blog.csdn.net/weixin_44339238/article/details/112247188
Recomendado
Clasificación