[Compartilhamento de produtos secos] Alibytes e assalto entrevista Tencent, o conhecimento para aprender está aqui! 2020 últimas perguntas da entrevista comum sobre Java, perguntas básicas (com respostas detalhadas)

Mais recente coleção Java de 2020 de perguntas de entrevistas comuns + respostas detalhadas (5)

Recentemente, muitas pessoas ao meu redor estão me fazendo perguntas sobre entrevistas com grandes fábricas. Portanto, também estou combinando as minhas perguntas da entrevista e de meus amigos para resolver questões comuns e básicas da entrevista em Java. As primeiras coleções foram postadas na página inicial.

Algumas das respostas foram resumidas por mim mesmo e outras foram coletadas na Internet. Não entre em pânico depois de assistir a essas entrevistas! Se você tem mais experiência, você pode compartilhar nos comentários. Se você tiver algum erro, fique à vontade para apontá-lo. Por favor, me avise, obrigado ~

Java Web

51. Qual é a diferença entre jsp e servlet?

 

  1. Após a compilação, o jsp se torna Servlet. (A essência do JSP é o Servlet. O JVM só pode reconhecer classes java, mas não o código JSP. O contêiner da web compila o código JSP em classes java que o JVM pode reconhecer)

  2. Jsp é melhor na exibição de páginas e o servlet é melhor no controle lógico.

  3. Não há objetos integrados no Servlet. Os objetos integrados no Jsp devem ser obtidos por meio do objeto HttpServletRequest, do objeto HttpServletResponse e do objeto HttpServlet.

  4. Jsp é uma simplificação do Servlet. O uso de Jsp só precisa completar o conteúdo que o programador precisa enviar para o cliente. Como inserir o script Java em Jsp em uma classe é concluído pelo contêiner Jsp. O Servlet é uma classe Java completa e o método de serviço dessa classe é usado para gerar uma resposta ao cliente.

 

52. Quais são os objetos internos do jsp? Quais são as funções?

 

JSP tem 9 objetos integrados:

 

  • solicitação: Encapsula a solicitação do cliente, que contém os parâmetros da solicitação GET ou POST;

  • resposta: encapsula a resposta do servidor ao cliente;

  • pageContext: outros objetos podem ser obtidos por meio deste objeto;

  • sessão: o objeto que encapsula a sessão do usuário;

  • aplicativo: o objeto que encapsula o ambiente operacional do servidor;

  • out: O objeto de fluxo de saída ao qual o servidor de saída responde;

  • config: O objeto de configuração do aplicativo Web;

  • página: a própria página JSP (equivalente a esta no programa Java);

  • exceção: o objeto que encapsula a página que lança a exceção.


53. Conte-me sobre os 4 escopos do jsp?

 

Os quatro escopos em JSP incluem página, solicitação, sessão e aplicativo, especificamente:

 

  • page representa objetos e atributos relacionados a uma página.

  • solicitação representa objetos e atributos relacionados a uma solicitação emitida por um cliente Web. Uma solicitação pode abranger várias páginas e envolver vários componentes da Web; dados temporários que precisam ser exibidos na página podem ser colocados neste escopo.

  • Sessão representa objetos e atributos relacionados a uma sessão estabelecida por um determinado usuário com o servidor. Os dados relacionados a um usuário devem ser colocados na própria sessão do usuário.

  • Aplicativo representa objetos e atributos relacionados a todo o aplicativo da Web. É essencialmente um escopo global que abrange todo o aplicativo da Web, incluindo várias páginas, solicitações e sessões.


