1. Processo de execução de servlet
O cliente emite uma solicitação HTTP e o servidor da Web encaminha a solicitação para o contêiner do servlet. O contêiner do servlet analisa o URL e encontra o servlet correspondente com base no web.xml e passa os objetos de solicitação e resposta para o servlet encontrado. O servlet pode saber quem emitiu a solicitação, solicitar informações e outras informações com base na solicitação. Depois que o servlet tiver processado a lógica de negócios, ele colocará as informações na resposta e responderá ao cliente.
2. O processo de execução do Springmvc
SpringMVC é uma estrutura de controle hierárquico com DispatchServlet como núcleo. Primeiro, o cliente emite uma solicitação ao servidor da Web para analisar o URL da solicitação e corresponder ao URL de mapeamento do DispatchServlet. Se corresponder, coloque essa solicitação no despacho. O DispatchServlet procura o identificador correspondente de acordo com a configuração do mapeamento de mapeamento e entregue os direitos de processamento à alça encontrada. O identificador encapsula o código para o processamento da lógica de negócios. Depois que o identificador for processado, ele retornará uma visualização lógica ModelView ao DispatchServlet. No momento, o ModelView é uma visualização lógica, não uma visualização formal; portanto, o DispatchServlet analisará o ModelView através do Recurso ViewResource View e, em seguida, colocará os parâmetros analisados na exibição e retornam ao cliente e exibem -a.
3. Dado um arquivo txt, como obter o número de vezes que uma determinada string aparece
Arquivo de arquivo = novo arquivo ("e: //test.txt"); inputStream is = new FileInputStream (file); byte b [] = novo byte [1024]; int a = is.read (b); string str [] = new string (b, 0, a) .split ("); int contat = 0 para (int i; 0; i <str.Length; i ++) {if ("a" .equals (str [i])) count ++;} system.out.println (contagem); 4. Ideia do modelo de design java (modo de coluna única, modo de fábrica, modo de estratégia, um total de 23 modos de design)
a) Modo Singleton: O núcleo do modo Singleton requer apenas um novo modo de objeto One Instância, como conexão com o banco de dados, número de pessoas on -line etc. As estatísticas de números on -line vistas em alguns sites são implementadas pelo Singleton Mode, que armazena um timer no banco de dados ou memória. Quando alguém faz login, adiciona -o e o coloca de novo e de novo. Quando alguém sair, retire -o e subtraia e coloque de volta e novamente. No entanto, quando duas pessoas fazem login ao mesmo tempo, elas retiram o balcão ao mesmo tempo, adicionam uma ao mesmo tempo e a colocarão de volta ao mesmo tempo. Dessa forma, os dados estarão errados. Portanto, é necessário um objeto de variável global para todas as pessoas usarem e apenas um objeto de instância é necessário. Essa é a aplicação do modo Singleton, e o Singleton Mode salva recursos porque controla o número de objetos de instância e é propício à reciclagem do GC.
b) Padrão de política: é extrair os métodos comuns em várias classes para uma nova classe, para que possa ser expandida com mais facilidade, garantir a portabilidade do código e a manutenção. Por exemplo, há um requisito para escrever objetos de pato, chamados, mosca e aparência. Se cada classe de pato gravar esses três métodos, o código será redundante. Nesse momento, podemos extrair os três métodos chamados, voar e aparecer na classe Duck e colocá -los na classe dos pais do pato, para que cada pato herda a classe dos pais do pato e reescreva esses três métodos. Dessa forma, o código encapsulado é altamente portátil. Quando o usuário propõe novos requisitos como o pato pode nadar, é muito simples para nós, programadores OO. Precisamos adicionar apenas um método de natação à classe dos pais do pato e deixar o pato de natação reescrever o método de natação.
c) Modo de fábrica: o modo simples de fábrica fornece principalmente referências a objetos de instância de maneira unificada e obtém referências a objetos de instância através da interface do modo de fábrica. Por exemplo, para uma função de login, o back -end possui três classes, classe de controlador, classe de interface e classe de implementação da interface de implementação. Quando o cliente emite uma solicitação, quando a solicitação é passada para a classe do controlador, o controlador obtém o objeto de referência da interface, e a classe de implementação implementa a interface encapsula o código lógico de negócios de login. Quando você precisa adicionar um requisito de registro, você só precisa adicionar um método de registro à classe de interface, implementar o método na classe de implementação e o controlador pode obter o objeto de referência da interface sem alterar o código original. Essa abordagem é altamente escalável.
5. Classificação de bolhas, pesquisa binária
a) bolha
public estático void mp (int a []) {int swap = 0; for (int i = 0; i <a.length; i ++) {for (int j = i; j <a.length; j ++) {if (a [j]> a [i]) {swap = a [i]; a [i] = a [j]; swap;}}} system.out.println (Arrays.toString (a));}b) Pesquisa binária
public static int ef (int a [], int tag) {int primeiro = 0; int end = A.Length; para (int i = 0; i <a.length; i ++) {int middle = (primeiro + end) / 2; if (tag == a [middle]) {return middle;} if (tag> a [médio]) {end = Middle + 1; 0;} 6-8. Entendimento do Ajax
a) Ajax é uma solicitação assíncrona, ou seja, uma tecnologia de atualização local. Nas páginas tradicionais, os usuários precisam clicar em botões ou eventos para acionar solicitações para atualizar as páginas. A tecnologia assíncrona desencadeia eventos sem clicar, o que aprimora a experiência do usuário, como o carregamento assíncrono de carrinhos de compras no shopping, quando você clica em um produto, não precisa solicitar o plano de fundo e modificar diretamente os parâmetros dinamicamente.
9. A ordem de chamada entre a classe pai e a classe infantil (resultado da impressão)
a) bloco de código estático da classe pai
b) Bloco de código estático da subclasse
c) Construtor de classe pai
d) Método de construção de subclasse
e) Método comum da subclasse
f) Reescreva o método da classe pai e imprima o método de reescrita
10. Chamadas de classes internas e externas
a) A classe interna pode chamar diretamente as variáveis do membro da classe externa, incluindo privada e usar isso. palavra -chave referenciada pela classe externa para chamá -la
b) Quando uma classe externa chama uma classe interna, ele precisa criar um objeto de classe interna
11. Multi-threading
a) Um processo é um ambiente de corrida independente, que pode ser considerado um programa, enquanto um thread pode ser considerado uma tarefa de um processo. Por exemplo, o QQ é um processo e uma janela QQ é um thread.
b) Em um programa com vários threads, a concorrência com vários threads pode melhorar a eficiência do programa. A CPU não entrará em um estado ocioso porque um determinado thread está aguardando recursos. Ele dará recursos a outros threads.
c) O tópico do usuário é o thread que desenvolvemos o programa, e o thread Daemon é o thread do sistema, como GC na JVM Virtual
d) Prioridade do thread: Cada encadeamento possui um nível de prioridade. Aqueles com alto nível finito podem primeiro obter recursos da CPU para alterar o encadeamento do estado pronto para o estado em execução. Você também pode personalizar o nível limitado de threads
e) Deadlock: Pelo menos dois ou mais threads se esforçam por mais de dois recursos da CPU, evite o uso de bloqueios aninhados se evitar deadlocks. Você só precisa adicionar bloqueios onde eles precisam sincronizar e evitar a espera infinita.
12. O conceito de AOP e COI (ou seja, o núcleo da primavera)
a) COI: Spring é uma estrutura de código aberto. O uso de estruturas pode reduzir nossa carga de trabalho e melhorar nossa eficiência de trabalho. É uma estrutura hierárquica, ou seja, as camadas correspondentes processam a lógica comercial correspondente e reduzem o grau de código de acoplamento. O núcleo da primavera é a inversão de controle do COI e a programação tangencial orientada para AOP. A inversão de controle do COI enfatiza principalmente que a relação entre os programas é controlada por contêineres, que controla objetos e controla a aquisição de recursos externos. Inversão significa que, na programação tradicional, criamos objetos para obter dependências, enquanto no COI, o contêiner nos ajuda a criar objetos e injetar objetos dependentes. É o contêiner nos ajuda a encontrar e injetar objetos. O objeto é obtido, por isso é chamado de inversão.
B) AOP: Programação orientada, gerencia principalmente os negócios no nível do sistema, como toras, permissões, coisas, etc. AOP é abrir os objetos encapsulados, descobrir o comportamento comum que afeta vários objetos e os encapsulam em um módulo reutilizável. Este módulo é nomeado aspecto. A seção extrai e encapsula a lógica que não está relacionada à lógica de negócios, mas é chamada em conjunto por módulos de negócios, reduzindo o código duplicado no sistema, reduzindo o acoplamento entre os módulos e melhorando a manutenção do sistema.
13. A idéia central de hibernação
a) A idéia central do hibernato é o mecanismo de mapeamento da relação de objeto ROM. É um mapeamento entre as tabelas para operações entre objetos. Ou seja, as informações extraídas do banco de dados serão automaticamente encapsuladas em objetos específicos de acordo com os requisitos de mapeamento definidos. Portanto, o hibernato é modificar o objeto correspondente à linha de dados, mapeando a classe de entidade da tabela de dados.
14. A diferença entre o Struts1 e o Struts2
15. Exclusão ideal de um personagem em uma string
16-17. A diferença entre ArrayList e LinkedList
a) são todas listas que implementam a interface da lista. A ArrayList é uma estrutura de dados baseada em matriz e o LinkedList é uma estrutura de dados da lista vinculada. Ao obter elementos específicos, o Arraylist é relativamente rápido. Pode ser obtido por meio de subscritos de matriz, enquanto o LinkedList requer mover o ponteiro. Ao armazenar elementos e excluir elementos, o LinkedList é mais eficiente. Você só precisa mover o ponteiro para uma posição especificada para adicioná -lo ou excluí -lo, enquanto o ArrayList requer dados em movimento.
18. Otimização do banco de dados
a) Selecione o campo apropriado, como o campo da caixa de correio, você pode configurá -lo como Char (6) e tentar definir o campo como NotNull, para que o banco de dados não precise comparar o valor nulo ao consultar
b) Use uma junção esquerda na consulta em vez de subconsulta
c) Use a consulta conjunta da União para criar tabelas temporárias manualmente
d) Ligue as coisas. Quando várias instruções são executadas no banco de dados, as coisas reversão, o que pode manter a integridade do banco de dados.
e) Usando chaves estrangeiras, as coisas podem manter a integridade dos dados, mas não podem garantir a correlação de dados. O uso de chaves estrangeiras pode garantir a correlação de dados
f) Usando índices, a indexação é um método comum para melhorar o desempenho do banco de dados. Ele permite que o servidor de banco de dados recupere linhas específicas muito mais rápido do que sem índices, especialmente para max, min, ordem por consulta, o efeito é mais óbvio
g) declarações de consulta otimizadas. Na maioria dos casos, o uso de índices pode melhorar a velocidade da consulta, mas se a instrução SQL for usada de maneira inadequada, o índice não poderá reproduzir suas características.
19. Otimização do servidor Tomcat (memória, número de conexões simultâneas, cache)
a) Otimização da memória: otimiza principalmente os parâmetros de inicialização do Tomcat. Podemos modificar sua memória máxima no script de inicialização do Tomcat, etc.
b) Otimização da contagem de threads: os parâmetros de conexão simultâneos do Tomcat são configurados principalmente no arquivo de configuração do server.xml no Tomcat, como modificar o número mínimo de encadeamentos de conexão ociosos, que são usados para melhorar o desempenho do processamento do sistema, etc.
c) Otimize o cache: ligue a função de compressão e modifique os parâmetros. Por exemplo, o tamanho do conteúdo de saída compactado é de 2kb por padrão e pode ser modificado adequadamente.
20. Protocolo HTTP
a) Os métodos de solicitação comumente usados incluem GET e POST
b) A diferença entre os dados GET e POST: Transfer, obtenha parâmetros e endereço de acesso, e os usuários podem vê -los. Isso será inseguro e levará ao vazamento de informações. A postagem encapsula os campos e os valores correspondentes em uma entidade para transmitir, que é invisível para o usuário. Existem restrições aos parâmetros que passam, enquanto não há restrições na postagem.
21. Protocolo TCP/UDP
22. Quais são as interfaces básicas da estrutura de classe de coleção Java
a) Interface de coleta, listar e definir interface de coleta de implementação, ArrayList e LinkedList, interface da lista de implementação do vetor, vetor de herança de pilha, interface de mapa, hashtable e hashmap implementar interface do mapa
23. Processo de carregamento de classe
a) Ao encontrar uma nova classe, você irá primeiro para a área de métodos para encontrar o arquivo de classe. Se não for encontrado, você irá para o disco rígido para encontrar o arquivo de classe. Depois de encontrá -lo, você o devolverá e carregará o arquivo de classe na área do método. Quando a classe é carregada, a variável do membro estático será atribuído à área estática da área do método. A variável não estática será atribuída à área não estática. Em seguida, você começará a inicializar a variável do membro estático e atribuir o valor padrão. Após atribuir o valor padrão, o valor da exibição será atribuído de acordo com o local escrito pela variável do membro estático e, em seguida, o código estático será executado. O carregamento da classe é concluído apenas quando todo o código estático é executado.
24. Criação de objetos
a) Quando uma nova classe for encontrada, a classe será carregada e o arquivo de classe será localizado
b) Inicialize todas as variáveis estáticas do membro, os blocos de código estático também serão executados e eles serão executados apenas uma vez quando a classe for carregada.
c) Quando novo objeto, a JVM alocará um espaço de armazenamento grande o suficiente na pilha
d) Limpe o espaço de armazenamento, atribua valores padrão a todas as variáveis e atribua todas as referências de objeto a NULL
e) Dê ao campo algumas operações de inicialização de acordo com a posição de escrita
f) chamando o método do construtor (sem herança)
25. Otimização da JVM
a) Defina parâmetros e defina o número máximo de memória da JVM
b) Seleção de coletor de lixo
26. Processamento de alta concorrência
a) Entenda alguns problemas de alta concorrência, como garantir que todos possam ver o bilhete sem comprá -lo. Obviamente, o mecanismo de sincronização não pode ser usado, porque o sincronizar é bloqueado e a sincronização só pode ser realizada por uma pessoa de cada vez. No momento, o mecanismo de bloqueio pode ser usado e o uso de bloqueio otimista pode resolver esse problema. O significado simples do bloqueio otimista é usar o controle de negócios para resolver o problema de simultaneidade sem travar a tabela, o que garante a legibilidade dos dados e a exclusividade dos dados salvos, garantindo o desempenho enquanto resolve o problema de dados de leitura suja causada pela concorrência.
27. Compreensão das coisas
a) As coisas são atômicas, consistentes, persistentes e isoladas
b) Atomicidade: refere -se a reverter em uma coisa que toda a execução é bem -sucedida ou tudo falha.
c) Consistência: as coisas estão em consistência antes e depois da execução
d) Persistência: a operação de vários dados nas coisas é permanente
e) Isolamento: quando uma coisa está operando nos dados, outra coisa não pode operar em dados, ou seja, várias coisas simultâneas são isoladas uma da outra.
28. Struts Workflow
a) O cliente emite uma solicitação para o contêiner de servlet
b) A solicitação é chamada pelo filtroDispatcher após alguma filtragem de colunas, e o filtroDispatch pesquisa a ação correspondente através do ActionMapper.
c) ActionMapper encontra a ação correspondente e a devolve ao FilterDispatch, e a Dispatch fornece os direitos de processamento ao ActionProxy
d) ActionProxy encontra a classe de ação correspondente através do arquivo de configuração
e) ActionProxy cria uma instância de ação para lidar com a lógica de negócios
f) Depois que a ação é processada, o ActionInvocation é responsável por encontrar o resultado de retorno correspondente de acordo com a configuração do stuts.xml. O resultado geralmente é uma página JSP.