Depois de escrever código por 7 anos, esta é a primeira vez que vejo um bug tão sangrento!

Acabei de corrigir um bug em nossa plataforma de assistente Yusmart AI, o final é sangrento! Apresse-se e compartilhe com todos e, a propósito, compartilhe as ideias padrão de bugs para solução de problemas.

A coisa é assim, um pequeno parceiro criou um assistente de IA chamado [Desenvolvedor de Software] na Plataforma Yucongming ( www.yucongming.com ). Quando procuro por "desenvolvimento de software", encontro este modelo:

Assistente inteligente de IA de peixe

Como resultado, quando você pesquisa por "desenvolvedor de software", que é o nome completo do assistente, não encontra nenhum resultado? !

Assistente inteligente de IA de peixe

Ao encontrar esse tipo de coisa, comece primeiro pelo front-end: primeiro confirme se os parâmetros de solicitação enviados pelo front-end estão corretos.

Pressione F12 para abrir o console de rede e verifique se a palavra-chave de pesquisa foi passada sem problemas:

Em seguida, a pele do peixe sobe para o back-end ao longo do cabo de rede, primeiro é necessário confirmar se os dados mais originais foram encontrados no banco de dados e, em seguida, considerar se foram filtrados pelo código comercial.

Para abrir o log de consulta do banco de dados localmente, é utilizado o framework MyBatis Plus. O código para abrir o log é o seguinte:

mybatis-plus:
  configuration:
    map-underscore-to-camel-case: false
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

Execute a busca novamente, e os registros SQL impressos ficam conforme a figura:

Coloque os parâmetros no modelo de instrução SQL, ou seja, nome como '%desenvolvedor de software%', parece que não há problema.

Verifique novamente e, em seguida, colocamos o SQL costurado no console do banco de dados para consulta real:

O resultado da consulta de resultado é 0:

Estranho, não existe tal registro no banco de dados? Mas por que encontro esse assistente quando procuro por "desenvolvimento de software"?

Em seguida, usei o id do assistente para consultar o banco de dados e descobri que realmente existem dados chamados "desenvolvedor de software".

Estou com raiva, por que não consigo descobrir? ! Você também pode adivinhar.

Neste momento, eu realmente tenho uma ideia: é porque o nome armazenado no banco de dados é inconsistente com o formato do nome (ou caracteres) que vemos? Então copiei o valor de name do banco de dados, conforme a figura:

Como resultado, o nome copiado do banco de dados é usado como condição de consulta e o resultado pode ser encontrado!

Portanto, há a seguinte captura de tela mágica, duas instruções SQL "idênticas", uma com resultados e outra sem resultados:

Basicamente, pode-se confirmar que este "desenvolvedor de software" não é o outro "desenvolvedor de software", e as duas strings são inconsistentes!

Então, usei essas duas strings para gerar códigos MD5 Hash e descobri que os códigos Hash eram diferentes, indicando que as strings originais eram diferentes.

Para uma comparação mais precisa, verifica-se que a palavra "人" é diferente:

Poço! Quem pode ver a diferença entre esses dois personagens "pessoas"!

Qual é a diferença? Pergunte ao Yusmart AI ~

Como resultado, o caso foi resolvido em um segundo: verifica-se que a primeira "pessoa" é um personagem de largura total, o que é realmente verdade. . . Calças tailandesas são quentes!

Isso é sobre todo o caso. Portanto, o que vemos pode não ser verdade. Esse bug me lembra de muitos amigos que muitas vezes confundem vírgulas em chinês e inglês e dois-pontos em chinês e inglês quando foram para a faculdade. Esse tipo de bug é realmente desconcertante. Espero que todos os amigos programadores tentem não se deparar com isso.Se você se deparar com isso, pense no meu artigo, talvez você tenha uma solução.

Fish smart AI - seja seu poderoso assistente de IA

Guess you like

Origin juejin.im/post/7240004799722340413