54. Qual é a diferença entre sessão e cookie?

 

  • Como o protocolo HTTP é um protocolo sem estado, quando o servidor precisa registrar o status do usuário, ele precisa usar um mecanismo para identificar o usuário específico. Esse mecanismo é a Sessão. Um cenário típico, como um carrinho de compras, quando você clica no botão de pedido Como o protocolo HTTP não tem estado, não se sabe qual usuário o está operando. Portanto, o servidor deve criar uma sessão específica para um determinado usuário, que serve para identificar o usuário e rastreá-lo, de modo a saber quantos estão no carrinho de compras Livro. Esta Sessão é armazenada no servidor e possui um identificador único. Existem muitas maneiras de salvar a Sessão no servidor, incluindo memória, banco de dados e arquivos. Ao agrupar, você também deve considerar a transferência de sessão. Em grandes sites, geralmente haverá clusters de servidores de sessão dedicados para salvar as sessões do usuário. Neste momento, as informações da sessão são armazenadas na memória e alguns serviços de cache, como Memcached, são usados. Venha e coloque a Sessão.

  • Pense em como o servidor reconhece clientes específicos? Neste momento, Cookie está em cena. Cada vez que uma solicitação HTTP é feita, o cliente enviará as informações do cookie correspondente para o servidor. Na verdade, a maioria dos aplicativos usa cookies para implementar o rastreamento de Sessão. Quando uma Sessão é criada pela primeira vez, o servidor informa ao cliente no protocolo HTTP que uma ID de Sessão precisa ser registrada no Cookie. O ID da sessão é enviado ao servidor e eu sei quem você é. Alguém perguntou: e se o navegador do cliente desabilitar os cookies? Geralmente, neste caso, uma tecnologia chamada reescrita de URL é usada para rastreamento de sessão, ou seja, a cada interação HTTP, um parâmetro como sid = xxxxx será anexado ao URL e o servidor identificará o usuário de acordo.

  • Os cookies podem ser usados ​​em alguns cenários amigáveis ​​ao usuário. Suponha que você tenha feito login em um site uma vez e não queira entrar em sua conta novamente na próxima vez. O que você deve fazer? Essas informações podem ser gravadas no Cookie.Quando você visita o site, o script da página do site pode ler essas informações e preencher automaticamente o nome de usuário para você, o que pode ser conveniente para os usuários. Essa também é a origem do nome do cookie, dando aos usuários um pouco de doçura. Então, para resumir: Sessão é uma estrutura de dados salva no servidor para rastrear o status do usuário. Esses dados podem ser salvos em clusters, bancos de dados e arquivos; Cookie é um mecanismo para o cliente salvar informações do usuário para registro Algumas informações do usuário também são uma forma de realizar a Sessão.

 

55. Fale-me sobre o princípio de funcionamento da sessão?

 

Na verdade, uma sessão é um arquivo semelhante a uma tabela hash armazenada no servidor. Ele contém as informações de que precisamos, que podem ser retiradas quando precisamos. Semelhante a um grande mapa, a chave nele armazena a id de sessão do usuário, e o usuário trará essa id de sessão ao enviar uma solicitação ao servidor. Neste momento, o valor correspondente pode ser extraído dele.

 

56. A sessão pode ser usada se o cliente proibir cookies?

 

Cookie e Session são geralmente considerados duas coisas independentes: Session usa uma solução que mantém o estado no lado do servidor, enquanto Cookie usa uma solução que mantém o estado no lado do cliente. Mas por que não consigo obter a sessão se desativar os cookies? Como a Sessão usa o ID da Sessão para determinar a Sessão do servidor correspondente à sessão atual, e o ID da Sessão é passado através do Cookie, desabilitar o Cookie é equivalente a perder o ID da Sessão e você não obterá a Sessão.

 

Supondo que o usuário use a Sessão quando os cookies estão desativados, há várias maneiras de implementá-la:

 

  1. Defina "session.use_trans_sid = 1" no arquivo de configuração php.ini ou ative a opção "--enable-trans-sid" ao compilar para permitir que o PHP passe automaticamente o ID de sessão pelas páginas.

  2. Passe manualmente o valor por meio da URL e a ID da sessão por meio do formulário oculto.

  3. Salve a ID da sessão na forma de um arquivo, banco de dados, etc., e chame-a manualmente durante o processo de página cruzada.

 

57. Qual é a diferença entre spring mvc e struts?

 

  • Diferença no mecanismo de interceptação

 

