Java Resolução Completa Pergunta Entrevista Comum

📚 Java Fundamentação

1. Java Característica Têm Quais?

Compreender característica núcleo linguagem Java

  • Orientação Objeto:Suporte encapsulação、herança、polimorfismo característica
  • Independência Plataforma:Write Once, Run Anywhere (WORA)
  • Gerenciamento Memória Automático:Mecanismo coleta lixo liberta memória automaticamente
  • Suporte Multithread:Mecanismo thread incorporado, facilita programação concorrência
  • Segurança Forte:Fornece verificação tipo, tratamento exceção etc. mecanismo segurança
  • Característica Dinâmica:Verificação tipo tempo execução e carregamento dinâmico

2. JDK、JRE、JVM Qual É Diferença?

Compreender estrutura três camada ambiente execução Java

  • JVM (Java Virtual Machine):Máquina virtual, executa bytecode computador abstrato, realiza característica multiplataforma
  • JRE (Java Runtime Environment):Ambiente execução, contém JVM e classe biblioteca necessário execução
  • JDK (Java Development Kit):Kit desenvolvimento, contém JRE + compilador + ferramenta depuração etc. ferramenta desenvolvimento
  • Relação Inclusão:JDK > JRE > JVM

3. O Que É Bytecode?Por Que Java Pode Multiplataforma?

Compreender profundamente princípio mecanismo multiplataforma Java

  • Definição Bytecode:Código intermediário gerado compilação código fonte Java, extensão arquivo .class
  • Princípio Multiplataforma:Código fonte Java → bytecode → execução plataforma diferente JVM
  • Vantagem:Compilação uma vez, execução qualquer lugar; desenvolvedor não necessário reescrever código para plataforma diferente
  • Fluxo Execução:Compilador javac compila arquivo .java para arquivo .class, depois JVM cada plataforma interpreta execução

4. Tipo Dado Fundamentação Java Têm Quais?

Dominar sistema tipo Java

  • Tipo Inteiro:byte (1 byte), short (2 byte), int (4 byte), long (8 byte)
  • Tipo Ponto Flutuante:float (4 byte), double (8 byte)
  • Tipo Caractere:char (2 byte, suporte Unicode)
  • Tipo Booleano:boolean (1 byte, true/false)
  • Valor Padrão:Inteiro 0, ponto flutuante 0.0, booleano false, char '\\u0000'
  • Classe Empacotamento:Integer, Long, Float, Double, Boolean etc. tipo referência correspondente

5. final、finally、finalize Diferença?

Distinguir três conceito semelhante mas completamente diferente

  • final (palavra chave):Modifica classe não pode herança, modifica método não pode reescrever, modifica variável não pode reatribuição
  • finally (palavra chave):Bloco código try-catch-finally, quer exceção quer não executa, comum para liberação recurso
  • finalize (método):Método classe Object, antes objeto ser coleta lixo chamada, usado para limpar recurso (já obsoleto)
  • Cenário Aplicação:final usado para controle inalterabilidade, finally usado para segurança exceção, finalize já substituído por try-with-resources

🎯 Programação Orientação Objeto

6. O Que É Orientação Objeto?Qual Tem Quatro Característica Grande?

Compreender noção núcleo OOP

  • Definição Orientação Objeto:Pensamento programação tomado objeto como unidade, ênfase atributo objeto e comportamento
  • Quatro Característica Grande:
  • Abstração:Extrair característica comum coisa, ignorar detalhe não essência
  • Encapsulação:Ocultar detalhe implementação interna, expor interface necessário, melhorar segurança
  • Herança:Subclasse herança atributo e método classe pai, realizar reutilização código
  • Polimorfismo:Interface mesmo implementação diferente, tempo execução ligação dinâmica

7. O Que É Polimorfismo?Forma Implementação Polimorfismo Têm Quais?

Compreender profundamente mecanismo polimorfismo Java

  • Definição Polimorfismo:Objeto tem forma múltiplo, chamada método interface mesmo em objeto diferente tem manifestação diferente
  • Forma Implementação:
  • Polimorfismo Tempo Compilação (Sobrecarga):Método mesmo nome, parâmetro diferente, tempo compilação determina chamada
  • Polimorfismo Tempo Execução (Reescrita):Referência classe pai aponta objeto classe filho, tempo execução determina método chamada realidade
  • Condição Polimorfismo Tempo Execução:Herança、reescrita、ligação para cima
  • Vantagem:Melhorar flexibilidade código e manutenibilidade, suporte programação interface

