Estereótipos Java - Noções básicas de Java

Índice        

1. A diferença entre interface e classe abstrata

2. A diferença entre sobrecarregar e reescrever

3. A diferença entre == e igual

4. Mecanismo de tratamento de exceções

5. Princípio do HashMap

6. E se você quiser um HashMap seguro para threads?

7. Como o ConcurrentHashMap garante a segurança do thread?

8. A diferença entre HashTable e HashMap

9. A diferença entre ArrayList e LinkedList

 10. Como garantir a segurança do thread do ArrayList?

11. A diferença entre String, StringBuffer e StringBuilder

12.hashCode和é igual

13. A diferença entre orientado a objetos e orientado a processos

 4. Cópia profunda e cópia superficial

15. O papel do polimorfismo

16. O que é reflexão?

17. Cinco maneiras de criar objetos em Java?

1. A diferença entre interface e classe abstrata

Semelhança:

Nem podem ser instanciadas

② Subclasses comuns que implementam interfaces ou herdam classes abstratas

    Esses métodos abstratos devem ser implementados

diferença:

① Classes abstratas podem conter métodos comuns e blocos de código ,

    As interfaces só podem conter métodos abstratos, métodos estáticos

    e o método padrão

② Classes abstratas podem ter construtores , mas interfaces não

③ As variáveis-membro na classe abstrata podem ser de vários tipos

    Sim, as variáveis-membro da interface só podem ser públicas 

    tipo final estático  e deve ser atribuído

2. A diferença entre sobrecarregar e reescrever

A sobrecarga ocorre na mesma classe com o mesmo nome de método,

   Listas de parâmetros, tipos de retorno, modificadores de permissão podem

   diferente

②A reescrita ocorre em subclasses , nomes de métodos, colunas de parâmetros

   A tabela e o tipo de retorno são iguais e o modificador de permissão deve ser maior

   Para o método da classe pai, o escopo da exceção declarada é menor que o da classe pai

   método, mas métodos finais e privados modificados

   não regravável

3. A diferença entre == e igual

① == compara tipos básicos, compara valores , == compara

   Comparado com o tipo de referência , o endereço de memória é comparado

② equlas é um método da classe Object, que é essencialmente o mesmo que

   ==, mas algumas classes substituem o método equals

   método, como os iguais de String são reescritos,

   A comparação é um valor de caractere e equlas é reescrito

   Depois disso, o método hashcode() também deve ser substituído

4. Mecanismo de tratamento de exceções

① Use try, catch, finalmente para capturar exceções, finalmente

   O código será executado, após a detecção da exceção, o programa irá

   continuar a executar

② Use throws para declarar as exceções que o método pode lançar

    Tipo constante, após ocorrer uma exceção, o programa termina

5. Princípio do HashMap

(1) HashMap

Após Jdk1.8, ele é implementado com base em array + lista vinculada + árvore vermelha e preta

Agora, a característica é que a chave não pode ser repetida e pode ser nula.

tópico inseguro

(2) O mecanismo de expansão do HashMap:

A capacidade padrão do HashMap é 16 e o ​​fator de carga padrão

é 0,75, quando o número de elementos no HashMap excede a capacidade multiplicada

Quando o número de fatores de carga é usado, um tamanho do anterior é criado

Duplique o novo array e copie os dados do array original

para a nova matriz, quando o comprimento da matriz atingir 64 e o comprimento da lista vinculada

Quando for maior que 8, a lista vinculada se transforma em uma árvore rubro-negra

(3) Princípio de acesso HashMap:

① Calcule o valor hash da chave e, em seguida, execute um segundo hash,

   Encontre a posição do índice correspondente de acordo com o resultado do hash secundário

② Se houver um valor nesta posição, execute primeiro uma comparação de igualdade ,

   Se o resultado for verdadeiro substitua o elemento, se o resultado for falso ,

   Basta usar o método de tradução de bits alto e baixo para inserir o nó na lista vinculada (JDK 8

   No passado, o método de inserção da cabeça era usado, mas o método de inserção da cabeça pode ser expandido simultaneamente

   Pode causar lista vinculada circular ou perda de dados, enquanto tradução alta e baixa

   ocorrerá a substituição de dados)

6. E se você quiser um HashMap seguro para threads?

① Use ConcurrentHashMap

② Use HashTable

③ Método Collections.synchronizedHashMap()

7. Como o ConcurrentHashMap garante a segurança do thread?

JDK 1.7 : Use bloqueios de segmento para dividir um mapa em

16 segmentos, cada segmento é um pequeno hashmap,

Cada operação bloqueia apenas um dos segmentos

JDK 1.8 : adotar linha garantida CAS + sincronizada

Segurança do programa, cada vez que os dados são inseridos, eles são julgados pela matriz atual

Se é a primeira vez que insere a marca, se sim, insira através do CAS

Digite e julgue se f.hash é igual a -1 , se sim, então

Isso significa que outros threads estão se expandindo e o thread atual também irá

Participe da expansão; o método delete é modificado com sincronizado ,

Garanta a segurança da remoção de elementos sob simultaneidade