Struts2 é uma interceptação em nível de classe. Cada solicitação cria uma Ação. Ao integrar com Spring, o escopo da injeção ActionBean de Struts2 é o modelo de protótipo e, em seguida, os dados da solicitação são injetados no atributo por meio de setter e getter. No Struts2, uma Ação corresponde a um contexto de solicitação e resposta. Ao receber parâmetros, ela pode ser recebida por meio de atributos, o que significa que os parâmetros de atributo são compartilhados por vários métodos. Um método de Ação no Struts2 pode corresponder a uma URL, mas seu atributo de classe é compartilhado por todos os métodos, portanto, é impossível usar anotações ou outras maneiras de identificar seu próprio método e só pode ser projetado como múltiplos casos.

  

Spring MVC é uma interceptação em nível de método. Um método corresponde a um contexto de Solicitação, portanto, o método é basicamente independente e possui dados exclusivos de solicitação e resposta. E cada método corresponde a um URL ao mesmo tempo, e a transferência de parâmetro é injetada diretamente no método, que é exclusivo para o método. O resultado do processamento é retornado à estrutura por meio do ModeMap. Durante a integração do Spring, o Bean do controlador do SpringMVC é padronizado para Singleton, então por padrão, apenas um controlador será criado para todas as solicitações. Não deve haver atributos compartilhados, por isso é thread-safe. Se você quiser alterar o escopo padrão, É necessário adicionar a modificação da anotação @Scope.

  

O Struts2 tem seu próprio mecanismo de interceptação de interceptação, SpringMVC usa um método Aop independente, o que faz com que o volume do arquivo de configuração do Struts2 ainda seja maior que SpringMVC.

 

  • A diferença na estrutura subjacente

  

Struts2 adota Filter (StrutsPrepareAndExecuteFilter) para realizar, SpringMVC (DispatcherServlet) adota Servlet para realizar. O filtro é inicializado depois que o contêiner é iniciado; ele falha depois que o serviço é interrompido, depois do Servlet. O servlet é inicializado quando é chamado, antes de Filter ser chamado, e destruído após o serviço parar.

 

  • Aspecto de desempenho

 

Struts2 é uma interceptação em nível de classe. Cada solicitação corresponde a uma nova instância de Action e precisa carregar todas as injeções de valor de atributo. SpringMVC implementa configuração zero. Como SpringMVC é baseado na interceptação de método, há uma injeção de bean singleton que é carregada uma vez. Portanto, a eficiência de desenvolvimento e o desempenho do SpringMVC são maiores do que o Struts2.

 

  • Aspecto de configuração

  

Spring MVC e Spring são perfeitos. A gestão e segurança deste projeto também é superior ao Struts2.

                                  Que tal isso? Todos vocês responderam?

58. Como evitar injeção de sql?

 

  1. PreparedStatement (um método simples e eficaz)

  2. Use expressões regulares para filtrar parâmetros de entrada

  3. Filtragem de string

  4. Chame esta função em JSP para verificar se caracteres ilegais estão incluídos

  5. Código de julgamento da página JSP

 

59. O que é ataque XSS e como evitá-lo?

O ataque XSS também é conhecido como CSS, e seu nome completo é Cross Site Script (Cross Site Scripting). Seu princípio é que um invasor insere um código HTML malicioso em um site com vulnerabilidades XSS. Quando o usuário navega no site, esse código HTML será executado automaticamente. Para atingir o objetivo do ataque. Ataques XSS são semelhantes aos ataques de injeção SQL. Em ataques de injeção SQL, as instruções SQL são usadas como entrada do usuário para atingir o objetivo de consultar / modificar / excluir dados. Em ataques xss, scripts maliciosos são inseridos para obter o controle do navegador do usuário. Algumas informações sobre o usuário. XSS é uma vulnerabilidade comum em programas da Web. XSS é um método de ataque passivo usado no lado do cliente.

 

A ideia geral da prevenção XSS é filtrar a entrada (e parâmetros de URL) e codificar a saída.

 

60. O que é um ataque CSRF e como evitá-lo?

 

CSRF (falsificação de solicitação entre sites) também é chamado de ataque de um clique ou equitação de sessão. O nome completo em chinês é falsificação de solicitação entre sites . De modo geral, o invasor simula a solicitação do navegador do usuário e a envia para um site que o usuário autenticou para visitar, de forma que o site de destino a receba e a confunda com a operação real do usuário e execute o comando. É frequentemente usado para roubar números de contas, transferir fundos, enviar mensagens falsas, etc. O invasor usa a vulnerabilidade de verificação de solicitação do site para realizar tal ataque. O site pode confirmar que a solicitação foi originada do navegador do usuário, mas não pode verificar se a solicitação originou-se da intenção real do usuário.

 

