Está en la página 1de 21

Nombre: _________________________

Nota: ______ / ______

Primer parcial

Este examen consta de 24 cuestiones que deben responderse secuencialmente, una por
página, sin posibilidad de vuelta atrás. Con un tiempo máximo de 75 minutos. Las
preguntas relacionadas con código necesitarán más tiempo que las demás.

La calificación máxima que puede obtenerse es un 10.

Cada cuestión solo tiene una respuesta válida. Si la respuesta proporcionada es correcta,
aporta 0.4167 a la calificación del examen. Las tres primeras cuestiones con respuestas
erróneas no rebajarán la puntuación obtenida. Sin embargo, los fallos subsiguientes sí lo
harán: 0.1389 puntos cada uno.

El código fuente proporcionado no debe ser copiado en un fichero para su ejecución


posterior. El tiempo disponible para completar el examen es limitado y no permitirá ese
tipo de ejecuciones.

Parte 1

1
Indica cuál de las siguientes afirmaciones relativas a los Sistemas Distribuidos es
FALSA:

A.
Un Sistema Distribuido simplifica el desarrollo del software

B.
Un Sistema Distribuido facilita la compartición de recursos

C.
Un Sistema Distribuido mejora el rendimiento

D.
Un Sistema Distribuido permite la creación de servicios robustos

Parte 2
2
Con relación a los roles en el ciclo de vida de un servicio, el encargado de decidir
las características del servicio, los componentes que lo constituyen, y cómo debe
configurarse y administrarse es el:

A.
desarrollador

B.
usuario

C.
administrador

D.
proveedor

3
En cuanto al concepto de elasticidad en Cloud Computing:

A.
Se define como la capacidad de ajustar de forma automática e inmediata los
recursos asignados a cada servicio.

B.
Corresponde a la capacidad de aceptar o no determinadas solicitudes.

C.
Es la capacidad de redirigir de forma automática las solicitudes hacia el
servicio que decida el sistema para garantizar un mejor equilibrado de carga.

D.
Todas las demás opciones son ciertas.

Parte 3
4
Se ha estudiado Wikipedia como un ejemplo de sistema cuya arquitectura ha
evolucionado para garantizar escalabilidad. Indica cuál de los siguientes
mecanismos de Wikipedia NO contribuye a la escalabilidad:

A.
Uso del patrón broker/workers

B.
Caché de páginas frecuentes

C.
Equilibrado de carga

D.
Mecanismos de auditoría

Parte 4

5
En el modelo de programación asincrónica:

A.
Implantar las acciones exige una gestión adecuada del estado (mediante
clausuras) que dificulta seriamente la escalabilidad.

B.
Si una guarda (evento) habilita varias acciones (callbacks), entonces a cada
acción se asocia un hilo diferente para su ejecución concurrente.

C.
Las acciones (callbacks) habilitadas se encolan para su ejecución secuencial,
no necesitando implantar mecanismos de control de concurrencia.

D.
Una guarda (evento) solamente puede habilitar una acción (implantada
mediante un callback).
6
Sea e1 una constante y ev un emisor de eventos (resultado de EventEmitter).
Elige la única afirmación FALSA entre las siguientes: 

A.
La ejecución de ev.on(e1, f) no provoca nunca la ejecución inmediata del
listener f

B.
ev.emit(e1) provocará la ejecución de todos los listeners f mencionados en
operaciones ev.on(e1, f)

C.
El primer listener a ejecutar tras un ev.emit(e1) se seleccionará en un turno
posterior al actual, dado que pueden quedar eventos anteriores por
procesar.

D.
Si un listener es asociado al evento después de que éste se produzca N
veces, no será informado sobre esas N ocurrencias anteriores.

Parte 5
7
Considérese el siguiente programa JavaScript, para el que suponemos que
existen tres ficheros de texto llamados prueba1, prueba2 y prueba3:

¿Cuántos turnos diferentes del bucle de eventos ejecutan al menos una


instrucción console.log?

A.
1

B.
7

C.
Ninguna de las demás opciones es correcta.

D.
4

Parte 6
8
Considérese el siguiente programa, que está incompleto:

Se quiere completar, escribiendo el código de la función callback, tal que al


ejecutarse el programa se muestre el tamaño del directorio leído (la suma de los
tamaños de todos los ficheros en dicho directorio, pero no en sus subdirectorios).
Una implementación correcta sería:

A.

B.

C.

D.

 
9
Considérese el siguiente programa JavaScript, para el que suponemos que
existen tres ficheros de texto llamados prueba1, prueba2 y prueba3:

¿Cuántos ficheros "nuevo_" se han añadido la tercera vez que se muestre Sal
(seguido de un número) por pantalla?

A.
Exactamente 3.

B.
1 ó 2 ó 3, solo estos tres casos son posibles.

