martes, 30 de agosto de 2016

String vs StringBuffer: Cuál es más eficiente?

Les voy a explicar cual es la diferencia entre las clases String y StringBuffer en JAVA y como el uso de la clase String no es la más eficiente, de hecho es mejor descartar el uso de ésta.

Una de las diferencias más grande entre String y StringBuffer es la asignación, debido a que no es la forma más eficiente en uso de memoria y rendimiento al momento de usarse; cada vez que realizamos una concatenación o una nueva asignación a una variable esto implica crear una nueva instancia de la nueva cadena y descartar la anterior, si lo vemos, cada ves que realicemos una asignación se creará una instancia nueva es decir, se crea un nuevo objeto, debido a que la clase String maneja el concepto de inmutabilidad. 

StringBuffer es una clase que representa un String y cuyo contenido puede cambiar, es decir, es mutable, adicionalmente nos ofrece una cantidad de métodos los cuales son útiles. 

Ahora si vemos un ejemplo claro donde notablemente hay diferencias entre las dos clases.

Se crea la clase StringVsStringBuffer donde se tienen tres métodos: el main, asignacionString y asignacionStringBuffer.

public class StringVsStringBuffer {

    public static void main(String[] args) {
        int nRepeticiones = 10000;
        asignacionString(nRepeticiones);
        asignacionStringBuffer(nRepeticiones);
    }
    
    private static void asignacionString(int n){
        long tiempoInicial = System.currentTimeMillis();
            String cadena = "";
            char caracter;
            for (int i = 0; i < n; i++) {
                caracter = (char)('J'+ i * ('A'+'B'));
                cadena += caracter; 
            }
            long tiempoFinal = System.currentTimeMillis();
            System.out.println("Tiempo de ejecución String: "+(tiempoFinal - tiempoInicial)+" ms");
    }
    
    private static void asignacionStringBuffer(int n){
        long tiempoInicial = System.currentTimeMillis();
            StringBuffer cadena = new StringBuffer();
            char caracter;
            for (int i = 0; i < n; i++) {
                caracter = (char)('J'+ i * ('A'+'B'));
                cadena.append(caracter); 
            }
            long tiempoFinal = System.currentTimeMillis();
            System.out.println("Tiempo de ejecución StringBuffer: "+(tiempoFinal - tiempoInicial)+" ms");
    }
    
}

El método asignacionString no hace más que recibir un parámetro entero el cual va a determinar el fin del ciclo for, así mismo se encarga de realizar la asignación mediante "+", al final lo que hacemos es realizar una resta entre el tiempo final y el tiempo inicial que demoró la ejecución del ciclo. De esta manera el método asignación StringBuffer realiza la misma operación pero utilizando la clase StringBuffer la cual maneja el concepto de mutable.

Ahora ejecutamos la clase 10000 repeticiones y el resultado es el siguiente:

Tiempo de ejecución String: 130 ms
Tiempo de ejecución StringBuffer: 1 ms

Utilizando la clase String se demora 130 ms realizando la asignación 10000 veces y utilizando la clase StringBuffer esas mismas 10000 asignaciones se realizan en 1 ms. Si bien es claro la diferencia entre ambas clases es enorme, así que piénselo bien antes de usar la clase String. Ahora bueno vamos a volver a ejecutar la prueba con 1000000 de asignaciones y estos son los resultados:

Tiempo de ejecución String: 173295 ms
Tiempo de ejecución StringBuffer: 9 ms

Si bien es claro utilizando String se demoró aproximadamente 2.88 minutos realizando el mismo proceso de la clase StringBuffer, la cual solo tardo 9 ms.

Cabe mencionar ya para terminar que las pruebas realizadas las realicé con mi maquina cuyas cracteristicas son las siguientes:
Memoria RAM: 16 gb.
Procesador: Intel Core i7-4770 CPU@3.40 ghz

Muy pronto estaré realizando más publicaciones sobre JAVA, ANDROID, entre otros.

martes, 2 de diciembre de 2014

Sesiones Activas/Inactivas e información de Base de Datos Oracle.



