Catálogo de libros que analiza en profundidad la historia interna de la tecnología web Java
Capítulo 1 Proceso de solicitud web en profundidad 1
1.1 Descripción general de la arquitectura de red B/S 2
1.2 Cómo iniciar una solicitud 4
1.3 Análisis del protocolo HTTP 6
1.3.1 Herramientas para ver información HTTP 8
1.3.2 Mecanismo de almacenamiento en caché del navegador 9
1.4 Resolución de nombres de dominio DNS 12
p>1.4.1 Proceso de resolución de nombres de dominio DNS 12
1.4.2 Seguimiento del proceso de resolución de nombres de dominio 15
1.4.3 Borrar nombres de dominio almacenados en caché 18
1.4.4 Varios métodos de resolución de nombres de dominio 19
1.5 Mecanismo de funcionamiento de CDN 20
1.5.1 Arquitectura de CDN 20
1.5 .2 Equilibrio de carga 21
1.6 Resumen 24
Capítulo 2 Análisis en profundidad del mecanismo de trabajo de Java I/O 25
2.1 La arquitectura básica de Biblioteca de clases de E/S de Java 25
2.1.1 Interfaz de operación de E/S basada en bytes 26
2.1.2 Interfaz de operación de E/S basada en caracteres 27
2.1.3 Interfaz de conversión de bytes y caracteres 28
2.2 Mecanismo de trabajo de E/S del disco 29
2.2.1 Varias formas de acceder a archivos 29
2.2 .2 Acceso Java a archivos de disco 33
2.2.3 Tecnología de serialización Java 34
2.3 Mecanismo de trabajo de E/S de red 36
2.3.1 Conversión de estado TCP 37
2.3.2 Factores que afectan la transmisión de la red 39
2.3.3 Mecanismo de funcionamiento de Java Socket 39
2.3.4 Establecimiento del enlace de comunicación 40
2.3.5 Transmisión de datos 41
2.4 Cómo funciona NIO 41
2.4.1 Desafíos que plantea BIO 41
2.4.2 Mecanismo de trabajo de NIO 42
p>2.4.3 Método de trabajo del búfer 45
2.4.4 Método de acceso a datos NIO 47
2.5 Ajuste de E/S 49
2.5.1 Optimización de E/S de disco 49
2.5.2 Ajuste de parámetros de red TCP 50
2.5.3 Optimización de E/S de red 52
2.6 Diseño Análisis de patrones: patrón de adaptador 56
2.6.1 Estructura del patrón de adaptador 56
2.6.2 Patrón de adaptador en Java I/O 57
2.7 Análisis de patrón de diseño del patrón decorador 57
2.7.1 La estructura del patrón decorador 58
2.7.2 El patrón decorador en Java I/O 58
2.8 El diferencia entre el modo adaptador y el modo decorador 59
2.9 Resumen 59
Capítulo 3 Análisis en profundidad de los problemas de codificación china en Java Web 60
3.1 Varios comunes Formato de codificación 60
3.1.1 Por qué deberíamos codificar 60
3.1.2 Cómo "traducir" 61
3.2 Escenarios que requieren codificación en Java 63
p>3.2.1 Codificación 63 en operaciones de E/S
3.2.2 Codificación 65 en operaciones de memoria
3.3 Cómo codificar y decodificar 66 en Java
3.3.1 Código 68 según ISO-8859-1
3.3.2 Código 69 según GB2312
3.3.3 Código 70 según GBK p>
3.3.4 Codificar 70 según UTF-16
3.3.5 Codificar 71 según UTF-8
3.
3.6 Fragmento de código de codificación UTF-871
3.3.7 Comparación de varios formatos de codificación73
3.4 Códecs involucrados en Java Web73
1 códec de URL 75
3.4.2 Códec de encabezado HTTP 78
3.4.3 Códec de formulario POST 78
3.4.4 CUERPO HTTP Codificación y decodificación 79
3.5 Problemas de codificación en JS 80
3.5.1 Archivos JS importados externamente 80
3.5.2 Codificación de URL JS 81
p>3.5.3 Otros lugares que requieren codificación83
3.6 Análisis de problemas comunes83
3.6.1 El chino se ha convertido en caracteres incomprensibles83
3.6.2 Un carácter chino se convierte en un signo de interrogación84
3.6.3 Un carácter chino se convierte en dos signos de interrogación84
3.6.4 Una codificación correcta anormal85
3.7 Resumen 86
Capítulo 4 Principios de compilación de Javac 87
4.1 Qué es Javac 88
4.2 La estructura básica del compilador Javac 88
4.3 Análisis del principio de funcionamiento de Javac 90
4.3.1 Analizador léxico 91
4.3.2 Analizador de sintaxis 98
4.3 3 Analizador semántico 103
4.3.4 Generador de código 113
4.4 Patrón de visitante para análisis de patrones de diseño 116
4.4.1 Estructura del patrón de visitante 117
4.4.2 Implementación del patrón de visitante en Javac 118
4.5 Resumen 119
Capítulo 5 Estructura detallada de archivos de clases 120
5.1 Introducción al conjunto de instrucciones JVM 120
5.1.1 Instrucciones relacionadas con clases 122
5.1.2 Definición de métodos 123
5.1.3 Definición de atributos 124
5.1.4 Otros conjuntos de instrucciones 125
5.2 Forma de representación de encabezado del archivo de clase 133
5.3 Grupo de constantes 137
5.3.1 Tipo de constante UTF8 140
5.3.2 Fieldref, tipo de constante Methodref 141
5.3.3 Tipo de constante de clase 141
5.3.4 Tipo de constante NameAndType 142 p>
5.4 Información de clase 142
5.5 Definición de campos y métodos 143
5.6 Descripción del atributo de clase 147
5.7 Estructura de archivos de clase generada por Javap 148
5.7.1 LineNumberTable 150
5.7.2 LocalVariableTable 151 p>
5.8 Resumen 153
Capítulo 6 Análisis en profundidad del mecanismo de trabajo de ClassLoader 154
6.1 Análisis de la estructura de clases de ClassLoader 155
6.2 Carga a nivel de ClassLoader mecanismo 156
6.3 Cómo cargar archivos de clase 159
6.3.1 Cargando Bytecode a la memoria 159
6.3.2 Verificación y análisis 161
6.3.3 Inicialización del objeto Clase 161
6.4 Análisis de errores comunes de carga de clases 161
p>6.4.1 ClassNotFoundException 161
6.4.2 NoClassDefFoundError 162
6.4
.3 UnsatisfiedLinkError 163
6.4.4 ClassCastException 164
6.4.5 ExceptionInInitializerError 165
6.5 Análisis de ClassLoader de uso común 166
6.6 Cómo para implementar su propio ClassLoader 170
6.6.1 Cargar archivos de clase en rutas personalizadas 170
6.6.2 Cargar archivos de clase en formatos personalizados 172
6.7 Implementar en caliente implementación de clases 174
6.8 ¿Debería Java cargar las clases dinámicamente? 176
6.9 Resumen 177
Capítulo 7 Arquitectura JVM y método de trabajo 178
7.1 Arquitectura JVM 178
7.1.1 Qué es JVM 178
7.1.2 Explicación detallada de la arquitectura JVM 181
7.2 Mecanismo de trabajo de JVM 183
7.2.1 Cómo la máquina ejecuta el código 183
7.2.2 Por qué la JVM elige una arquitectura basada en pila 184
7.2.3 Diseño arquitectónico del motor de ejecución 185
7.2.4 Proceso de ejecución del motor de ejecución 186
7.2.5 Pila de llamadas al método JVM 191
7.3 Resumen 195
Capítulo 8 Capítulo Gestión de memoria JVM 196
8.1 Memoria física y memoria virtual 197
8.2 Espacio del kernel y espacio de usuario 198
8.3 Qué componentes de Java necesitan usar memoria 199
8.3.1 Java Heap 199
8.3.2 Hilos 199
8.3.3 Clases y cargadores de clases 200
8.3.4 NIO 200
8.3.5 JNI 201
8.4 Estructura de memoria JVM 201
8.4.1 Registro de PC 202
8.4.2 Java Pila 202
8.4.3 Montón 203
8.4.4 Área de método 203
8.4.5 Grupo constante de tiempo de ejecución 204
8.4. 6 Pila de métodos locales 204
8.5 Estrategia de asignación de memoria JVM 204
8.5.1 Estrategia común de asignación de memoria 205
8.5.2 Explicación detallada de la asignación de memoria en Java 205
8.6 Estrategia de reciclaje de memoria JVM 210
8.6.1 Asignación y reciclaje de memoria estática 210
8.6.2 Asignación y reciclaje de memoria dinámica 211
8.6.3 Cómo detectar basura 211
8.6.4 Algoritmo de recolección de basura basado en generación 213
8.7 Análisis de problemas de memoria 222
8.7.1 Análisis de registros de GC 222
8.7.2 Análisis de archivos instantáneos de montón 225
8.7.3 Análisis de registros de fallos de JVM 225
8.8 Ejemplo 1 231
8.9 Ejemplo 2 233
8.10 Ejemplo 3 235
8.11 Resumen 240
Capítulo 9 Análisis del principio de funcionamiento de Servlet 241
9.1 Comenzando desde el contenedor de Servlet 241
9.1.1 El proceso de inicio del contenedor de Servlet 242
9.1.2 Inicialización de la aplicación web 245
9.2 Creación de un Instancia de servlet 247
9.2.1 Crear objeto Servlet 248
9.2.2 Inicializar Servlet 248
>9.3 Arquitectura de servlet 250
9.4 Cómo funciona Servlet 253
9.5 Oyente en Servlet 255
9.6 Cómo funciona el filtro 257
9.7 URL -pattern en Servlet 259
9.8 Resumen 260
Capítulo 10 Comprensión profunda de la sesión y las cookies 261
10.1 Comprensión de las cookies 262
10.1.1 Elementos de atributos de cookies 262
10.1.2 Cómo funcionan las cookies 263
10.1.3 Limitaciones en el uso de cookies 266
10.2 Comprensión de la sesión 267 p>
10.2.1 Sesión y cookies 267
10.2.2 Cómo funciona la sesión 268
10.3 Problemas de seguridad de las cookies 271
10.4 Marco de sesión distribuido 272
10.4.1 Qué problemas existen272
10.4.2 Qué problemas se pueden resolver273
10.4.3 Ideas generales de implementación273
10.5 Compresión de cookies 278
10.6 El problema del envío repetido de formularios 280
10.7 Resumen 281
Capítulo 11 Arquitectura del sistema y patrón de diseño de Tomcat 282
11.1 Diseño general de Tomcat 282
11.1.1 Estructura general de Tomcat 283
11.1.2 Componente conector 289
11.1.3 Contenedor de servlet Contenedor 294
11.1.4 Otros componentes en Tomcat 305
11.2 Patrones de diseño en Tomcat 305
11.2.1 Patrón de diseño de fachada 305
11.2.2 Patrón de diseño de observador 307
11.2.3 Patrón de diseño de comandos 309
11.2.4 Patrón de diseño de cadena de responsabilidad 310
11.3 Resumen 312
p>Capítulo 12 Análisis del principio de funcionamiento de Jetty 313
12.1 Arquitectura básica de Jetty 313
12.1.1 Introducción a la arquitectura básica de Jetty 313
12.1.2 Arquitectura del controlador 315 p>
12.2 Proceso de inicio de Jetty 316
12.3 Aceptar solicitudes 317
12.3.1 Trabajar según el protocolo HTTP 317
12.3.2 Trabajar según el AJP 319
12.3.3 Trabajando basado en NIO 322
12.4 Procesando solicitudes 323
12.5 Integrando con Jboss 326
12.6 Comparación con Tomcat 327
12.6.1 Comparación de arquitectura 327
12.6.2 Comparación de rendimiento 328
12.6.3 Comparación de características 328
12.7 Resumen 329
Capítulo 13 Concepto de diseño y análisis de patrones de diseño de Spring Framework 330
13.1 Arquitectura esquelética de Spring 330
13.1.1 Concepto de diseño de Spring 331
13.1.2 Cómo funcionan juntos los componentes principales 332
13.2 Explicación detallada de los componentes principales 333
13.2.1 Componentes Bean 333
13.2.2 Contexto componente 335
13
.2.3 Componente principal 336
13.2.4 Cómo funciona el contenedor Ioc 338
13.3 Explicación detallada de las características de AOP en Spring 348
13.3.1 Principio de implementación de dinámica proxy 348
13.3.2 Cómo implementa Spring AOP 351
13.4 Análisis de patrones de diseño del modo proxy 354
13.4.1 Principio del modo proxy 354
13.4.2 Implementación del patrón proxy en Spring 354
13.5 Patrón estratégico de análisis de patrones de diseño 357
13.5.1 Principio del patrón estratégico 357
13.5.2 Implementación del patrón de estrategia en Spring 358
13.6 Resumen 358
Capítulo 14 Mecanismo de trabajo y patrón de diseño de Spring MVC 360
14.1 Diseño general de Spring MVC 360
14.2 Diseño de control 365
14.2.1 Inicialización de HandlerMapping 366
14.2.2 Inicialización de HandlerAdapter 368
14.2.3 Control llamar a la lógica 369
14.3 Diseño del modelo 370
14.4 Ver diseño 371
14.5 Reflexiones sobre el diseño del marco 373
14.5.1 ¿Por qué? ¿Se necesita un marco 373
14.5.2 ¿Qué tipo de marco se necesita 373
14.5.3 Principios del diseño del marco 374
14.5.4 "Luz de navegación" 374
14.5.5 Los principios más básicos 374
14.6 Análisis de patrones de plantilla de patrones de diseño 375
14.6.1 La estructura del patrón de plantilla 375
14.6 .2 Ejemplo de patrón de plantilla en Spring MVC 376
14.7 Resumen 377
Capítulo 15 Análisis en profundidad de la arquitectura del sistema y principios de mapeo del marco Ibatis 378 p>
15.1 Ibatis La jerarquía de clases principal del marco 378
15.2 La estrategia de diseño del marco Ibatis 379
15.3 El principio operativo del marco Ibatis 381
15.4 Ejemplo 383
15.5 Análisis Ibatis de sentencias SQL 385
15.6 Campos de base de datos asignados a objetos Java 386
15.7 Resultados de la ejecución de la muestra 388
15.8 Análisis de patrones de diseño Simple Factory Pattern 388
15.8.1 Principio de implementación de Simple Factory Pattern 388
15.8.2 Ejemplo de patrón de fábrica simple en Ibatis 389
15.9 Análisis de patrones de diseño Patrón de fábrica 390
15.9.1 Principio de implementación del patrón de fábrica 390
15.9.2 Ejemplo de patrón de fábrica en Ibatis 391
15.10 Resumen 392
Capítulo 16 Análisis del principio de funcionamiento de Velocity 394
16.1 Arquitectura general de Velocity 395
16.2 Análisis del proceso de renderizado de JJTree 398
16.2.1 #set sintaxis 402
16.2.2 Llamada al método Velocity 403
16.2.3 #if, #elseif y #else sintaxis 406
16.2.4 Sintaxis #foreach 407
16.2.5 Sintaxis #parse 409
16.3 Mecanismo de procesamiento de eventos 410
16.4 De uso común
Consejos de optimización 413
16.4.1 Reducir el número total de nodos en el árbol 413
16.4.2 Reducir el número de nodos que tardan en renderizarse 413
16.5 Comparación con JSP 414
16.5.1 Mecanismo de renderizado JSP 414
16.5.2 Velocidad y JSP 420
16.6 Análisis de patrones de diseño y modo de síntesis 420
16.6.1 Estructura del patrón de síntesis 420
16.6.2 Implementación del patrón de síntesis en Velocity 421
16.7 Patrón intérprete de análisis de patrones de diseño 422 p>
16.7.1 Estructura del modo intérprete 422
16.7.2 Implementación del modo intérprete en Velocity 423
16.8 Resumen 423
Capítulo 17 Práctica de optimización de velocidad 424
17.1 Problemas de la vida real 424
17.2 Bases teóricas de la optimización 425
17.2.1 Estructura triangular del lenguaje de programación 425
17.2.2 Las estructuras de datos reducen la abstracción 426
17.2.3 Los programas simples se vuelven más complicados 426
17.2.4 Reducir el costo de la traducción 427
17.2.5 Cambiado Convertir a sin cambios427
17.3 Ideas de implementación de un motor de plantillas eficiente427
17.3.1 Cómo se compilan las plantillas de VM429
17.3.2 Llamada a métodos Optimización sin reflexión 436
17.3.3 Salida de caracteres cambiada a salida de bytes 439
17.4 Resultados de optimización 440
17.4.1 Convertir caracteres a bytes 440 p>
17.4.2 Ejecución sin reflejos 441
17.5 Otros métodos de optimización 442
17.6 Resumen 442