📚 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