8. A diferença entre HashTable e HashMap

① Cada método de HashTable usa sincronização

  decoração, portanto é seguro para threads, mas ao mesmo tempo é eficiente em leitura e gravação

  muito baixo

A chave do HashTable não pode ser nula

③ HashTable faz hash da chave apenas uma vez,

    HashMap Hash duas vezes

④ A matriz mais a lista vinculada usada na parte inferior do HashTable

9. A diferença entre ArrayList e LinkedList

A camada subjacente do ArratList usa um array dinâmico com capacidade padrão de

10. Quando o número de elementos atingir a capacidade, gere um novo

Matriz, o tamanho é 1,5 vezes o anterior e depois o original

copie o array; porque o array está conectado na memória

Endereço contínuo, para que ArrayList encontre dados mais rapidamente ,

Adicionar dados é menos

A camada inferior do LinkedList usa uma lista vinculada , que fica isolada na memória

Espalhados, sem mecanismo de expansão ; LinkedList está procurando dados

Os dados precisam ser percorridos desde o início , então a busca é lenta , mas adicionando

dados mais

 10. Como garantir a segurança do thread do ArrayList?

① Use o método collentions.synchronizedList()

Bloqueie     o ArrayList

② Use Vector, a camada inferior de Vector é igual a Arraylist

    O mesmo, mas cada método é modificado por sincronização

    enfeites, muito lento

③ Use CopyOnWriterArrayList em juc,

    Esta classe implementa a operação de leitura sem bloqueio , e a operação de gravação é

    list cria uma cópia , durante a qual outros threads leem

    Ambas são a lista original e todas as operações de gravação são executadas na cópia.

    Após a conclusão da escrita, aponte o ponteiro para a cópia

11. A diferença entre String, StringBuffer e StringBuilder

① String é composta por array char[], usando final

    Modificação, toda vez que a String for alterada, ela será nova

    Gere um objeto String e aponte o ponteiro para

    novo objeto de referência

StringBuffer é variável e seguro para threads

③ StringBuiler é variável, mas não é seguro para threads

① Use String para operar uma pequena quantidade de dados de caracteres;

② Use StringBuilder para operação de thread único de grandes quantidades de dados;

③Use StringBuffer para operação multithread de grandes quantidades de dados

12.hashCode和é igual

hashCode() e equals() são ambos da classe Object

método, hashCode() é calculado por endereço por padrão

código hash, mas pode ser reescrito para usar o conteúdo para calcular

código hash, equals() julga dois por endereço por padrão

Os objetos são iguais, mas podem ser substituídos pelo conteúdo

compara dois objetos, se dois objetos são iguais, seus

hashCode e equals devem ser iguais, mas

Dois objetos com hashCode iguais não são necessariamente iguais

Se você reescrever equals(), deverá reescrever hashCode() ,

Por exemplo, no HashMap, se a chave for String

Tipo, String Se apenas equals() for reescrito sem

Se hashcode() for reescrito, então dois equals()

chaves que se comparam a true porque os códigos hash são diferentes

Como resultado, duas chaves não aparecem em um índice, então

Haverá duas chaves idênticas no mapa

13. A diferença entre orientado a objetos e orientado a processos

Orientado a objetos tem características de encapsulamento, herança e polimorfismo , então

Comparado com orientado a processos, fácil de manter, fácil de reutilizar, fácil de expandir,

Mas como a classe precisa ser instanciada quando é chamada, a sobrecarga é alta

orientado para o processo

 4. Cópia profunda e cópia superficial

Cópia superficial : A cópia superficial apenas copia uma referência a um objeto , enquanto

O objeto em si não é copiado e os objetos antigos e novos ainda compartilham o mesmo bloco


Cópia profunda da memória : a cópia profunda criará um objeto idêntico,

O novo objeto não compartilha memória com o objeto original e a modificação do novo objeto não

mudará o objeto original

15. O papel do polimorfismo

A implementação do polimorfismo deve ser herdada, reescrita e a referência da classe pai aponta para

Objeto de subclasse, sua vantagem é que pode eliminar a lacuna entre os tipos

O relacionamento de acoplamento aumenta a escalabilidade e flexibilidade da classe.

16. O que é reflexão?

A reflexão é obtida obtendo o objeto de classe da classe e, em seguida, dinamicamente

Obtenha a estrutura interna desta classe e opere-a dinamicamente

Propriedades e métodos de classe

   Cenário de aplicação: 

Quando você deseja operar propriedades e métodos de classe com permissões insuficientes , implemente

Ao definir anotações , carregar dinamicamente pacotes jar de terceiros e adicionar

carregar classe, economizando tempo de compilação e inicialização;

   Os métodos para obter objetos de classe são:

① class.forName (caminho da classe)

②classe.class()

③ getClass() do objeto

17. Cinco maneiras de criar objetos em Java?

(1) nova palavra-chave   

(2) Classe.newInstance 

(3) Construtor.newInstance

(4) Método de clonagem   

(5) Desserialização

Acho que você gosta

Origin blog.csdn.net/m0_72041293/article/details/131712655
Recomendado
Clasificación