Entrevista java 2024 - mysql(5)

Índice de artigos da série

  1. Entrevista Java 2024 (1) – Capítulo Primavera
  2. Entrevista Java 2024 (2) – Capítulo Primavera
  3. Entrevista Java 2024 (3) – Capítulo Primavera
  4. Entrevista Java 2024 (4) – Capítulo Primavera
  5. Entrevista Java 2024 – Coleção
  6. Entrevista java 2024 – redis(1)
  7. Entrevista java 2024 – redis(2)


Quais bloqueios o MySQL possui?

Com base na granularidade:

  • Bloqueio em nível de tabela: bloqueia a tabela inteira, com grande granularidade e baixa simultaneidade
  • Bloqueio em nível de linha: bloqueio de linhas, pequena granularidade e alta simultaneidade
  • Bloqueio de intervalo: O bloqueio de intervalo bloqueia um intervalo da tabela. Não haverá conflito entre os bloqueios de intervalo. Ele só entra em vigor sob leitura repetível, o que resolve o problema da leitura fantasma.

Com base nas propriedades:

  • Bloqueio compartilhado: também chamado de bloqueio de leitura. Uma transação adiciona um bloqueio de leitura à tabela, e outras transações só podem adicionar bloqueios de leitura, não bloqueios de gravação.
  • Bloqueio exclusivo: também conhecido como bloqueio de gravação.Depois que uma transação adiciona um bloqueio de gravação, outras transações não podem adicionar mais bloqueios para evitar problemas de leitura suja.

$ e #

#Características dos espaços reservados

  1. MyBatis lida com #{ } espaços reservados, e o objeto JDBC usado é o objeto PreparedStatement, que é mais eficiente na execução de instruções SQL.
  2. O uso do objeto PreparedStatement pode evitar a injeção de SQL e tornar a execução de instruções SQL mais segura.
  3. #{ } é frequentemente usado como um valor de coluna e está localizado no lado direito do sinal de igual na instrução SQL; o valor na posição #{ } está relacionado ao tipo de dados.

Características do espaço reservado $

  1. MyBatis lida com espaços reservados ${ } e o objeto JDBC usado é o objeto Statement. A eficiência da execução de instruções SQL é menor do que a dos espaços reservados #{ }.
  2. O valor do espaço reservado ${ } usa concatenação de strings, que apresenta o risco de injeção de SQL e também apresenta problemas de segurança de código.
  3. Os dados no espaço reservado ${ } permanecem inalterados e o tipo de dados não será diferenciado.
  4. Os espaços reservados são frequentemente usados ​​como nomes de tabelas ou colunas. É recomendado usar { } quando a segurança dos dados pode ser garantida. Os espaços reservados são frequentemente usados ​​como nomes de tabelas ou colunas. É recomendado usar espaços reservados quando a segurança dos dados pode ser garantida. Geralmente marcadores de posição usados ​​Como nome de tabela ou nome de coluna, é recomendado usar { } quando a segurança dos dados puder ser garantida.

Quais são exatamente os três paradigmas de banco de dados?

Primeira forma normal: cada coluna não pode mais ser dividida.

Segunda forma normal: com base na primeira forma normal, as colunas de chave não primária são completamente dependentes da chave primária e não podem fazer parte da chave primária.

Terceira forma normal: com base na segunda forma normal, as colunas de chave não primária dependem apenas da chave primária e não dependem de outras chaves não primárias.

A diferença entre junção interna do Mysql, junção à esquerda e junção à direita

A junção interna ocupa a parte de interseção das tabelas, a junção esquerda ocupa todas as partes correspondentes da tabela direita da tabela esquerda e a junção direita ocupa todas as partes correspondentes da tabela direita da tabela direita.

Qual é a diferença entre onde e ter?

onde é uma instrução de restrição, tendo é uma instrução de filtro, onde é executado antes de ter e onde não pode usar funções agregadas, mas ter pode

A diferença entre char e varchar

char é imutável, com comprimento máximo de 255, e varchar é uma string variável, com comprimento máximo de 2 ^ 16

Sob quais circunstâncias o InnoDB produz um impasse?

A transação 1 adquiriu o bloqueio de gravação nos dados A e deseja adquirir o bloqueio de gravação nos dados B. Em seguida, a transação 2 adquire o bloqueio de gravação em B e deseja adquirir o bloqueio de gravação em A. Eles esperam um pelo outro para formar um impasse. MySQL tem dois mecanismos para resolver impasses: 1. Esperar até o tempo limite 2. Iniciar detecção de impasse e reverter ativamente uma transação. O princípio da detecção de impasse é construir um gráfico direcionado com transações como vértices e bloqueios como arestas. Julgamento Se existe um ciclo no gráfico direcionado? Se existir, haverá um impasse.

O MySQL exclui o ID de incremento automático, reinicia o serviço MySQL e insere os dados. Quando o ID de incremento automático será iniciado?

mecanismo innodb:
Antes do MySQL 8.0, o próximo incremento automático terá o id máximo + 1 na tabela. O princípio é que o ID máximo será gravado na memória. Após a reinicialização, o ID máximo da tabela será relido.
Após o MySQL8.0, o cálculo ainda começará a partir do momento após a exclusão do ID dos dados. O princípio é que ele registra o ID máximo no redolog
myisam:
o ID auto-crescente é calculado a partir do momento em que o ID dos dados é excluído. O princípio é que ele registre o ID máximo no arquivo de dados.