8. Interface e Classe Abstrata Diferença?

Contrastar dois mecanismo abstração diferença semelhança

  • Classe Abstrata:Uso abstract modificação, pode ter método abstrato e método concreto
  • Interface:Uso interface definição, método padrão public abstract (Java 8+ suporte implementação padrão)
  • Relação Herança:Classe pode única herança classe abstrata, mas pode realizar múltiplo interface
  • Modificador Acesso:Classe abstrata pode usar private/protected, membro interface padrão public
  • Variável:Classe abstrata tem variável instância, interface tem constante estático apenas
  • Cenário Uso:Classe abstrata usado para compartilhamento código, interface definição regra

9. O Que É Sobrecarga (Overload) e Reescrita (Override)?

Distinguir dois conceito semelhante mas diferente

  • Sobrecarga (Overload):
  • Mesmo classe, método nome mesmo, tipo parâmetro/número/sequência diferente
  • Tempo compilação determina, pertencem ligação estática
  • Tipo retorno pode diferente (mas não pode apenas por retorno distinguir)
  • Reescrita (Override):
  • Subclasse realmente implementa método classe pai, assinatura método completamente mesmo
  • Tempo execução determina, pertencem ligação dinâmica
  • Tipo retorno e exceção deve compatível

10. Modificador Acesso Têm Quais?Alcance Atuação O Que É?

Dominar mecanismo controle acesso Java

  • public:Público, todas classe pode acesso
  • protected:Proteção, mesmo pacote e subclasse pode acesso
  • default (sem modificador):Padrão, mesmo pacote pode acesso
  • private:Privado, apenas classe interna pode acesso
  • Contraste Alcance Acesso:public > protected > default > private
  • Prática Melhor:Minimizar permissão acesso, seguir princípio encapsulação

💾 Gerenciamento Memória e Coleta Lixo

11. Estrutura Memória Java Incluir Quais?

Compreender alocação memória JVM

  • Heap (Montículo):Armazenamento instância objeto, compartilhado todos thread, região principal coleta lixo, tamanho configurável
  • Stack (Pilha):Armazenamento variável local e chamada método, cada thread propriedade independente, liberação memória automática
  • Área Método (Method Area):Armazenamento informação estrutura classe, pool constante tempo execução, variável estático etc., compartilhado todos thread
  • Contador Programa:Registro endereço instrução bytecode execução thread atual
  • Pilha Método Local:Execução método local (código C/C++)

12. O Que É Coleta Lixo?Algoritmo Coleta Lixo Têm Quais?

Compreender profundamente mecanismo GC

  • Definição Coleta Lixo:Recuperação automática memória ocupada objeto não mais usado
  • Algoritmo Principal:
  • Marca Limpeza:Marca objeto vivo, limpar lixo, produz fragmento
  • Algoritmo Cópia:Divide dois memória, limpeza tempo cópia objeto vivo, sem fragmento mas desperdiça memória
  • Marca Organização:Marca depois compressão organização, sem fragmento mas desempenho pior
  • Algoritmo Geração:Objeto divide geração jovem e geração velho, geração diferente usa estratégia diferente
  • Vantagem:Gerenciamento memória automático, evita vazamento memória

13. Heap e Stack Diferença?

Contrastar dois região memória importante

  • Conteúdo Armazenamento:Heap armazenar objeto, stack armazenar tipo básico e referência
  • Thread:Heap compartilhado todos thread, cada thread tem stack independente propriedade
  • Gerenciamento:Heap gerenciador coleta lixo gerenciamento, stack liberação automática
  • Tamanho:Heap geralmente maior, stack relativamente pequeno
  • Desempenho:Velocidade alocação stack rápido, alocação heap relativamente lento
  • Exceção:Heap overflow OutOfMemoryError, stack overflow StackOverflowError

14. O Que É Vazamento Memória?Como Evitar?

Reconhecer problema memória comum

  • Definição Vazamento Memória:Programa solicita memória não pode liberação, longo prazo ocupa memória
  • Razão Comum:
  • Objeto ciclo vida longo referencia objeto ciclo vida curto
  • Coleção objeto não limpeza tempo oportuno
  • Ouvinte ou callback não cancela registro
  • Coleção estático crescimento sem limite
  • Método Evitar:Liberação referência tempo oportuno, uso try-with-resources, verificação regular uso memória