C.
1 ó 2, solo estos dos casos son posibles.

D.
0 ó 1, solo estos dos casos son posibles.

Parte 7
10
Considérese el siguiente programa:

La salida en consola al ejecutar el programa es:

A.

B.

C.

D.

Parte 8
11
Considérese el siguiente programa, llamado netClient.js. Es un programa donde el
usuario, vía teclado, escribe el nombre de un fichero, se conecta a un servidor net, le envía el
nombre del fichero y espera a que el servidor le devuelva el contenido del fichero (caso de existir)
o un mensaje de error que incluye el nombre del fichero (si el fichero no existe). Recibida una
respuesta, el cliente puede solicitar un nuevo fichero.

Ejemplo de ejecución (donde se ha supuesto que en el servidor existe un fichero de nombre “Hello.txt” cuyo
contenido es “Hola a todos” y que no existe un fichero de nombre “Haskell.txt”):

Se dispone del siguiente código, para el servidor net, a completar:

¿Cuál de los siguientes códigos completaría correctamente el servidor net para


proporcionar la funcionalidad descrita?

A.

B.

 
C.

D.

Parte 9

12
Se desea implantar un servidor que reciba peticiones mediante un socket
ZeroMQ. También se podrá, si el patrón elegido fuera unidireccional, utilizar un
segundo socket para enviar las respuestas a los clientes. Si queremos garantizar
que cada respuesta se envíe al cliente que envió su petición asociada, ¿qué
patrón, de entre los siguientes, podría garantizar eso con mejores prestaciones si
se prevé que habrá muchos clientes?

A.
REQ-REP.

B.
Todas las opciones son válidas.

C.
PUSH-PULL.

D.
PUB-SUB.
13
En un sistema distribuido encontramos servidores con direcciones IP y puertos
conocidos, junto con clientes no conocidos de antemano, que demandan sus
servicios. Si la conexión que se ha de establecer entre ellos debe permitir la
comunicación síncrona bidireccional, ¿cuál de estas afirmaciones es cierta?

A.
El servidor no puede hacer connect a su IP y puerto para poder conectar con
el cliente.

B.
El cliente debe hacer bind o connect a la IP y puerto del servidor,
dependiendo de que inicie la conexión antes o después que la del servidor.

C.
Cliente y servidor han de negociar cómo establecer la conexión, para lo que
debe tomarse en consideración la IP y puerto del servidor.

D.
El servidor debe hacer bind o connect a todos los puertos de su IP
independientemente de que su conexión se inicie antes o después que la del
cliente.

Parte 10
14
Se pretende desarrollar un servicio de detección de fallos en un cluster con N
ordenadores, cuyas direcciones se conocen a la hora de iniciar el servicio. Para
ello, se va a desplegar en cada ordenador un proceso monitor desarrollado en
Node.js, que utilizará el módulo ZeroMQ.
Cada monitor envía periódicamente mensajes a todos los demás monitores y
comprueba que los mensajes de los demás le llegan. Cuando dejen de recibirse
mensajes, se sospechará que su nodo emisor ha fallado. ¿Qué y cuántos sockets
ZeroMQ serán necesarios para implantar ese servicio si nos interesara minimizar
el número total de sockets y el número de invocaciones a la operación send()?

A.
Cada monitor debe utilizar un socket PUB y un socket SUB.

B.
Cada monitor debe utilizar un socket PUB y N sockets SUB.

C.
Cada monitor debe utilizar un socket PUSH y un socket PULL.

D.
Cada monitor debe utilizar N sockets PUSH y N sockets PULL.
15
Se pretende desarrollar un servicio que utilice el modelo de replicación pasiva. En
la replicación pasiva existe una réplica primaria que recibe peticiones de los
clientes, las ejecuta localmente y después propaga sus modificaciones a otras
réplicas secundarias antes de responder al cliente.
En su versión más sencilla, esa propagación de modificaciones no requiere
ninguna respuesta de las réplicas secundarias si el protocolo de comunicaciones
es TCP. ¿Qué sockets ZeroMQ podrían utilizarse para implantar esos procesos si
se pretende minimizar el número de invocaciones a send()?

A.
REQ en clientes, REP en primario para interactuar con clientes, REQ en
primario para interactuar con secundarios, y REP en secundarios.

B.
REQ en clientes, REP en primario para interactuar con clientes, PUSH en
primario para interactuar con secundarios, y PULL en secundarios.

C.
PUSH en clientes, PULL en primario para interactuar con clientes, PUB en
primario para interactuar con secundarios, y SUB en secundarios.

D.
REQ en clientes, REP en primario para interactuar con clientes, PUB en
primario para interactuar con secundarios, y SUB en secundarios.

Parte 11
16
Considerando este programa (un servidor de chat) que va a ser iniciado en un
ordenador cuya dirección IP es 158.42.21.67:

Seleccione qué instrucciones debería utilizar el programa cliente que va a ser


iniciado en un ordenador cuya dirección IP es 158.42.21.78 para establecer los
canales de comunicación adecuados con ese servidor:

A.
Si está en otro ordenador no podrá utilizar nada para interactuar con el
servidor, pues la dirección "*" evita ese tipo de interacciones.

B.

C.

D.

Parte 12
17
Considérese los siguientes dos programas p.js y s.js:
p.js:

s.js:

A.
El programa "p.js" publica un mensaje cada 10 milisegundos y el programa
"s.js" se subscribe a los mensajes que empiecen por "1".

B.
Suponiendo que ejecutamos ambos programas. Primero lanzamos "s.js" sin
argumentos, y después de 20 segundos lanzamos "p.js". Suponiendo
también que después de lanzarlos a ejecución, ambos permanecen en
funcionamiento por tiempo indefinido, el programa que se subscribe, no
imprimirá nada pues perdió la publicación del número 1.

C.
Si lanzamos los siguientes programas, con los argumentos indicados:
node p.js
node s.js 1
node s.js a
Alguno de los programas "s.js" no imprimirá nada por la pantalla.

D.
Si lanzamos dos instancias del programa "p.js" y un programa "s.js", el
programa "s.js" imprimirá el doble de líneas por la pantalla que imprimiría si
únicamente lanzamos una instancia de "p.js".

Parte 13
18
El empleo de software de tipo middleware:

A.
Facilita la depuración de los sistemas, pues el middleware está libre de
errores.

B.
Facilita la interoperabilidad de las aplicaciones.

C.
Requiere que ejecutemos el middleware en cierto ordenador y la aplicación
que emplea el middleware será la aplicación cliente de dicho middleware.

D.
Exige que empleemos el mismo sistema operativo en todas las aplicaciones
que desarrollemos sobre dicho middleware.

Parte 14

19
Dado el siguiente programa, elija la afirmación correcta.

A.
Al acabar el programa se imprimirá como resultado, un valor mayor que 100.

B.
En algún momento durante la ejecución del programa, la variable res tomará
el valor '12'

C.
Al acabar el programa se imprimirá como resultado, un valor menor que 10.

D.
La duración del programa en ejecución será como mínimo 3 segundos
20
Dado el siguiente programa, elija la afirmación correcta.

A.
En algún momento durante la ejecución del programa, la variable res tomará
el valor '44'

B.
Al final del programa (justo antes de terminar el proceso) la variable res
terminará con valor '123'

C.
Al final del programa (justo antes de terminar el proceso) la variable res
terminará con valor '333'

D.
Al acabar el programa se imprimirá como resultado, el valor 61.5

Parte 15
21
En el API de nodejs, readFileSync…

A.
Bloquea el programa nodejs hasta que todo el contenido del fichero es leído
en memoria, devolviendo ese contenido como su valor de retorno.

B.
Llama a su callback cuando ha terminado de leer todo el contenido del
fichero en memoria

C.
Espera a que concluyan todas las operaciones readFile que aún están
pendientes, y llama a su callback.

D.
Ninguna de las demás opciones es válida.

Parte 16
22
En la práctica 1 debíamos completar un programa emisor3.js en el que se
ejecutaban sucesivamente múltiples etapas de una duración entre 2 y 5
segundos. Esa duración se inicia cuando finaliza la etapa anterior y debe ser
diferente en cada etapa. Si hemos escrito una función emisiones() que contiene
todas las instrucciones a ejecutar en cada etapa y no estuviera limitado el
número de etapas, ¿cómo podríamos gestionar la generación de cada etapa y su
duración?

A.
Con este código fuera de la función emisiones():

B.
Con este código fuera de la función emisiones():

C.
Con este código como última línea dentro de la función emisiones():

D.
Ninguna de las demás opciones es válida.

Parte 17
23
Para resolver el problema del proxy programable se necesita un cliente
(navegador), un proxy, un programador, y varios servidores. Suponemos que el
usuario, con cierta frecuencia, lanza un nuevo navegador. Para observar los
efectos generados por el programador...:

A.
hay que lanzar los navegadores antes que el proxy.

B.
hay que lanzar el proxy antes que los navegadores.

C.
hay que lanzar el proxy antes que los servidores

D.
hay que lanzar el programador entre los inicios de dos navegadores
24
En la práctica 1 en el código de “Proxy.js” que se suministra, los clientes del
proxy pueden alcanzar el proxy…

A.
Tan sólo desde el mismo host que el proxy.

B.
Desde el host “158.42.4.23”.

C.
Ninguna de las demás opciones es válida.

D.
Desde cualquier host en la red de área local donde está el host del proxy

También podría gustarte