En ocasiones se tiene la necesidad de obtener información acerca de las sesiones de base datos que se están manejando. En ocasiones porque el rendimiento y el tiempo de respuesta es bajo, y se desea saber que usuarios o que puede estar ralentizando el sistema o simplemente cuantas sesiones activas/inactivas existen. Una forma de saber información acerca de las sesiones y acerca de los usuarios es realizando unas consultas a la vista gv$session, la cual contiene información relevante a la hora de determinar que está afectando el tiempo de respuesta de la bd.

Después de muchas investigaciones y de buscar información relevante por internet de interés en el teme, coleccioné y modifiqué algunas consultas que pueden ayudar al manejo de sesiones.


He aquí alguno de las consultas:

--Información general de la base de datos;
Select * 
From v$instance

martes, 12 de agosto de 2014

Internet gratis para android. 100 mb diarios. DROIDVPN, TUN.KO


La mayoría de nosotros utilizamos teléfonos Android ya sea por gusto o porque son más económicos, lo cierto es que la mayoría de nosotros lo utilizamos para navegar en internet a través de nuestros puntos de WIFI públicas o privadas o plan de datos, pero en algunos casos las personas que no cuentan con un plan de datos, ni wifi. Ahora bien existen unas y muchas herramientas que nos permiten tener acceso a internet de manera gratuita bajo algunas restricciones, así mismos estas herramientas nos proporcionan una serie de beneficios buenos, así como la seguridad, la privacidad de los datos, entre otras cosas. La herramienta DroidVPN, es una herramienta que no hace seguimiento y registro de los sitios visitados y cifra los datos, supuestamente, no estoy seguro de esto.


domingo, 10 de agosto de 2014

Generar reporte a excel, pdf, powerpoint, word, odt con Ireports


Hola, hace poco en la empresa donde trabajo me asignaron generar un reporte en Pdf, Excel (xlsx), y una presentación en PowePoint, al principio no estaba seguro de como hacerlo, pero tenia ideas que iban más allá. Demore unos cuantas horas investigando acerca del tema y hallé la respuesta.

La herramienta Ireport ha tenido considerable cambios y avances que la hacen ser una herramienta muy sutil y poderosa la hora de querer generar documentos o reportes. Si bien es claro JasperReports  permite especificar rellenar los datos para el informe de salida de dos maneras diferentes: a través de parámetros y datos fuentes, que se presentan por medio de una interfaz genérica llamado JRDataSource, como se muestra en la Figura.
Generar reportes en cualquier formato especificado

sábado, 12 de julio de 2014

Descargar archivo con JSF, Primefaces, Hibernate.

FileDownload

FileDownload se utiliza para transmitir contenido binario como archivos almacenados en la base de datos para el cliente. FileDownload es utilizado por conectarlo a cualquier componente de comandos JSF como botón o un enlace. Adicionalmente presentación de descarga puede estar configurado con el atributo contentDisposition que tiene ya sea "unión" o "en línea" como un valor.

FileDownload is used to stream binary contents like files stored in database to the client. FileDownload is used by attaching it to any JSF command component like button or a link. Additionally presentation of download can be configured with the contentDisposition attribute that takes either "attachment" or "inline" as a value.


Descargar archivos con FileDownload. Primefaces. Jsf.

martes, 20 de mayo de 2014

Hack WIFI con WIFISLAX en 5 minutos.

Para poder hacer buen uso del software de análisis Wireless, se debe tener un poco de conocimiento acerca del mismo, así mismo la herramienta en su última actualización es mucho más manejable y fácil de usar, de igual forma es bueno tener conocimientos acerca de la seguridad de redes inalámbricas.

miércoles, 23 de abril de 2014

Ejercicios Procesos Sistema Operativo. Programación Hilos, Procesos, Señales.

El siguiente documento describe las características que presentan los sistemas operativos para la administración de procesos, hilos y señales. Los ejercicios que encontraras aquí no son 100% seguro, ya que no los he revisado, estos ejercicio fueron los que hice cuando estaba en clases de Sistemas Operativos, pero de seguro son de mucha utilidad ya que contiene condigo explicito y ejercicios que quizás te sirvan de mucha ayuda.

MULTIPROCESO Y JERARQUÍA DE PROCESOS

Un sistema UNIX es multiproceso y establece una jerarquía de procesos a modo de árbol genealógico.
El mandato pstree permite conocer la jerarquía de procesos. Añadiendo como argumento el pid o el nombre de la cuenta se obtienen la parte de la jerarquía que deriva de un proceso o que pertenece a un usuario.