15. O Que É Referência Forte、Referência Macia、Referência Fraca、Referência Virtual?

Compreender quatro tipo referência Java

  • Referência Forte:Referência comum, objeto não reciclagem, até nenhuma referência forte
  • Referência Macia (SoftReference):Memória insuficiente tempo reciclagem, usado para cache
  • Referência Fraca (WeakReference):Próximo GC tempo reciclagem, usado para WeakHashMap
  • Referência Virtual (PhantomReference):Qualquer tempo pode reciclagem, deve usar com fila referência, usado para rastreamento reciclagem objeto
  • Prioridade Reciclagem:Referência virtual > referência fraca > referência macia > referência forte

📦 Marco Coleção

16. Estrutura Marco Coleção Java?

Dominar conceito integral marco coleção

  • Interface Collection:
  • List:Ordenado pode repetir, como ArrayList、LinkedList
  • Set:Desordenado não repetir, como HashSet、TreeSet
  • Queue:Fila, como LinkedList、PriorityQueue
  • Interface Map:
  • Mapeamento Chave Valor:HashMap、TreeMap、ConcurrentHashMap
  • Nível Integral:Iterable → Collection/Map → classe implementação concreta

17. ArrayList e LinkedList Diferença?

Contrastar duas implementação lista comum

  • Estrutura Dado:ArrayList baseado matriz, LinkedList baseado lista ligação dupla
  • Acesso Aleatório:ArrayList O(1), LinkedList O(n)
  • Inserção Eliminação:ArrayList O(n), LinkedList O(1)
  • Ocupação Memória:ArrayList contínuo, LinkedList disperso (acima cabeça indicador)
  • Segurança Thread:Ambos não sincronismo, pode usar Collections.synchronizedList() ou CopyOnWriteArrayList
  • Seleção:Consulta frequente usa ArrayList, inserção eliminação frequente usa LinkedList

18. Princípio HashMap e Desempenho?

Compreender profundamente mecanismo funcionamento HashMap

  • Estrutura Dado:Matriz + lista ligação + árvore vermelho-preto (JDK 8+)
  • Princípio Funcionamento:hash(chave) % tabela.comprimento calcula subscrito matriz, colisão tempo ligação ou arborescência
  • Fator Carga:Padrão 0.75, quando capacidade usada ≥ capacidade × fator carga tempo expansão
  • Mecanismo Expansão:Capacidade dobro, elemento reposicionamento hash novamente
  • Complexidade Tempo:Médio O(1), pior O(n) (colisão grandes quantidade tempo)
  • Segurança Thread:Não sincronismo, múltiplo thread usa ConcurrentHashMap ou Collections.synchronizedMap()

19. HashSet Como Garantir Não Repetir?

Compreender mecanismo remoção duplicação Set

  • Implementação Fundação:Baseado HashMap, chave para elemento, valor para Object fixado
  • Mecanismo Remoção Duplicação:Primeiro comparação hashCode(), depois use equals() julgamento igualdade
  • Fluxo Adição:Calcula hash → verifica existe quer não → não existe adiciona → existe então ignora
  • Objeto Personalizado:Necessário reescrever equals() e hashCode(), garantir consistência
  • Desempenho:Adição、eliminação、busca médio O(1), dependência qualidade hash

20. fail-fast e fail-safe O Que É?

Compreender mecanismo segurança iterador coleção

  • fail-fast:
  • Modificação coleção durante iteração vai lançar ConcurrentModificationException
  • Através modCount e expectedModCount detecção
  • Como ArrayList、HashMap (não segurança thread)
  • fail-safe:
  • Iteração baseado foto coleção ou cópia, modificação coleção original não afeta iteração
  • Como CopyOnWriteArrayList、ConcurrentHashMap
  • Sugestão Uso:Iteração tempo usa remove() iterador, ou usa coleção fail-safe

⚠️ Tratamento Exceção

21. Hierarquia Exceção Java?

