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?
-
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)
-
Jsp é melhor na exibição de páginas e o servlet é melhor no controle lógico.
-
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.
-
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:
-
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.
-
Passe manualmente o valor por meio da URL e a ID da sessão por meio do formulário oculto.
-
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?
-
PreparedStatement (um método simples e eficaz)
-
Use expressões regulares para filtrar parâmetros de entrada
-
Filtragem de string
-
Chame esta função em JSP para verificar se caracteres ilegais estão incluídos
-
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!