tema JAVA
Cadena es un tipo de datos de referencia
Cómo obtener el año, mes, día, hora, minuto, segundo
Público estático void main(String[] args)
{
tiempo de escucha de acción = nueva escucha de acción(){// Escuche eventos; de lo contrario, la hora no se puede cambiar dinámicamente.
Acción de anulación pública realizada (evento de acción e){
//El objeto de fecha representa la hora actual del sistema (milisegundos).
Fecha Fecha = new Date();
//El objeto de formato se utiliza para formatear la hora en el formato de hora especificado.
formato de fecha simple de = nuevo formato de fecha simple(
" yyyy-MM-DD HH:MM:ss "); //El formato aquí lo puede configurar usted mismo.
//El método format() se utiliza para formatear la hora.
cadena de tiempos = desde . formato(fecha);
salida del sistema . Timer tim = new timer(1000, time); //Esto significa 1000 milisegundos para actualizar la hora.
Tim . start(); //Inicio
}
Mi respuesta debe ser correcta.
Déjanos ayudarte a explicar tu respuesta.
Fecha //En java.util.Date; dentro
SimpleDateForma //Este es el formato de fecha simple utilizado para generar el formato del problema.
dateformat//debería estar en java.util.*; dentro...Yo también lo creo
Su error falla porque está compilado.
Examen del curso público
Entonces la razón por la que compilas debería ser
Test.java debería compilar la clase, no time.java. ¿A qué te refieres con tiempo? Entonces, la excepción que informó es que no se puede encontrar la clase de tiempo.
Jaja...¿eres principiante en Java? ¡He terminado todas las respuestas! Escribí cada frase específicamente para ti.
Cómo leer y escribir archivos
string buffer sb = new string buffer();
//File file = new FileWindow(). load();
Archivo archivo;
Archivo = nuevo Archivo(" F:/jtest/from . txt ");
TextReader tr = nuevo TextReader (archivo);
sb . append(tr . readall());
out . etiquetas = {"\ ", "", " " ' " };
String str
str = sb . tostring();
for (String reg: etiquetas) {
out . println(reg);
str = str.replaceAll(reg, " ");
out .println(str);
Diferencia entre clase abstracta e interfaz
Una clase que declara la existencia de un método sin implementarlo se llama clase abstracta cuando se quiere para crearlo. Una clase que incorpora algún comportamiento básico y declara un método para esta clase, pero se usa cuando esta clase no se puede implementar. No puede crear una instancia de una clase abstracta. Sin embargo, puede crear una instancia de tipo. Variables de una clase abstracta y apuntan a una instancia de una subclase concreta. No puede haber constructores abstractos o métodos estáticos abstractos. Las subclases de una clase abstracta proporcionan implementaciones para todos los métodos abstractos en su clase principal; de lo contrario, también son clases abstractas. este método en la subclase. Otras clases que conocen su comportamiento pueden implementar estos métodos en la clase.
La interfaz es una variante de la clase abstracta, todos los métodos son abstractos implementando. dicha interfaz. Todos los métodos en la interfaz son abstractos y no tienen cuerpo de programa. La interfaz solo puede definir variables miembro finales estáticas.
La implementación de una interfaz es similar a la implementación de una subclase, excepto que la clase de implementación no puede heredar el comportamiento de la definición de la interfaz. Cuando una clase implementa una interfaz particular, define (es decir, le da el cuerpo del programa) todos los métodos de dicha interfaz. Luego puede llamar a los métodos de la interfaz en cualquier objeto de la clase que implemente la interfaz. Debido a la clase abstracta, permite usar el nombre de la interfaz como tipo de variable de referencia. El enlace dinámico habitual entrará en vigor. Las referencias se pueden convertir hacia y desde tipos de interfaz, y el operador instancia de se puede utilizar para determinar si la clase de un objeto implementa la interfaz.
La clave primaria es el campo de identificación único que determina los registros de la tabla en la base de datos. Puede ser un campo de la tabla o puede constar de varios campos de la tabla. Una vez determinado como clave principal, el campo no puede estar vacío ni duplicado. Por ejemplo, el número de estudiante en la tabla de estudiantes se puede definir como un campo en esa tabla.
La definición de clave externa es relativa a la clave primaria. Por ejemplo, si hay otro formulario de informe y el campo de número de estudiante correspondiente aparece en la tabla de estudiantes, el número de estudiante es la clave externa del formulario de informe en relación con la tabla de estudiantes.
La diferencia entre String y StringBuffer
La longitud de STRING es inmutable y la longitud de STRINGBUFFER es variable. Si manipula con frecuencia el contenido de una cadena, especialmente al modificar el contenido, utilice StringBuffer. Si finalmente necesita una cadena, utilice el método toString() de StringBuffer.
Pruebe la estructura {}catch(){}finally{}. Excepción al intentar {}. ¿Hay algún código en try {} que aún no se haya ejecutado? ¿Qué pasa con el código finalmente {}? ¿Qué pasa con el código después de finalmente{}
Ejecutar el código en finalmente{} y ejecutarlo al final?
Algoritmo de clasificación
Ordenar es una operación que consiste en organizar una cadena de registros en orden ascendente o descendente según el tamaño de una o algunas palabras clave.
Clasificación
Los algoritmos de clasificación utilizados en informática suelen dividirse en:
La complejidad computacional (peor, promedio y mejor rendimiento) depende del tamaño de la lista (norte). En términos generales, el buen desempeño es O. (n log n) y el mal desempeño es ω (N2). El rendimiento ideal de clasificación es O (n). Los algoritmos de clasificación que utilizan solo una operación de comparación de claves abstractas siempre requieren al menos ω (n log n) en promedio.
Uso de memoria (y uso de otros recursos informáticos)
Estabilidad: un algoritmo de clasificación estable mantendrá el orden relativo de los registros basándose en claves iguales (en otras palabras, valores). En otras palabras, un algoritmo de clasificación es estable, es decir, cuando hay dos registros R y S con claves iguales, y R aparece antes de S en la secuencia original, R también aparecerá antes de S en la secuencia ordenada.
Métodos generales: inserción, intercambio, selección, fusión, etc. La clasificación por intercambio incluye la clasificación por burbujas y la clasificación rápida. La clasificación por selección incluye la clasificación por agitación y la clasificación por montón.
La estabilidad no es un problema cuando elementos iguales son indistinguibles, como los números enteros. Sin embargo, supongamos que los pares de números siguientes se ordenarán por su primer número.
(4, 1) (3, 1) (3, 7) (5, 6)
En este caso son posibles dos resultados diferentes, uno es Se mantiene el orden relativo según valores clave iguales, mientras que el otro no:
(3,1) (3,7) (4,1) (5,6)(Mantener orden)
(3,7) (3,1) (4,1) (5,6)(orden cambiado)
El algoritmo de clasificación inestable puede cambiar los registros en el orden relativo de valores clave iguales, pero los algoritmos de clasificación estable sí lo hacen no. En particular, los algoritmos de clasificación inestables pueden considerarse estables. Un enfoque es extender manualmente la comparación de valores clave para que una comparación entre dos objetos que de otro modo tendrían el mismo valor clave decida usar el elemento en el orden de datos original como empate final. Sin embargo, tenga en cuenta que este pedido suele conllevar una carga de espacio adicional.
Lista de algoritmos de reemplazo
En esta tabla, n es el número de registros que se ordenarán y k es el número de valores clave diferentes.
Estable
Clasificación de burbujas): O (n2)
Clasificación de cócteles (clasificación de burbujas bidireccional): O (N2)
Inserción sort)—O(n2)
Clasificación de cubos—O(n); requiere O(k) memoria adicional.
Clasificación de conteo: O(n+k); requiere O(n+k) memoria adicional.
Ordenación por fusión): O(n log n); requiere O(n) memoria adicional.
Clasificación por fusión in situ (N2)
La clasificación de árbol binario-o(n log n); requiere O(n) memoria adicional.
El casillero sort-o(n+k); requiere O(k) memoria adicional.
Clasificación Radix: O(n k); requiere O(n) memoria adicional.
Clasificación de Gnome — O(n2)
La clasificación de biblioteca de alta probabilidad (n log n) requiere (1+ε)n memoria adicional.
Volátil
Clasificación por selección) — O(n2)
Clasificación por shell) — O(n log n), si es óptima Versión actual.
Clasificación en peine: O(n log n)
Clasificación en montón): O(n log n)
Clasificación suave: O(n log n)
p>Quicksort): O(n log n n) tiempo esperado, O(n2) peor caso para secuencias aleatorias grandes, generalmente se considera la clasificación más rápida conocida.
Introclasificación: O(n log n)
Clasificación de pacientes: O (n log n+k) el tiempo de caso adicional requiere espacio O(n+k) adicional y también requiere Buscar la subsecuencia creciente más larga.
Algoritmo de clasificación poco práctico
Bogo sort-o (n× n!) tiempo esperado, peor caso infinito.
Clasificación estúpida: O(n3); la versión recursiva requiere O(n2) memoria adicional.
Beadsort-O (n) u O (√ n), pero requiere hardware especial.
Pancake tipo -o (n), pero requiere hardware especial.
Algoritmos de clasificación
Existen muchos tipos de algoritmos de clasificación, y sus requisitos de espacio y eficiencia de tiempo son diferentes. Algunos algoritmos de clasificación comunes se enumeran a continuación. La clasificación por inserción y la clasificación por burbujas también se denominan clasificación simple. No requieren mucho espacio, pero su eficiencia de tiempo es inconsistente. Los últimos tres tipos requieren un poco más de espacio que la clasificación simple, pero la eficiencia del tiempo se puede estabilizar en un nivel superior. La clasificación Radix es un algoritmo de clasificación para palabras clave en un rango pequeño.
Clasificación por inserción
Clasificación por burbujas
Clasificación por selección
Clasificación rápida
Clasificación en montón
Clasificación por fusión
Clasificación Radix
Clasificación Shell
Clasificación por inserción
La implementación de la ordenación por inserción es la siguiente:
p>Primero, cree una lista vacía para contener la secuencia ordenada (la llamamos "lista ordenada").
Toma un número de la secuencia original e insértalo en la "lista ordenada" para mantenerlo ordenado.
Repite el paso 2 hasta que la serie original quede vacía.
La complejidad temporal promedio de la ordenación por inserción es cuadrada, lo que es menos eficiente pero fácil de implementar. Con la ayuda de la idea de "expandir gradualmente el resultado", aumenta gradualmente la longitud de la lista ordenada hasta que su longitud sea igual a la longitud de la lista original.
Clasificación de burbujas
La clasificación de burbujas se implementa de la siguiente manera:
Primero, coloque todos los números que desea ordenar en la hoja de trabajo.
Comprueba uno por uno desde el primer número hasta el penúltimo número de la lista: si el número de un número es mayor que el número debajo de él, cámbialo con el número debajo de él.
Repite el paso 2 hasta que ya no puedas intercambiar.
La complejidad temporal promedio de la ordenación por burbujas es la misma que la de la ordenación por inserción, que también es cuadrada, pero también es un algoritmo muy fácil de implementar.
Método de clasificación por selección
La clasificación por selección se implementa de la siguiente manera:
Supongamos que se van a organizar n números en la matriz y el subíndice de la matriz comienza desde 1 y termina con n .
i=1
Encuentre el elemento más pequeño desde el elemento I hasta el elemento N de la matriz.
Intercambia el elemento más pequeño encontrado en el paso anterior por el elemento I-ésimo.
Si I = n-1, el algoritmo finaliza, en caso contrario se regresa al paso 3.
La complejidad temporal promedio de la clasificación por selección también es O(n?).
Clasificación rápida
De ahora en adelante, estaremos expuestos a algoritmos de clasificación eficientes. . La práctica ha demostrado que la clasificación rápida es el más eficaz de todos los algoritmos de clasificación. Adopta la idea de dividir y conquistar: primero asegúrese de que la primera mitad de la lista sea más pequeña que la segunda mitad, y luego ordene la primera mitad y la segunda mitad respectivamente para ordenar la lista completa. Este es un concepto avanzado y la razón por la que es eficiente. Porque en el algoritmo de clasificación, la eficiencia del algoritmo está directamente relacionada con el número de comparaciones entre números en la lista, y "garantizar que la primera mitad de la lista sea más pequeña que la segunda mitad" hace que cualquier número en la primera mitad no más tiempo en comparación con los números de la segunda mitad, lo que reduce en gran medida las comparaciones innecesarias entre números. Pero encontrar los datos es otra historia.
Clasificación del montón
La clasificación del montón es diferente del algoritmo anterior. Es así:
Primero crea una lista vacía y su función es insertar una. La "Lista ordenada" es la misma.
Encuentra el número más grande de la secuencia, agrégalo al final de la lista ordenada y elimínalo de la secuencia original.
Repite el paso 2 hasta que la serie original quede vacía.
La complejidad temporal promedio de la clasificación del montón es nlogn, que es eficiente (debido a la estructura de datos del montón y sus maravillosas características, la operación de "encontrar el número máximo en la secuencia" solo requiere O ( 1) grado de complejidad del tiempo, el mantenimiento requiere una complejidad de tiempo larga), pero la implementación es relativamente compleja (se puede decir que es el más difícil de implementar entre los siete algoritmos aquí).
Parece que la ordenación por montón y la ordenación por inserción son algo similares, pero en realidad son algoritmos esencialmente diferentes. Al menos, su complejidad temporal es de un orden de magnitud diferente: una es cuadrada y la otra es logarítmica.
Complejidad de tiempo promedio
Clasificación por inserción O(n2)
Clasificación por burbujas O(n2)
Clasificación por selección O(n2))
Clasificación rápida (n log n)
Clasificación en montón O(n log n)
Clasificación por combinación O(n log n)
Radix sort O(n)
Hill sort O(n1.25)
Primero, la palabra conversación
En mi experiencia, el abuso de la palabra La sesión probablemente ocupa el segundo lugar después de la transacción. Lo que es aún más interesante es que transacción y sesión tienen el mismo significado en algunos contextos.
Sesión, a menudo traducida como conversación en chino, originalmente significa una serie de acciones/información de principio a fin. Por ejemplo, el proceso desde levantar el teléfono y marcar hasta colgar el teléfono se puede llamar sesión. A veces veremos palabras como "Durante una sesión del navegador,..." La palabra sesión aquí se usa en su significado original, refiriéndose al período desde que se abre la ventana del navegador hasta el momento en que se cierra. Lo más confuso es la frase "el usuario (cliente) está en la conversación", que puede referirse a una serie de acciones del usuario (generalmente una serie de acciones relacionadas con un propósito específico, como comprar en línea desde iniciar sesión hasta compra de bienes) al proceso de pago, a veces llamado transacción), pero a veces solo puede referirse a una conexión, o puede referirse al significado ①, la diferencia solo se puede inferir del contexto ②.
Sin embargo, cuando la palabra sesión está asociada a un protocolo de red, normalmente significa dos cosas: orientada a la conexión y/o de mantenimiento del estado. "Orientado a la conexión" significa que ambas partes que se comunican deben establecer un canal de comunicación antes de comunicarse, como hacer una llamada telefónica hasta que la otra parte responda el teléfono. Por el contrario, cuando envía una carta, no puede confirmar si la dirección de la otra parte es correcta y es posible que no se establezca el canal de comunicación. "Estado de mantenimiento" significa que una parte de la comunicación puede correlacionar una serie de mensajes de modo que los mensajes puedan depender unos de otros. Por ejemplo, un camarero podría reconocer a un cliente que regresa y recordar que la última vez el cliente le debía un dólar a la tienda. Ejemplos de este tipo son "sesión TCP" o "sesión pop 3".
En la era del auge de los servidores web, la semántica de sesión en el contexto del desarrollo web se ha ampliado y su significado se refiere a una solución para mantener el estado entre el cliente y el servidor. A veces, la sesión también se usa para referirse a la estructura de almacenamiento de esta solución, como "guardar xxx en la sesión". Debido a que varios lenguajes utilizados para el desarrollo web brindan soporte para esta solución hasta cierto punto, la sesión también se usa en el contexto de un idioma específico para referirse a la solución de ese idioma. Por ejemplo, el javax.servlet proporcionado en Java suele ser equivalente a la firma de una oficina central, como Procter & Gamble, y una máquina específica en un dominio, como www.google.com o froogle.google.com, que Se puede comparar con la flexibilidad.
La ruta es la ruta URL después del nombre de dominio, como / o /foo, etc. , que se puede comparar con el contador blando.
La combinación de ruta y dominio constituye el alcance de la cookie.
Si no se establece el tiempo de caducidad, significa que la vida útil de la cookie es durante la sesión del navegador. La cookie desaparece tan pronto como se cierra la ventana del navegador. Este tipo de cookie cuya duración es la sesión del navegador se denomina cookie de sesión. Las cookies de sesión generalmente no se almacenan en el disco duro, sino en la memoria. Por supuesto, este comportamiento no está especificado en la especificación. Si se establece un tiempo de vencimiento, el navegador guardará las cookies en el disco duro, lo cerrará y luego lo abrirá nuevamente. Estas cookies seguirán siendo válidas hasta que se supere la fecha de caducidad.
Las cookies almacenadas en el disco duro se pueden compartir entre diferentes procesos del navegador, como por ejemplo dos ventanas de IE. Cada navegador tiene diferentes formas de manejar las cookies almacenadas en la memoria. Para IE, presionar Ctrl-N en la ventana abierta (o desde el menú de archivos) se puede compartir con la ventana original, pero los procesos de IE recién abiertos a través de otros métodos no se pueden compartir con las cookies de memoria ya abiertas para Mozilla Firefox0; Todos los procesos y etiquetas pueden * * * disfrutar de la misma cookie. En términos generales, la ventana abierta con window.open de JavaScript compartirá una cookie de memoria con la ventana original. Al procesar cookies de sesión, los navegadores sólo reconocen las cookies pero no a la persona, lo que a menudo genera grandes problemas a los desarrolladores de aplicaciones web que utilizan el mecanismo de sesión.
El siguiente es un ejemplo de Google configurando un encabezado de respuesta de cookie.
Encontrado HTTP/1.1 302
Ubicación:/international/china/
set-Cookie:PREF=ID=0565 f 77 e 132 de 138:NW = 1:TM = 1098082649:LM = 1098082649:S = kaeacfpo 49 RIA_D8; expira = domingo, 17 de enero de 2038 19:14:07 GMT ruta =/; Tipo de contenido: texto/html
Esto es parte del registro de comunicación HTTP capturado por el software de rastreo HTTP HTTPLook.
El navegador enviará cookies automáticamente al acceder nuevamente a los recursos de Google.
Utilizando Firefox, puedes observar fácilmente el valor de las cookies existentes.
Usando HTTPLook con Firefox puedes entender fácilmente cómo funcionan las cookies.
IE también se puede configurar para que pregunte antes de aceptar cookies.
Este es un cuadro de diálogo que solicita aceptar cookies.
Cuarto, comprenda el mecanismo de sesión
El mecanismo de sesión es un mecanismo del lado del servidor. El servidor utiliza una estructura similar a una tabla hash (es decir, se puede utilizar una tabla hash). para guardar información.
Cuando un programa necesita crear una sesión para una solicitud de un cliente, el servidor primero verifica si la solicitud del cliente ya contiene una identificación de sesión, lo que significa que se ha creado una sesión para este cliente anteriormente. El servidor recuperará esta sesión para usarla según la identificación de la sesión (si no se puede recuperar, se puede crear una nueva sesión). Si la solicitud del cliente no incluye una identificación de sesión, se creará una sesión para el cliente y se generará la identificación de sesión asociada con esa sesión. El valor de la identificación de la sesión debe ser una cadena que no se repita y que no pueda descubrirse ni imitarse fácilmente. La identificación de la sesión se devolverá al cliente para que la guarde en la respuesta.
Se pueden utilizar cookies para guardar este ID de sesión, de modo que el navegador pueda reproducir automáticamente este identificador en el servidor de acuerdo con las reglas durante la interacción. Normalmente, esta cookie se denomina algo así como SEEESIONID y . Por ejemplo, la cookie generada por weblogic para aplicaciones web, jssession id = byok 3 vjfd 75 anpnrf 7 C2 HMD NV 6 qzcebzwienbeierjq 99 zwbwb ng! -145788764, su nombre es JSESSIONID.
Dado que las cookies se pueden deshabilitar artificialmente, debe haber algún otro mecanismo para pasar la identificación de la sesión al servidor cuando la cookie está deshabilitada. Una técnica utilizada con frecuencia se llama reescritura de URL, donde el ID de la sesión se agrega directamente a la ruta de la URL. Hay dos formas de adjuntarlo. Una es información adicional como la ruta URL, en el formato /WLS/docs 70/web app/WebLogic_xml.html#1036869.
~ ~Quiero 200 puntos~ ~