Compreender classificação exceção Java

  • Throwable (classe raiz):
  • Exception (exceção):Exceção pode recuperação
  • Error (erro):Erro nível máquina virtual, não pode recuperação
  • Classificação Exception:
  • Exceção Verificação (Checked):Deve captura ou declaração, como IOException
  • Exceção Não Verificação (Unchecked):Pode não captura, como NullPointerException、IndexOutOfBoundsException
  • Exceção Comum:NPE、ClassCastException、ArrayIndexOutOfBoundsException etc.

22. try-catch-finally Sequência Execução?

Dominar fluxo execução tratamento exceção

  • Situação Normal:try → finally → retorno normal
  • Situação Exceção:try → exceção acontece → catch → finally → transmissão exceção ou retorno
  • Característica finally:Necessariamente executa, mesmo que catch tem return、throw、System.exit()
  • Situação Exceção:finally return vai cobrir try/catch return
  • Liberação Recurso:Recomendação uso try-with-resources, fechamento automático recurso
  • Prática Melhor:Não mudança valor retorno em finally, vai causar exceção perda

23. throws e throw Diferença?

Distinguir dois palavra chave tratamento exceção

  • throw:
  • Manualmente lança instância exceção, necessário dentro método usa
  • Formato:throw new Exception("mensagem")
  • throws:
  • Assinatura método declara exceção possível lançar
  • Formato:public void método() throws IOException
  • Forma Tratamento:throw por throws declaração, throws por chamador tratamento
  • Aplicação:throw usado para tratamento exceção concreta, throws usado para transmissão exceção

24. Como Personalizar Exceção?

Criar classe exceção projeto específico

  • Relação Herança:Herança Exception (exceção verificação) ou RuntimeException (exceção não verificação)
  • Parte Necessário:
  • Fornecer construtor sem parâmetro
  • Fornecer construtor contém mensagem
  • Fornecer construtor contém mensagem e causa
  • Exemplo Código:public class ExceçãoPersonalizada extends Exception { ... }
  • Prática Melhor:Nomeação claro, documento claro, herança classe exceção apropriado

25. Sintaxe try-with-resources Benefício?

Compreender gerenciamento automático recurso

  • Sintaxe:try (InputStream é = ...) { ... } fechamento automático recurso
  • Requisito:Recurso deve implementa interface AutoCloseable
  • Vantagem:
  • Chamada automática método close(), sem necessário gerenciamento manual
  • Exceção suprimida tempo pode tratamento correto
  • Código mais simples, evita vazamento recurso
  • Cenário Aplicável:File、Stream、Connection、Statement etc. classe recurso

🔤 String、StringBuilder、StringBuffer

26. Inalterabilidade String e Razão?

Compreender projeto aprofundado consideração String

  • Definição Inalterabilidade:Objeto String depois criação não pode modificação, qualquer operação modificação retorna objeto novo
  • Forma Implementação:Matriz valor modificado final, sem método setter
  • Razão Inalterabilidade:
  • Pool de buffer string otimização, evita criação repetida
  • Segurança thread, sem necessário sincronismo
  • Suporte cache hashCode, adequado fazer HashMap chave
  • Desvantagem:Modificação frequente tempo criação muitos objeto intermediário

27. String、StringBuilder、StringBuffer Diferença?

Seleção classe operação string apropriado

  • String:Inalterável, segurança thread, desempenho pior (modificação frequente)
  • StringBuilder:Alterável, não segurança thread, desempenho otimal (thread único)
  • StringBuffer:Alterável, segurança thread (método sincronismo), desempenho geral (múltiplo thread)
  • Contraste Desempenho:StringBuilder > StringBuffer > String
  • Sugestão Uso:
  • Emenda string thread único usa StringBuilder
  • Emenda string múltiplo thread usa StringBuffer
  • Não necessário modificação usa String

28. Pool Constante String O Que É?

Compreender mecanismo cache string

  • Definição:JVM mantém cache string, armazenamento literal string
  • Localização:JDK 7+ em heap, antes em área método
  • Mecanismo Criação:
  • Literal como "abc" automaticamente entra pool
  • new String("abc") se "abc" não em pool adiciona
  • Método intern():Adiciona string pool ou retorna referência existente
  • Efeito Otimização:Economiza memória, acelera comparação string

29. Como Comparar String Igualdade?