Como evitar:

 

1. Verifique o campo HTTP Referer

 

O campo Referer no cabeçalho HTTP registra o endereço de origem da solicitação HTTP. Em circunstâncias normais, a solicitação de acesso a uma página restrita segura vem do mesmo site e, se um hacker deseja implementar um
ataque CSRF nele, geralmente só pode construir a solicitação em seu próprio site. Portanto, os ataques CSRF podem ser defendidos verificando o valor do Referer.

 

2. Use o código de verificação

 

Um código de verificação é adicionado à página de operação principal e o CSRF pode ser evitado julgando o código de verificação após o recebimento da solicitação em segundo plano. Mas este método não é amigável.

 

3. Adicione o token ao endereço de solicitação e verifique

 

O ataque CSRF é bem-sucedido porque o hacker pode falsificar completamente a solicitação do usuário. Todas as informações de autenticação do usuário na solicitação estão no cookie, de modo que o hacker pode usar diretamente o próprio cookie do usuário sem saber as informações de autenticação. Para passar na verificação de segurança. Para resistir ao CSRF, a chave é colocar informações que os hackers não podem falsificar na solicitação e que não existem no cookie. Você pode adicionar um token gerado aleatoriamente na forma de um parâmetro à solicitação HTTP e estabelecer um interceptor no servidor para verificar o token. Se não houver um token na solicitação ou o conteúdo do token estiver incorreto, a solicitação pode ser rejeitada devido a um ataque CSRF. . Este método é mais seguro do que verificar Referer. O token pode ser gerado e colocado na sessão após o usuário fazer login e, em seguida, o token é retirado da sessão toda vez que uma solicitação é feita e comparado com o token na solicitação, mas isso A dificuldade desse método é como adicionar o token à solicitação como um parâmetro.
Para solicitações GET, o token será anexado ao endereço da solicitação, de forma que a URL se torne http: // url? Csrftoken = tokenvalue.
Para solicitações POST, adicione <input type = "hidden" name = "csrftoken" value = "tokenvalue" /> no final do formulário, para que o token seja adicionado à solicitação como um parâmetro.

 

4. Personalize os atributos no cabeçalho HTTP e verifique

 

Este método também usa o token e realiza a verificação.A diferença do método anterior é que em vez de colocar o token na solicitação HTTP como um parâmetro, ele é colocado em um atributo personalizado no cabeçalho HTTP. Por meio da classe XMLHttpRequest, você pode adicionar o atributo de cabeçalho HTTP csrftoken a todas as solicitações desse tipo de uma vez e colocar o valor do token nele. Isso resolve o inconveniente de adicionar o token à solicitação no método anterior. Ao mesmo tempo, o endereço solicitado por meio de XMLHttpRequest não será registrado na barra de endereços do navegador, e não há necessidade de se preocupar com o vazamento do token para outros sites por meio do Referer.

Finalmente

O conteúdo das perguntas da entrevista está aqui, espero que seja útil para todos.

Para terminar, quero dizer-lhe uma coisa: trabalho há tantos anos e entrevistei algumas pessoas para outras. Seja do ponto de vista do entrevistador ou do líder, além das habilidades e experiência em entrevistar, grande tecnologia e experiência em projetos também são seus trunfos e confiança. Compartilhamento de tecnologia de núcleo de fabricantes de primeira linha

 Levei muito tempo para organizar alguns materiais de aprendizagem. O que postei acima é a ponta do iceberg dos materiais. Espero poder ajudar você! Clique para aprender juntos cifra: csdn

                         

  Compartilharei mais artigos secos puros no seguimento e espero poder realmente ajudá-lo. Seu apoio é minha maior motivação!

                                                            

Acho que você gosta

Origin blog.csdn.net/weixin_50333534/article/details/108754064
Recomendado
Clasificación