Como otimizar o MySQL para inserir milhões de dados?

(1) Inserir vários dados no SQL ao mesmo tempo pode reduzir o número de IOs necessários para gravar logs redolog e logs binários (o SQL tem um limite de comprimento, mas pode ser ajustado) (2) Garantir que os dados sejam inseridos em
ordem de acordo com o índice
(3) As tabelas podem ser divididas após inserção multithread

Cache de primeiro nível e cache de segundo nível em Mybatis

1. O cache do MyBatis é dividido em cache de primeiro nível e cache de segundo nível.

O cache de primeiro nível é um cache de nível SqlSession, que é habilitado por padrão.

O cache de segundo nível é um cache de nível NameSpace (Mapper) que pode ser compartilhado por vários SqlSession e precisa ser configurado e ativado ao usá-lo.

2. Sequência de pesquisa de cache: Cache nível 2 => Cache nível 1 => Banco de dados

Descreva resumidamente o SQL dinâmico do Mybatis e liste 6 tags comumente usadas e suas funções.

SQL dinâmico é um dos recursos poderosos do MyBatis baseado em poderosas expressões OGNL.
SQL dinâmico é usado principalmente para resolver o problema de condições de consulta incertas. Durante a execução do programa, a consulta é concluída dinamicamente de acordo com as condições enviadas.
Tags comumente usadas:

<if> : 进行条件的判断

<where>:在<if>判断后的SQL语句前面添加WHERE关键字,并处理SQL语句开始位置的AND 或者OR的问题

<trim>:可以在SQL语句前后进行添加指定字符 或者去掉指定字符.

<set>: 主要用于修改操作时出现的逗号问题

<choose> <when> <otherwise>:类似于java中的switch语句.在所有的条件中选择其一

<foreach>:迭代操作,批量操作

A sequência completa de execução da instrução Select

(1) A cláusula from reúne dados de diferentes fontes de dados;
(2) A cláusula where filtra linhas de registro com base em condições especificadas;
(3) A cláusula group by divide os dados em vários grupos;
(4) Use a função de agregação para realizar cálculos ;
(5) Use a cláusula tendo para filtrar grupos;
(6) Calcule todas as expressões;
(7) Selecione campos;
(8) Use ordenar por para classificar o conjunto de resultados.

Como garantir a idempotência das interfaces

  1. De acordo com a máquina de estados, muitas tabelas de negócios possuem estados, por exemplo, a tabela de pedidos possui: 1 pedido, 2 pagos, 3 concluídos, 4 cancelados e outros estados. Se os valores desses estados forem regulares e os nós de negócios forem de pequeno a grande porte, podemos usá-lo para garantir a idempotência da interface. Se o status do pedido id=123 for pago, ele mudará para o status concluído. update order set status=3 onde id=123 e status=2; Quando solicitado pela primeira vez, o status do pedido é pago e o valor é 2, então a instrução de atualização pode atualizar os dados normalmente. O número de linhas afetadas pelo resultado da execução SQL é 1. O status do pedido muda para 3. A mesma solicitação vem depois, e quando o mesmo SQL é executado novamente, porque o status do pedido mudou para 3 e status = 2 é usado como condição, os dados que precisam ser atualizados não podem ser consultados, então o número de linhas afetado pelo resultado final da execução do SQL é 0. Ou seja, os dados não serão realmente atualizados. Porém, para garantir a idempotência da interface, quando o número de linhas afetadas for 0, a interface também pode retornar sucesso diretamente.
    Etapas específicas:
    1 O usuário inicia uma solicitação por meio do navegador e o servidor coleta dados.
    2. Atualize para o próximo estado com base no ID e no status atual como condições.
    3. Determine o número de linhas afetadas pela operação. Se 1 linha for afetada, significa que a operação atual foi bem-sucedida e outras operações de dados podem ser executadas .
    4 Se 0 linhas forem afetadas, significa que a solicitação será repetida e o sucesso será retornado diretamente.

  2. Além das soluções acima para obtenção de tokens
    , existe uma última solução utilizando tokens. Esta solução é um pouco diferente de todas as soluções anteriores, pois requer duas solicitações para concluir uma operação comercial.
    A primeira solicitação é para obter o token
    e a segunda solicitação é trazer esse token para concluir a operação comercial.
    Etapas específicas:
    1. Quando o usuário acessa a página, o navegador inicia automaticamente uma solicitação para obter um token.
    2 O servidor gera o token, salva-o no redis e depois o retorna ao navegador.
    3 Quando o usuário inicia uma solicitação através do navegador, o token é transportado.
    4. Verifique se o token existe no redis. Se não existir, significa que é a primeira solicitação e executa as operações de dados subsequentes.
    5 Se existir, significa que é uma solicitação repetida e o sucesso será retornado diretamente.
    6 No redis, o token será excluído automaticamente após o tempo de expiração.

おすすめ

転載: blog.csdn.net/weixin_43228814/article/details/132890143