Dominar método comparação string

  • Comparação ==:Compara referência é idêntico, não compara conteúdo
  • Comparação equals():Compara conteúdo string é idêntico, recomendação usa
  • Comparação equalsIgnoreCase():Ignora maiúscula minúscula comparação conteúdo
  • Comparação compareTo():Comparação sequência dicionário, retorna inteiro
  • Objects.equals():Comparação segura processa valor nulo
  • Prática Melhor:Comparação conteúdo string usa equals(), evita usa ==

30. Emenda String Problema Desempenho?

Otimização desempenho emenda string

  • Problema:String s = "a" + "b" + "c" produz múltiplo objeto intermediário e cópia
  • Razão:String inalterável, cada emenda cria objeto novo
  • Impacto Desempenho:Emenda circulante tempo O(n²) complexidade tempo
  • Plano Otimização:
  • Direto + fora circulante: compilador vai otimizar para StringBuilder
  • Uso explícito StringBuilder ou StringBuffer
  • Uso String.join()、StringJoiner etc. ferramenta

🔄 Multithread e Concorrência

31. O Que É Thread?Como Criar Thread?

Dominar conceito básico thread e forma criação

  • Definição Thread:Fluxo execução independente dentro processo, compartilhamento memória mas tem pilha independente
  • Forma Criação:
  • Herança Thread:public class MinhaThread extends Thread { public void run() {} }
  • Implementação Runnable:public class MeuRunnable implements Runnable { public void run() {} }
  • Implementação Callable:Suporte valor retorno e exceção
  • Diferença:Runnable recomendação, evita limitação herança única
  • Iniciar:Chama thread.start(), não pode chamar diretamente run()

32. Ciclo Vida Thread e Estado?

Compreender transformação vários estado thread

  • NEW:Thread criação mas não iniciado
  • RUNNABLE:Estado pode executar (esperando execução ou executando)
  • BLOCKED:Estado bloqueio, esperando obtenção travamento
  • WAITING:Estado espera, esperando notificação thread outro
  • TIMED_WAITING:Esperando tempo especificado
  • TERMINATED:Thread terminação
  • Transformação Estado:NEW → RUNNABLE → BLOCKED/WAITING → TERMINATED

33. Princípio Funcionamento synchronized?

Compreender mecanismo travamento incorporado Java

  • Mecanismo Sincronismo:Usa travamento incorporado objeto implementa sincronismo
  • Forma Uso:
  • Método Sincronismo:public synchronized void método() {}
  • Bloco Sincronismo:synchronized(obj) { ... }
  • Princípio Funcionamento:
  • Cada objeto tem monitor (supervisor) incorporado
  • Thread obtenção travamento entra região crítica, execução mutuamente exclusiva
  • Bytecode: monitorenter、monitorexit
  • Característica:Pode reutilização, exclusão, liberação automática

34. Atuação Palavra Chave volatile?

Compreender visibilidade memória e proibição reordenação instrução

  • Atuação:
  • Visibilidade:Garante modificação para outro thread imediatamente visível
  • Proibição Reordenação:Bloquear compilador e CPU reordenação otimização
  • Implementação:Barreira memória, força leitura escrita memória principal
  • Limitação:Não pode garantir atomicidade, não pode substituição synchronized
  • Cenário Aplicação:Marcador bandeira, dupla verificação singleton, marcador estado
  • Contraste synchronized:volatile mais leve mas funcionalidade limitado

35. wait()、notify()、notifyAll() Atuação e Diferença?

Dominar mecanismo comunicação thread

  • wait():
  • Thread atual liberta travamento entra espera, até despertado
  • Necessário chamar dentro bloco sincronismo
  • notify():
  • Desperta um thread espera (seleção aleatória)
  • Não liberta travamento, até fim bloco sincronismo liberta
  • notifyAll():
  • Desperta todos thread espera
  • Padrão Uso:Padrão Produtor-Consumidor, padrão monitor

💡 Sugestão Preparação Entrevista

Aprofundar Fundamentação:Não apenas saber conceito, mais compreender princípio e detalhe implementação

Muita Prática:Através codificação prática consolidar conhecimento, especial multithread e concorrência relacionado

Leitura Código Fonte:Pesquisa biblioteca Java código fonte (coleção、concorrência etc.) aprofundar compreender

Prestar Atenção Detalhe:Dominar cilada comum e prática melhor, como comparação string, modificação coleção etc.

Exemplo Explicação:Entrevista tempo usa exemplo concreto explicação conceito, aumenta força expressão