Preparar Supuesto BL III Flashcards
Lista (List)
Conjunto ORDENADO de elementos HOMOGÉNEOS. Permite DUPLICADOS.
Es necesario tener un puntero inicio que apunta al primer elemento de la lista.
Permiten realizar inserciones en cualquier punto de la lista.
Permite eliminar cualquier elemento.
El acceso a los elementos es secuencial (tenemos que ir pasando por cada uno de ellos, ya que cada elemento nos direcciona al siguiente).
Tipos de listas
Listas enlazadas simples.
Listas enlazadas dobles.
Listas circulares.
Pilas.
Colas.
Listas enlazadas simples
Cada elemento tiene una variable “valor” (de un tipo de dato o estructura de datos) y un puntero denominado “siguiente” que apunta hacia su sucesor (siguiente elemento).
Listas enlazadas dobles
Son iguales a las listas enlazadas simples, pero añaden en cada elemento un nuevo puntero denominado “anterior” que apunta al antecesor.
Listas circulares
La lista circular es una lista enlazada simple o doble con las siguientes particularidades:
No tiene puntero “fin”.
El puntero “siguiente” del último elemento apunta al primer elemento.
Pilas
Denominada lista LIFO (Last In First Out) ya que almacena datos en este orden, es decir, el último elemento que se incorpora a la pila es el primero que sale.
Para entenderlo, imagina una pila de libros. Si quieres poner otro libro en la pila lo sitúas arriba del todo. Cuando quieres coger un libro tienes que empezar cogiendo el de arriba (el último que has puesto).
Colas
También denominada lista FIFO (First In First Out) ya que almacena datos en este orden, es decir, el primer elemento que se incorpora a la cola es el primero que sale.
Para entenderlo, imagina la cola de un cine. El primero que llega es el primero que entra al cine, y si llega alguien nuevo se sitúa al final de la cola.
Bicola
La bicola o doble cola es un tipo de cola especial que permiten la inserción y eliminación de elementos de ambos extremos de la cola.
Puede representarse a partir de un vector y dos índices, siendo su representación más frecuente una lista circular doblemente enlazada.
Todas las operaciones de este tipo de datos tienen coste constante.
Árboles
Es un tipo de datos estructurados, DINÁMICO y no lineal.
Diferencia principal entre árboles y listas
Los árboles utilizan una estructura JERÁRQUICA, mientras que las listas tienen una estructura LINEAL.
Grafos
Es un conjunto de nodos o vértices y un conjunto de arcos (aristas) que establecen relaciones (no jerárquicas) entre los nodos.
Archivo o fichero informático
Conjunto de información guardado en forma de bytes, en un soporte electrónico hardware de almacenamiento.
Conjunto (Set)
Colección de valores NO ORDENADOS que no permite elementos repetidos.
Sin orden y sin duplicados.
Mapa (Map)
Conjunto de elementos formados por pares clave-valor. NO ESTAN ORDENADOS.
Las claves no pueden estar repetidas pero los valores si.
Diccionario (Dictionary)
Un diccionario es un Mapa (Map) donde se le da un orden interno a las claves.
Concepto de “pipelines”
Es una serie de etapas de procesamiento de datos donde la salida de una etapa se convierte en la entrada de la siguiente.
Apps de Integración Continua (CI) y Entrega Continua (CD):
Jenkins
Travis CI
CircleCI
GitLab CI/CD
Bamboo
TeamCity
Apps de Sistema de Mensajería:
RabbitMQ
Apache Kafka
ActiveMQ
Redis Pub/Sub
Amazon SQS
NATS
Apps de Control de Versiones:
Git
Subversion (SVN)
Mercurial
Perforce
Bazaar
CVS (Concurrent Versions System)
Apps de Automatización de Tareas y DevOps:
Ansible
Puppet
Chef
SaltStack
Terraform
Kubernetes
Apps de Monitorización y Logging:
Prometheus
Grafana
Nagios
Splunk
ELK Stack (Elasticsearch, Logstash, Kibana)
Datadog
Apps de Gestión de Proyectos y Colaboración:
Jira
Trello
Asana
Monday.com
Basecamp
Microsoft Teams
Integración Continua (CI)
La Integración Continua es una práctica de desarrollo de software en la que los desarrolladores integran su código de trabajo en un repositorio compartido con frecuencia.
Entrega Continua (CD)
La Entrega Continua es una práctica que extiende la Integración Continua al automatizar el proceso de lanzamiento de software, permitiendo que los cambios en el código se desplieguen automáticamente en entornos de producción o preproducción.
Paquete java.lang
Contiene clases fundamentales del lenguaje Java.
String, System, Math, Thread, Exception
Paquete java.util
Proporciona clases utilitarias, incluyendo colecciones y estructuras de datos.
ArrayList, HashMap, Date, Calendar, Collections
Paquete java.io
Contiene clases para la entrada y salida (I/O), incluyendo la manipulación de archivos y flujos de datos.
File, FileInputStream, FileOutputStream, BufferedReader, PrintWriter
Paquete java.nio
Proporciona clases para operaciones de I/O no bloqueantes (NIO).
ByteBuffer, FileChannel, Path, Files, StandardOpenOption
Paquete java.net
Contiene clases para la implementación de aplicaciones de red.
URL, HttpURLConnection, Socket, ServerSocket, InetAddress
Paquete java.sql
Proporciona clases e interfaces para el acceso a bases de datos mediante JDBC (Java Database Connectivity).
Connection, Statement, ResultSet, DriverManager, PreparedStatement
Paquete java.math
Contiene clases para realizar operaciones matemáticas de alta precisión.
BigDecimal, BigInteger, MathContext, RoundingMode
Paquete java.time
Proporciona clases para la manipulación de fechas y horas.
LocalDate, LocalTime, LocalDateTime, ZonedDateTime, Duration
Paquete java.awt
Contiene clases para la creación de interfaces gráficas de usuario (GUI).
Frame, Button, TextField, Label, Canvas
Paquete javax.swing
Proporciona un conjunto más avanzado de componentes GUI que java.awt.
JFrame, JButton, JLabel, JTextField, JPanel
Paquete javax.naming
Proporciona clases e interfaces para el acceso a servicios de directorio y de nombres.
InitialContext, Context, Name, NamingEnumeration, NameClassPair
Paquete javax.servlet
Proporciona clases e interfaces para manejar solicitudes y respuestas HTTP en aplicaciones web.
HttpServlet, ServletRequest, ServletResponse
Paquete javax.ejb
Define las interfaces y clases para Enterprise JavaBeans (EJB), que son componentes de servidor que encapsulan la lógica de negocio.
SessionBean, EntityBean, MessageDrivenBean
Paquete javax.persistence
Contiene las clases e interfaces para la API de persistencia de Java (JPA), que gestiona el almacenamiento y recuperación de datos en bases de datos.
EntityManager, EntityTransaction, Query
Paquete javax.sql
Proporciona clases e interfaces para trabajar con fuentes de datos y manejar conexiones a bases de datos, incluyendo el manejo de conexiones agrupadas y distribuidas.
DataSource, ConnectionPoolDataSource, RowSet
.Net Frameworks
ASP.NET: Framework para desarrollar aplicaciones web y servicios web.
Entity Framework: ORM (Object-Relational Mapping) para trabajar con bases de datos.
Xamarin: Framework para desarrollar aplicaciones móviles multiplataforma.
Blazor: Framework para construir aplicaciones web interactivas usando C# en lugar de JavaScript.
WPF (Windows Presentation Foundation): Framework para desarrollar aplicaciones de escritorio en Windows.
MAUI (Multi-platform App UI): Framework para crear aplicaciones nativas multiplataforma.
Java Frameworks
Spring: Framework completo para el desarrollo de aplicaciones empresariales.
Hibernate: ORM para trabajar con bases de datos relacionales.
Struts: Framework para desarrollar aplicaciones web basadas en MVC.
JSF (JavaServer Faces): Framework para construir interfaces de usuario web.
Vaadin: Framework para construir aplicaciones web modernas con Java.
GWT (Google Web Toolkit): Framework para construir aplicaciones web complejas en Java.
Python Frameworks
Django: Framework de alto nivel para el desarrollo rápido de aplicaciones web.
Flask: Framework ligero y flexible para aplicaciones web.
Pyramid: Framework para aplicaciones web que se puede escalar desde aplicaciones simples hasta complejas.
FastAPI: Framework moderno y de alto rendimiento para construir APIs con Python.
Tornado: Framework para construir aplicaciones web asíncronas y en tiempo real.
Bottle: Micro-framework simple y ligero para aplicaciones web.
PHP Frameworks
Laravel: Framework moderno y elegante para el desarrollo de aplicaciones web.
Symfony: Framework robusto y flexible para aplicaciones web empresariales.
CodeIgniter: Framework ligero y rápido para desarrollar aplicaciones web.
Yii: Framework de alto rendimiento para desarrollar aplicaciones web.
Zend Framework: Framework extensible y orientado a objetos para aplicaciones web.
CakePHP: Framework que facilita el desarrollo rápido de aplicaciones.
JavaScript Frameworks
React: Biblioteca para construir interfaces de usuario, desarrollada por Facebook.
Angular: Framework desarrollado por Google para crear aplicaciones web dinámicas y robustas.
Vue.js: Framework progresivo para construir interfaces de usuario, fácil de integrar con otros proyectos.
Svelte: Framework que compila el código en JavaScript eficiente en tiempo de construcción.
Ember.js: Framework para crear aplicaciones web ambiciosas con una arquitectura sólida.
Next.js: Framework basado en React para construir aplicaciones web con renderizado del lado del servidor (SSR) y generación estática.
En Java, que palabra se utiliza para poder usar un paquete:
import
// Importar una clase específica
import java.util.ArrayList;
// Importar todas las clases de un paquete
import java.util.*;
En Java, para que se utiliza extends:
Para indicar que una clase hereda de otra clase.
class Dog extends Animal {}
En Java, para que se utiliza implements:
Para indicar que una clase implementa una o más interfaces.
class Dog implements Animal {}
En Java, para que se utiliza import:
Para importar clases o paquetes en un archivo Java.
import java.util.List;
En Java, modificador public
Indica que el miembro es accesible desde cualquier otra clase.
En Java, modificador private
Indica que el miembro es accesible solo dentro de la clase en la que se define.
En Java, modificador protected
Indica que el miembro es accesible dentro de su propio paquete y por subclases.
En Java, modificador default
Indica que el miembro es accesible solo dentro de su propio paquete.
En Java, modificador static
Indica que el miembro pertenece a la clase, en lugar de a instancias de la clase.
En Java, modificador final
Indica que el valor del miembro no puede ser cambiado (para variables) o que el método no puede ser anulado (para métodos).
En Java, modificador abstract
Indica que la clase no puede ser instanciada directamente y puede contener métodos abstractos que deben ser implementados por subclases.
En Java, modificador synchronized
Indica que un método puede ser accedido por un solo hilo a la vez.
En Java, modificador volatile
Indica que el valor de una variable puede ser cambiado inesperadamente por diferentes threads.
En Java, modificador transient
Indica que un campo no debe ser serializado.
¿Qué es la serialización?
Es el proceso de convertir un objeto en una secuencia de bytes para su almacenamiento o transmisión.
En Java, se realiza con la clase ObjectOutputStream.
¿Qué es la deserialización?
Es el proceso de convertir una secuencia de bytes de vuelta a su correspondiente objeto en memoria.
En Java, se realiza con la clase ObjectInputStream.
Tipos de patrones GoF (Gang Of Four)
Creacionales
Estructurales
De comportamiento
Patrones GoF creacionales:
Abstract Factory (fábrica abstracta): permite trabajar con objetos de distintas familias.
Builder (constructor virtual): abstrae el proceso de creación de un objeto complejo, centralizando dicho proceso en un único punto.
Factory Method (método de fabricación): centraliza en una clase constructora la creación de objetos de un subtipo de un tipo determinado, ocultando al usuario la casuística.
Prototype (prototipo): crea nuevos objetos clonándolos de una instancia ya existente.
Singleton (instancia única): garantiza la existencia de una única instancia para una clase y la creación de un mecanismo de acceso global a dicha instancia.
Patrones GoF estructurales:
Adapter o Wrapper (Adaptador o Envoltorio): Adapta una interfaz para que pueda ser utilizada por una clase que de otro modo no podría utilizarla.
Bridge (Puente): Desacopla una abstracción de su implementación.
Composite (Objeto compuesto): Permite tratar objetos compuestos como si de uno simple se tratase.
Decorator (Decorador): Añade funcionalidad a una clase dinámicamente.
Facade (Fachada): Provee de una interfaz unificada simple para acceder a una interfaz o grupo de interfaces de un subsistema.
Flyweight (Peso ligero): Reduce la redundancia cuando gran cantidad de objetos poseen idéntica información.
Proxy: Proporciona un intermediario de un objeto para controlar su acceso.
Module: Agrupa varios elementos relacionados, como clases, singletons, y métodos, utilizados globalmente, en una entidad única.
Patrones GoF de comportamiento:
Chain of Responsibility (Cadena de responsabilidad): Permite establecer la línea que deben llevar los mensajes para que los objetos realicen la tarea indicada.
Command (Orden): Encapsula una operación en un objeto, permitiendo ejecutar dicha operación sin necesidad de conocer el contenido de la misma.
Interpreter (Intérprete): Dado un lenguaje, define una gramática para dicho lenguaje, así como las herramientas necesarias para interpretarlo.
Iterator (Iterador): Permite realizar recorridos sobre objetos compuestos independientemente de la implementación de estos.
Mediator (Mediador): Define un objeto que coordine la comunicación entre objetos de distintas clases, pero que funcionan como un conjunto.
Memento (Recuerdo): Permite volver a estados anteriores del sistema.
Observer (Observador): Define una dependencia de uno-a-muchos entre objetos, de forma que cuando un objeto cambie de estado se notifique y actualicen automáticamente todos los objetos que dependen de él.
State (Estado): Permite que un objeto modifique su comportamiento cada vez que cambie su estado interno.
Strategy (Estrategia): Permite disponer de varios métodos para resolver un problema y elegir cuál utilizar en tiempo de ejecución.
Template Method (Método plantilla): Define en una operación el esqueleto de un algoritmo, delegando en las subclases algunos de sus pasos, esto permite que las subclases redefinan ciertos pasos de un algoritmo sin cambiar su estructura.
Visitor (Visitante): Permite definir nuevas operaciones sobre una jerarquía de clases sin modificar las clases sobre las que opera.
Patrón GoF creacional “Abstract Factory (fábrica abstracta)”:
Permite trabajar con objetos de distintas familias de manera que las familias no se mezclen entre sí y haciendo transparente el tipo de familia concreta que se esté usando. El problema a solucionar por este patrón es el de crear diferentes familias de objetos, como por ejemplo, la creación de interfaces gráficas de distintos tipos (ventana, menú, botón, etc.).
Patrón GoF creacional “Builder (constructor virtual)”:
Abstrae el proceso de creación de un objeto complejo, centralizando dicho proceso en un único punto.
Patrón GoF creacional “Factory Method (método de fabricación)”:
Centraliza en una clase constructora la creación de objetos de un subtipo de un tipo determinado, ocultando al usuario la casuística, es decir, la diversidad de casos particulares que se pueden prever, para elegir el subtipo que crear. Parte del principio de que las subclases determinan la clase a implementar.
Patrón GoF creacional “Prototype (prototipo)”:
Crea nuevos objetos clonándolos de una instancia ya existente.
Patrón GoF creacional “Singleton (instancia única)”:
Garantiza la existencia de una única instancia para una clase y la creación de un mecanismo de acceso global a dicha instancia. Restringe la instanciación de una clase o valor de un tipo a un solo objeto.
Patrón GoF estructural “Adapter o Wrapper (Adaptador o Envoltorio)”:
Adapta una interfaz para que pueda ser utilizada por una clase que de otro modo no podría utilizarla.
Patrón GoF estructural “Bridge (Puente)”:
Desacopla una abstracción de su implementación.
Patrón GoF estructural “Composite (Objeto compuesto)”:
Permite tratar objetos compuestos como si de uno simple se tratase.
Patrón GoF estructural “Decorator (Decorador)”:
Añade funcionalidad a una clase dinámicamente.
Patrón GoF estructural “Facade (Fachada)”:
Provee de una interfaz unificada simple para acceder a una interfaz o grupo de interfaces de un subsistema.
Patrón GoF estructural “Flyweight (Peso ligero)”:
Reduce la redundancia cuando gran cantidad de objetos poseen idéntica información.
Patrón GoF estructural “Proxy”:
Proporciona un intermediario de un objeto para controlar su acceso.
Patrón GoF estructural “Module”:
Agrupa varios elementos relacionados, como clases, singletons, y métodos, utilizados globalmente, en una entidad única.
Patrón GoF de comportamiento “Chain of Responsibility (Cadena de responsabilidad)”:
Permite establecer la línea que deben llevar los mensajes para que los objetos realicen la tarea indicada.
Patrón GoF de comportamiento “Command (Orden)”:
Encapsula una operación en un objeto, permitiendo ejecutar dicha operación sin necesidad de conocer el contenido de la misma.
Patrón GoF de comportamiento “Interpreter (Intérprete)”:
Dado un lenguaje, define una gramática para dicho lenguaje, así como las herramientas necesarias para interpretarlo.
Patrón GoF de comportamiento “Iterator (Iterador)”:
Permite realizar recorridos sobre objetos compuestos independientemente de la implementación de estos.
Patrón GoF de comportamiento “Mediator (Mediador)”:
Define un objeto que coordine la comunicación entre objetos de distintas clases, pero que funcionan como un conjunto.
Patrón GoF de comportamiento “Memento (Recuerdo)”:
Permite volver a estados anteriores del sistema.
Patrón GoF de comportamiento “Observer (Observador)”:
Define una dependencia de uno-a-muchos entre objetos, de forma que cuando un objeto cambie de estado se notifique y actualicen automáticamente todos los objetos que dependen de él.
Patrón GoF de comportamiento “State (Estado)”:
Permite que un objeto modifique su comportamiento cada vez que cambie su estado interno.
Patrón GoF de comportamiento “Strategy (Estrategia)”:
Permite disponer de varios métodos para resolver un problema y elegir cuál utilizar en tiempo de ejecución.
Patrón GoF de comportamiento “Template Method (Método plantilla)”:
Define en una operación el esqueleto de un algoritmo, delegando en las subclases algunos de sus pasos, esto permite que las subclases redefinan ciertos pasos de un algoritmo sin cambiar su estructura.
Patrón GoF de comportamiento “Visitor (Visitante)”:
Permite definir nuevas operaciones sobre una jerarquía de clases sin modificar las clases sobre las que opera.
Función de los patrones GoF creacionales:
Solucionan problemas de creación de instancias. Nos ayudan a encapsular y abstraer dicha creación.
Se enfocan en la creación de objetos, ayudando a crear objetos de manera que se adapten a la situación dada. Facilitan la creación de objetos de una manera controlada y eficiente, asegurando que el sistema sea flexible y reutilizable.
Función de los patrones GoF estructurales:
Solucionan problemas de composición (agregación) de clases y objetos.
Se centran en la composición de clases y objetos. Su objetivo es facilitar la creación de estructuras complejas y grandes a partir de estructuras más simples, promoviendo la flexibilidad y la reutilización del código.
Función de los patrones GoF de comportamiento:
Ofrecen soluciones respecto a la interacción y responsabilidades entre clases y objetos.
Se enfocan en la interacción y responsabilidad entre objetos. Ayudan a definir cómo los objetos se comunican entre sí, promoviendo una mayor flexibilidad en la asignación de responsabilidades y en la comunicación entre objetos.
En SQL, la cláusula “IF EXISTS”
Se utiliza para verificar la existencia de un objeto (como una tabla, una vista, un índice, etc.) antes de realizar una acción sobre él. Es útil para evitar errores al intentar eliminar o modificar un objeto que puede no existir.
Ejemplos:
DROP TABLE IF EXISTS tabla;
DROP VIEW IF EXISTS vista;
DROP INDEX IF EXISTS indice;
DROP DATABASE IF EXISTS bd;
Última versión de UML
2.5.1
Qué es un patrón de diseño:
Son técnicas para resolver problemas comunes en el desarrollo de software y otros ámbitos referentes al diseño de interacción o interfaces.
¿Qué significa GoF?
Gang of Four
En 1994, cuatro autores Erich Gamma, Richard Helm, Ralph Johnson y John Vlissides, a los que llamaron Gang of Four (GoF), publicaron un libro titulado Design Patterns, elementos de software orientado a objetos reutilizables.
¿Qué significa UML?
Unified Modeling Language
Lenguaje unificado de modelado
¿Qué es Jakarta EE Core Profile?
Una versión más ligera y optimizada de la plataforma completa Jakarta EE. Está diseñada para ser utilizada en entornos donde no se requieren todas las capacidades y complejidades de la plataforma completa, proporcionando solo las APIs y tecnologías más esenciales y comunes.
Jakarta Authentication
Se utiliza para la autenticación y autorización de usuarios en aplicaciones Jakarta EE, gestionando permisos y roles.
Jakarta Batch
Se utiliza para definir y ejecutar procesos por lotes, adecuados para el procesamiento en masa de grandes volúmenes de datos.
Jakarta CDI (Contexts and Dependency Injection)
Proporciona un marco para la inyección de dependencias y la gestión del ciclo de vida de los componentes en aplicaciones Jakarta EE.
Jakarta EE (Enterprise Edition)
Es la especificación principal que define el conjunto completo de APIs y tecnologías para el desarrollo de aplicaciones empresariales robustas y escalables.
Jakarta Faces (JSF)
Se utiliza para construir interfaces de usuario basadas en componentes web, facilitando el desarrollo de aplicaciones web con una arquitectura MVC.
Jakarta JAX-RS
Proporciona una API para crear servicios web RESTful, permitiendo la construcción de aplicaciones web basadas en REST.
Jakarta JSON Binding (JSON-B)
Se utiliza para la serialización y deserialización de objetos Java a JSON y viceversa, facilitando la manipulación de datos JSON.
Jakarta JSON Processing (JSON-P)
Proporciona una API para el procesamiento y manipulación de datos JSON, permitiendo el análisis y generación de JSON en aplicaciones Java.
Jakarta Persistence (JPA)
Se utiliza para la gestión de datos relacionales mediante mapeo objeto-relacional (ORM), facilitando la persistencia de objetos Java en bases de datos.
Jakarta Security
Proporciona un conjunto de APIs para la seguridad de aplicaciones, incluyendo autenticación, autorización y gestión de identidades.
Jakarta Servlet
Define una API para la creación de servlets, que son componentes de servidor utilizados para manejar solicitudes y respuestas web.
Jakarta Transactions (JTA)
Proporciona una API para la gestión de transacciones distribuidas, asegurando la consistencia y atomicidad en operaciones que involucran múltiples recursos.
Jakarta WebSocket
Permite la comunicación bidireccional entre clientes y servidores a través de sockets web, facilitando aplicaciones web interactivas en tiempo real.
Jakarta Messaging (JMS)
Proporciona una API para la comunicación asincrónica basada en mensajes, permitiendo el intercambio de mensajes entre componentes distribuidos.
Jakarta Connectors (JCA)
Proporciona una arquitectura para conectar aplicaciones Jakarta EE con sistemas de información empresariales (EIS), permitiendo la integración de recursos heterogéneos.
MicroProfile
Ofrece un conjunto de APIs y tecnologías optimizadas para el desarrollo de microservicios en la nube, mejorando la experiencia de desarrollo y despliegue de aplicaciones Jakarta EE en entornos de microservicios.
Jakarta Mail
Proporciona una API para el envío y recepción de correos electrónicos, facilitando la integración de funcionalidades de correo en aplicaciones Jakarta EE.
Jakarta Activation (JAF)
Permite la detección y activación de tipos de datos basados en su contenido MIME, facilitando el manejo de datos en aplicaciones Jakarta EE.
Jakarta SOAP with Attachments (SAAJ)
Proporciona una API para la creación y manipulación de mensajes SOAP con adjuntos, permitiendo la comunicación entre servicios web basados en SOAP.
Jakarta XML Binding (JAXB)
Permite la conversión entre objetos Java y documentos XML, facilitando el mapeo de datos XML a objetos Java y viceversa.
Jakarta XML Web Services (JAX-WS)
Proporciona una API para la creación y consumo de servicios web basados en XML y SOAP, facilitando la interoperabilidad entre aplicaciones distribuidas.
Herramientas de análisis de seguridad y calidad de código:
SonarQube:
Herramienta de análisis de código estático que detecta errores, vulnerabilidades y problemas de calidad en el código.
Checkmarx:
Plataforma de análisis de seguridad de aplicaciones que identifica vulnerabilidades en el código fuente.
Fortify Static Code Analyzer (SCA):
Herramienta de análisis estático de código que ayuda a identificar vulnerabilidades de seguridad en el código fuente.
Veracode:
Plataforma de análisis de seguridad de aplicaciones que ofrece análisis estático y dinámico.
PMD:
Herramienta de análisis de código estático que encuentra errores comunes de programación y patrones de diseño defectuosos.
FindBugs / SpotBugs:
Herramienta de análisis estático de código para Java que encuentra errores potenciales en el código.
ESLint:
Herramienta de análisis de código estático para JavaScript que detecta patrones problemáticos y aplica reglas de estilo.
Bandit:
Herramienta de análisis de seguridad estática para Python que encuentra vulnerabilidades comunes en el código.
Brakeman:
Herramienta de análisis de seguridad estática para aplicaciones Ruby on Rails que detecta vulnerabilidades específicas del framework.
CodeClimate:
Plataforma de análisis de código que proporciona métricas de calidad y seguridad para múltiples lenguajes de programación.
Herramientas de Pruebas de Software
JUnit:
Un framework de pruebas unitarias para Java que permite crear y ejecutar tests automatizados.
JMeter:
Una herramienta de pruebas de carga y rendimiento que simula múltiples usuarios y mide el rendimiento de aplicaciones web.
TestNG:
Un framework de pruebas inspirado en JUnit, diseñado para cubrir todas las categorías de pruebas: unitarias, funcionales, end-to-end, etc.
Selenium:
Un conjunto de herramientas para la automatización de navegadores web, utilizado principalmente para pruebas de aplicaciones web.
Cucumber:
Una herramienta que soporta el desarrollo impulsado por el comportamiento (BDD), permitiendo escribir pruebas en lenguaje natural.
Mockito:
Un framework de simulación para pruebas unitarias en Java, que permite crear objetos simulados y definir su comportamiento.
Herramientas de análisis de seguridad y calidad de código:
SonarQube
Checkmarx
Fortify Static Code Analyzer (SCA)
Veracode
PMD
FindBugs / SpotBugs
ESLint
Bandit
Brakeman
CodeClimate
Herramientas de Pruebas de Software
JUnit
JMeter
TestNG
Selenium
Cucumber
Mockito
Superglobals en PHP:
$_GLOBALS: Una referencia a todas las variables disponibles en el ámbito global del script.
$_SERVER: Información del servidor y del entorno de ejecución, como cabeceras, rutas y ubicaciones de scripts.
$_GET: Variables pasadas al script a través de la URL (método HTTP GET).
$_POST: Variables pasadas al script a través de un formulario HTML (método HTTP POST).
$_FILES: Variables relacionadas con archivos subidos a través de un formulario HTML.
$_COOKIE: Variables pasadas al script a través de cookies HTTP.
$_SESSION: Variables disponibles en la sesión actual del usuario.
$_REQUEST. Esta superglobal contiene datos que han sido enviados al script a través de métodos HTTP GET, POST y cookies.
$_ENV: Variables de entorno pasadas al script.
$php_errormsg: Una variable global que contiene el último mensaje de error generado por PHP.
Atributos de las cookies
Domain:
Especifica el dominio para el cual la cookie es válida.
SameSite:
Previene que la cookie sea enviada junto con solicitudes iniciadas por sitios externos.
Secure:
Indica que la cookie solo debe ser enviada a través de conexiones seguras (HTTPS).
HttpOnly:
Indica que la cookie no debe ser accesible a través de JavaScript.
Path:
Especifica la ruta en el servidor para la cual la cookie es válida.
Expires:
Define la fecha y hora de expiración de la cookie.
Max-Age:
Especifica el tiempo en segundos hasta que la cookie expire.
Atributo de una cookie “Domain”:
Especifica el dominio para el cual la cookie es válida.
Atributo de una cookie “SameSite”:
Previene que la cookie sea enviada junto con solicitudes iniciadas por sitios externos.
Atributo de una cookie “Secure”:
Indica que la cookie solo debe ser enviada a través de conexiones seguras (HTTPS).
Atributo de una cookie “HttpOnly”:
Indica que la cookie no debe ser accesible a través de JavaScript.
Atributo de una cookie “Path”:
Especifica la ruta en el servidor para la cual la cookie es válida.
Atributo de una cookie “Expires”:
Define la fecha y hora de expiración de la cookie.
Atributo de una cookie “Max-Age”:
Especifica el tiempo en segundos hasta que la cookie expire.
Multiplicidades en diagramas de clases UML:
1
Exactamente uno
0..1
Cero o uno
1..N
Uno o más
0..N
Cero o más
N
Exactamente N (donde N es un número entero)
En UML, una instancia es:
Un objeto específico de una clase.
En términos de bases de datos, esto es similar a un registro o una tupla en una tabla. Cada instancia (o registro/tupla) representa una fila individual en la tabla que contiene datos específicos de un objeto de la clase.
En UML, la multiplicidad es:
indica cuántas instancias (o registros/tuplas) de una clase pueden estar asociadas con una instancia (o registro/tupla) de otra clase en una relación.
git commit
Este comando guarda los cambios en el repositorio local. Crea un nuevo commit en tu historial de commits local, con un mensaje descriptivo sobre los cambios realizados. Este commit solo afecta a tu repositorio local y no se refleja en el repositorio remoto.
git push
Este comando envía los commits de tu repositorio local al repositorio remoto. Es decir, actualiza el repositorio remoto con los commits que has hecho localmente. Solo los cambios que han sido “commiteados” (es decir, guardados con git commit) pueden ser empujados al repositorio remoto.
Última version de UML
2.5.1
git pull
Actualiza tu repositorio local con los cambios del repositorio remoto. Es una combinación de git fetch (descargar cambios del remoto) y git merge (fusionar esos cambios en tu rama actual).
git revert
Crea un nuevo commit que deshace los cambios de un commit anterior. Es útil para deshacer cambios en el historial sin eliminar el historial de commits.
git reset
Deshace commits y puede modificar el índice y el directorio de trabajo. Tiene diferentes modos (–soft, –mixed, –hard) que determinan hasta qué punto se deshacen los cambios (solo el commit, el commit y el índice, o el commit, el índice y el directorio de trabajo).
git fetch
Descarga los cambios del repositorio remoto a tu repositorio local, pero no los fusiona automáticamente en tu rama actual. Te permite ver qué cambios se han hecho en el remoto antes de fusionarlos.
¿Que representan los diagramas estructurales en UML?
Muestran la estructura estática del sistema y sus partes en diferentes niveles de abstracción.
Existen 7 tipos de diagramas de estructura.
¿Que representan los diagramas de comportamiento en UML?
Muestran el comportamiento dinámico de los objetos en el sistema.
Existen 4 tipos de diagramas de comportamiento.
En UML, diagrama de comportamiento “de actividades”:
Representan los flujos de trabajo de forma gráfica. Pueden utilizarse para describir el flujo de trabajo empresarial o el flujo de trabajo operativo de cualquier componente de un sistema.
En UML, diagrama de comportamiento “de casos de uso”:
Los diagramas de casos de uso ofrecen una visión general de los actores involucrados en un sistema, las diferentes funciones que necesitan esos actores y cómo interactúan estas diferentes funciones.
En UML, diagrama de comportamiento “de máquina de estados”:
Describen el comportamiento de los objetos que actúan de manera diferente de acuerdo con el estado en que se encuentren.
En UML, diagrama de comportamiento “de interacción”:
Incluyen 4 tipos de diagramas:
Diagrama de secuencia:
Muestran cómo los objetos interactúan entre sí y el orden en que se producen esas interacciones.
Diagrama de comunicación:
Se centra en los mensajes pasados entre objetos.
Diagrama de tiempos:
Representan el comportamiento de los objetos en un marco de tiempo dado.
Diagrama global de interacciones:
Muestran una secuencia de diagramas de interacción.
En UML, diagrama de estructura “de clases”:
Muestra las clases en un sistema, atributos y operaciones de cada clase y la relación entre cada clase.
En UML, diagrama de estructura “de componentes”:
Muestra la relación estructural de los componentes de un sistema de software.
En UML, diagrama de estructura “de despliegue”:
Muestra el hardware de su sistema y el software de ese hardware.
En UML, diagrama de estructura “de objetos”:
Se utilizan para mostrar cómo se verá un sistema en un momento dado.
En UML, diagrama de estructura “de paquetes”:
Representa las dependencias entre los paquetes que componen un modelo.
En UML, diagrama de estructura “de estructura compuesta”:
Muestra la estructura interna de una clase.
Librerías/Frameworks de Java para Generación de PDF
iText
PDFBox
Librerías/Frameworks de Java para Criptografía
BouncyCastle
Librerías/Frameworks de Java para Logging
Log4j
Logback
SLF4J
Librerías/Frameworks de Java para Parsers XML y Procesors XSL
Xerces
Xalan
Woodstox
Apache FOP
Librerías/Frameworks de Java para Propósito general
Apache Commons
Guava (Google)
Librerías/Frameworks de Java para Peticiones HTTP a bajo nivel
Apache HttpComponents
Librerías/Frameworks de Java para JSON
Gson
Jackson
Librerías/Frameworks de Java para manejo documentos de Office
Apache POI
Librerías/Frameworks de Java para Detección y extracción de contenido
Apache Tika
Librerías/Frameworks de Java para ETL (extracción de información, transformación y carga de ficheros)
Pentaho Kettle
Biblioteca Java que reduce la verbosidad del código Java mediante la generación automática de métodos comunes, como getters, setters, toString, y equals.
Project Lombok
Pruebas unitarias en Java
mockito-core
Pruebas unitarias y de carga en Java
JUnit
Mockito
JMeter
Marco de pruebas en Java
TestNG
Herramienta para pruebas de aceptación en Java que permite escribir pruebas en lenguaje natural (Gherkin).
Cucumber
Conectar nuestro proyecto Java con BBDD
JDBC
Tipos de drivers JDBC
Tipo 1 Driver JDBC-ODBC Bridge: Usa ODBC para conectarse. Es lento y depende de ODBC.
Tipo 2 Driver Nativo-API: Usa una API nativa del sistema operativo. Más rápido, pero necesita bibliotecas nativas.
Tipo 3 Driver de Protocolo de Red Puro: Traduce llamadas JDBC a un protocolo de red específico del middleware. No necesita bibliotecas nativas.
Tipo 4 Driver de Protocolo de Base de Datos Puro: Implementa el protocolo de red de la base de datos. Es totalmente en Java y rápido.
¿Cuántos tipos de drivers JDBC hay?
4
Paquete java.sql
DriverManager
Para cargar un driver
Connection
Para establecer conexiones con las bases de datos
Statement
Para ejecutar sentencias SQL y enviarlas a las BBDD
PreparedStatement
La ruta de ejecución está predeterminada en el servidor de base de datos que le permite ser ejecutado varias veces
CallableStatement
Para ejecutar sentencias SQL de Procedimientos Almacenados.
ResultSet
Para almacenar el resultado de la consulta
Regla para recordar los drivers JDBC
Puente Nativo Medio Puro
Puente (Tipo 1 - JDBC-ODBC Bridge)
Nativo (Tipo 2 - API-Nativo)
Medio (Tipo 3 - Middleware)
Puro (Tipo 4 - Java Puro)
xjc:
Compilador que genera clases java a partir de un XSD
jdeps:
Analiza las dependencias de clases y módulos de Java
wsimport:
Generación de clases automáticas para los clientes de web services de tipo SOAP
jshell:
Consola Java que permite ejecutar un bloque de código
jcmd:
Permite enviar comandos específicos a la JVM
jmc:
Herramientas de monitorización de la JVM
javac:
(compilador): Traduce el código a bytecode
javap:
(Java Disassembler): Desensambla archivos .class para mostrar la información del bytecode
java:
(Java Launcher): intérprete
javadoc:
Genera documentación HTML
jar:
(Java Archive Tool): Empaqueta varios archivos .class y otros recursos en un archivo comprimido .jar
jdb:
(Java Debugger): depurador
jstat:
(Java Virtual Machine Statistics Monitoring Tool): Monitorea el uso de recursos de la JVM
jps:
(Java Virtual Machine Process Status Tool): Muestra información sobre los procesos Java en ejecución
Una clase abstracta en Java:
No se puede instanciar (es decir no se pueden crear objetos de la clase) pero si se puede heredar.
¿Qué es Keras?
API de redes neuronales escrita en lenguaje Python.
¿Qué es Openpyxl?
Biblioteca Python que permite leer archivos Excel y escribir en ellos.
¿Qué es Mahotas?
Biblioteca de procesamiento de imágenes y visión por computadora para Python.
¿Qué es Numpy?
Biblioteca para el lenguaje de programación Python que da soporte para crear vectores y matrices grandes multidimensionales, junto con una gran colección de funciones matemáticas de alto nivel para operar con ellas.
¿Qué es pip?
Sistema de gestión de paquetes utilizado para instalar y administrar paquetes de software escritos en Python.
¿Qué es SQLAlchemy?
Un ORM que trabaja como un puente que conecta el lenguaje de Python, con las bases de datos relacionales
¿Qué es Eloquent?
Es el ORM (mapeo objeto-relacional) integrado en Laravel
¿Que es iBatis?
Es un framework de persistencia para Java
En XPath, la / (barra simple)
Se utiliza para seleccionar nodos directos. Es decir, selecciona los elementos hijos directos del nodo actual o del nodo raíz si se usa al principio de la expresión XPath.
En XPath, la // (doble barra)
Se utiliza para seleccionar nodos en cualquier nivel de profundidad desde el nodo actual. Es decir, selecciona todos los elementos que coinciden con el nombre del nodo en cualquier lugar del documento, sin importar su nivel de anidación.
Paquete javax.json.stream
API de procesamiento JSON en Java, específicamente diseñada para el procesamiento de JSON en modo de streaming. Esto permite una manipulación eficiente y de bajo consumo de memoria de grandes documentos JSON, ya que los datos se procesan secuencialmente en lugar de cargarse completamente en memoria.
JsonGenerator, JsonParser y JsonLocation
¿Qué es TAW?
Herramienta automática on-line para analizar la accesibilidad de sitios web.
Servidores de aplicaciones
WebSphere
JBoss
Última versión de PHP
8.3.13
Última versión de MySQL
8.0.40
Última versión de PostgreSQL
17.1
Última versión de MariaDB
11.5.2
Guías CCN-STIC relacionadas con el Esquema Nacional de Seguridad
Serie 800
Inteligencia artificial de Apple
Intelligence
Inteligencia Artificial de Google
Gemini
Inteligencias artificiales
Apple Intelligence
Microsoft Copilot
OpenAI ChatGPT
Samsung Galaxy AI
Amazon Q
Meta AI (WhatsApp, Facebook, Instagram)
Spotify AI DJ
¿Qué es gitk?
Es un navegador de repositorio gráfico. Fue el primero de este tipo. Se puede considerar como un contenedor de GUI para git log . Es muy práctico para explorar y visualizar el historial de un repositorio.
UML, técnica para recordar los patrones estructurales
Estructurales: Piensa en la estructura de un edificio: clases (habitaciones), componentes (muebles), despliegue (planos), objetos (personas), paquetes (grupos de habitaciones), perfiles (personalización de habitaciones).
UML, técnica para recordar los patrones de comportamiento
Comportamiento: Piensa en las acciones dentro del edificio: actividades (tareas diarias), casos de uso (interacciones con el edificio), máquina de estados (cambios de estado de las personas).
UML, técnica para recordar los patrones de interacción
Interacción: Piensa en cómo interactúan las personas dentro del edificio: interacción (conversaciones), secuencia (orden de las conversaciones), comunicación (tipo de mensajes), tiempos (horarios de las actividades), global de interacciones (resumen de todas las interacciones).
GoF, técnica para recordar los patrones creacionales
Creacionales: Piensa en la creación de un producto: Abstract Factory (fábrica abstracta), Builder (constructor), Factory Method (método de fábrica), Prototype (prototipo), Singleton (único).
GoF, técnica para recordar los patrones estructurales
Estructurales: Piensa en la estructura de un edificio: Adapter (adaptador), Bridge (puente), Composite (compuesto), Decorator (decorador), Facade (fachada), Flyweight (ligero), Proxy (apoderado).
GoF, técnica para recordar los patrones de comportamiento
Comportamiento: Piensa en cómo se comportan o interactúan: Chain of Responsibility (cadena de responsabilidad), Command (comando), Interpreter (intérprete), Iterator (iterador), Mediator (mediador), Memento (recuerdo), Observer (observador), State (estado), Strategy (estrategia), Template Method (método plantilla), Visitor (visitante).
Nivel 0 de un DFD
También se lo llama Diagrama de contexto. Es un panorama básico de todo el sistema o proceso que se está analizando o modelando. Está diseñado para ser una vista rápida que muestra el sistema como un único proceso de nivel alto.
Nivel 1 de un DFD
Desglose de piezas más detallado del diagrama a nivel de contexto. Destacarás las principales funciones que el sistema lleva a cabo, a medida que desgloses el proceso de alto nivel del diagrama de contexto en sus subprocesos.
Nivel 2 de un DFD
Profundiza un paso más hacia partes del Nivel 1. Puede requerir más texto para alcanzar el nivel necesario de detalle acerca del funcionamiento del sistema.
JAXB
Java Architecture for XML Binding (JAXB) permite a los desarrolladores Java asignar clases de Java a representaciones XML. JAXB proporciona dos características principales: la capacidad de serializar las referencias de objetos Java a XML y la inversa, es decir, deserializar XML en objetos Java
La cabecera MIME (Multipurpose Internet Mail Extensions), campo Content-Type
multipart/digest: Este subtipo permite que en un solo mensaje se contengan varios submensajes, típicamente utilizados para agrupar varios mensajes de correo en un solo mensaje.
multipart/mixed: Este subtipo se utiliza para combinar varias partes en un solo mensaje. Las partes pueden ser de diferentes tipos de contenido, y se presentan en el orden en que aparecen en el mensaje. No se limita a mensajes de correo electrónico.
multipart/parallel: Este subtipo permite que las subpartes del mensaje se puedan ver simultáneamente. Es útil para enviar contenido que debe ser presentado al mismo tiempo, como múltiples imágenes que forman una galería.
multipart/alternative: Este subtipo permite incluir en un mismo mensaje una única información en varios formatos. Por ejemplo, un mensaje puede contener una versión en texto plano y una versión en HTML del mismo contenido, permitiendo al cliente de correo elegir cuál mostrar.
¿Qué es SWEBOK?
Software Engineering Body of Knowledge, es un documento creado por la Software Engineering Coordinating Committee, promovido por el IEEE Computer Society, que se define como una guía al conocimiento presente en el área de la Ingeniería del Software.
¿Cómo comentar una línea en JSON?
El formato de datos JSON no admite comentarios.
¿Cómo comentar una línea en YAML?
#
¿Cómo comentar una línea en XML?
<!-- comentario -->
¿Bajo qué norma ISO se enmarca Métrica Versión 3?
ISO 12207
Paquete javax.xml.crypto
Clases comunes para criptografía XML.
¿Qué es una endpoint en SOAP?
La ubicación del Servicio Web en la red
¿Qué es OpenAPI?
Es un estándar para la descripción de las interfaces de programación, o application programming interfaces (API).
¿Qué es la multiprogramación?
Dos o más procesos pueden alojarse en la memoria principal y ser ejecutados concurrentemente por el procesador o CPU.
¿Qué es el Tree Shaking?
Término que se utiliza comúnmente en el contexto de JavaScript para la eliminación de código muerto
Tipos de objetos fundamentales en Git
Tree: Representa una estructura de directorios y contiene referencias a otros objetos como blobs y otros árboles.
Blob: Representa el contenido de un archivo.
Commit: Representa un punto en la historia del repositorio, incluyendo un mensaje de commit, la referencia a un árbol y referencias a commits padres.
Tag: Una versión o un punto específico en la historia del proyecto
SCV centralizados
Subversion (SVN)
Perforce
CVS
ClearCase
Team Foundation Server
SCV distribuidos
Git
Mercurial
Bazaar
Darcs
Fossil
¿Qué es asmx?
Servicios web de Microsoft.
Proporciona la capacidad de crear servicios web que envían mensajes mediante el Protocolo simple de acceso a objetos (SOAP)
Partes de un mensaje SOAP
Envelope
Header
Body
Fault
Cacheabilidad:
Las respuestas de una API REST pueden ser marcadas como cacheables o no, lo que permite mejorar el rendimiento reduciendo la necesidad de repetir solicitudes idénticas.
Las respuestas se pueden cachear a través de encabezados HTTP como Cache-Control y Expires
Arquitectura Hexagonal
Arquitectura de puertos y adaptadores.
Separar una aplicación software en distintas capas, cada una con su propia responsabilidad.
Dominio
Aplicacion
Infraestructura
¿Qué es Web Worker?
Un script que se ejecuta en segundo plano, sin afectar o bloquear el desempeño de nuestra página web.
¿Qué es Web Storage?
Permite almacenar elementos clave/valor de una forma sencilla en la memoria del navegador y que estos elementos estén disponibles a lo largo de la sesión de un usuario. Esto nos evita la necesidad de utilizar cookies.
¿Qué es Server-Sent Events (SSE)?
Permiten a los servidores web enviar notificaciones de eventos en tiempo real al navegador en una respuesta HTTP de larga duración.
¿Qué es un hilo o thread?
Una unidad de ejecución dentro de un proceso
Un hilo o thread en Java:
Se inicia con start()
run() contiene el código que se ejecutará en el hilo, pero llamarlo directamente no iniciará un nuevo hilo; en su lugar, ejecutará el código en el hilo actual.
API de Java para desarrollar servicios Web SOAP
JAX-WS (paquete javax.jws, javax.xml.ws)