Prueba de nivel PHP

Bueno, como muchos sabéis el mes de Febrero, fue un mes muy divertido, llamadas de consultoras, ofertas de trabajo y mil historias más.

En una de estas llamadas, me comentaron que me tenían que hacer una prueba de nivel de desarrollador, que me mandarían el examen y que por favor me diera priesa en enviársela porque al cliente le había gustado mucho mi CV.

¡Pues manos a la obra!

Recibí el correo, con todos los datos y esta última frase

“Una vez lo reciba, lo enviamos a validación técnica, y vuelvo a ponerme en contacto contigo para comentarte como continuamos”

Vaya, parecía que había prisa, así que ese mismo día realice todos los ejercicios y al día siguiente la prueba.

Toca esperar y seguir con mi vida.

Una semana después, recibí su correo y cuál fue mi sorpresa.

“Disculpa la demora en contestar a tu correo, pero en estos días me he encontrado fuera de la oficina.
Si te parece bien remito lo que me envías al responsable del proyecto y te comento algo entre mañana y el lunes.”

A día siguiente, me comentaron que el puesto estaba cubierto y que no cubría sus expectativas.

Conclusión

La persona que se pone en contacto conmigo, me dice que mi CV le gusta, y que me manda todos los ejercicios y que por favor no me demore, que cuanto antes se lo mande mejor. Al día siguiente tiene todo, y hasta una semana después no lo manda al cliente para validar. Mi pregunta es, ¿Por qué si corría tanta prisa no envió mi prueba hasta después de una semana? Yo tenía trabajo, pero si en ese momento me encuentro en otra situación, el palo es abrumador y mmi moral podía haberse roto contra el suelo.

Bueno, ya que hice los ejercicios los voy a poner aquí por si le puede ayudar a alguien. No voy a poner todos y no serán iguales pero si similares a lo que me enviaron, voy a poner solo unos pocos 3 de cada módulo, PHP, Linux y Jquery + CSS

PHP

Ejercicio 1

Se tiene un fichero con nombre read_file.log en la ruta /var/logs/. El fichero contiene una línea para cada evento surgido en un proceso de backend en el que se almacenan errores. Se pide escribir un script que sea capaz de leer las líneas de error del fichero read_file.log y escribirlas en un fichero dentro del mismo directorio con nombre error_read_file.log

El contenido del fichero read_file.log sigue un patrón establecido y tiene este aspecto:

2015/10/22 – 22:33:12#OK#File /tmp/temp1.txt processed

2015/10/22 – 22:37:51#OK#File /tmp/temp2.txt processed

2015/10/22 – 22:41:03#ERROR#File /tmp/temp3.txt does not exist

2015/10/22 – 23:15:13#OK#File /tmp/temp4.txt processed

2015/10/23 – 00:03:12#ERROR#File /tmp/temp5.txt not readable, permission denied

2015/10/23 – 00:12:06#OK#File /tmp/temp6.txt processed

El fichero read_file.log se limpia cada día, pero se quiere que el fichero error_read_file.log vaya almacenando todas las líneas de error que hayan surgido.

<?php
// Ejemplo leyendo linea por linea buscando la pabra ERROR para concatenarlo al fichero error_read_file.log
try{
$ruta ="XXXXXXXXXXXXXXXXXXXXXXXXXx";
$fp = fopen($ruta. "read_file.log", "r");
$elementos_con_error = array();

while(!feof($fp)) {
     $linea = fgets($fp);
     $buscar_error = strrpos($linea, "#ERROR");
     if ( $buscar_error >0 ){
       //Error encontrado
       $elementos_con_error[] = $linea;
     }
}
//cerramos el fichero
fclose($fp);
//Abrimos el fichero una sola vez, asi no lo tenemos que dejar abierto durante todo el proceso
$file = fopen($ruta. "error_read_file.log", "a");
    foreach($elementos_con_error as $linea){
    fwrite($file, $linea);
}
fclose($file);
} catch (Exception $e) {
     echo 'Excepción capturada: ',  $e->getMessage(), "\n";
}
?>

Y otra forma, para ya que nos ponemos

<?php
// Ejemplo leyendo linea por linea buscando la palabra ERROR para concatenarlo al fichero error_read_file.log
try{
$ruta ="XXXXXXXXXXXXXXXXXXXXXXXXX";
$file = fopen($ruta. "error_read_file_v2.log", "a");
$fp = fopen($ruta. "read_file.log", "r");
while(!feof($fp)) {
$linea = fgets($fp);
//todos los logs siguen una pauta separacion de #
$comprobar_linea = explode ("#",$linea);
if (count($comprobar_linea)>0){
     if($comprobar_linea[1]=="ERROR"){
      fwrite($file, $linea);
     }
}
}

//cerramos los ficheros
fclose($fp);
fclose($file);
} catch (Exception $e) {
    echo 'Excepción capturada: ',  $e->getMessage(), "\n";
}
?>

Ejercicio 2

2.Se tiene un fichero XML al cual se quiere acceder para recoger cierta información. El fichero XML tiene una estructura:

<?xml version="1.0" encoding="UTF-8"?>
<messages>
<note id="501">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
<note id="502">
<to>Jani</to>
<from>Tove</from>
<heading>Re: Reminder</heading>
<body>I will not</body>
</note>
</messages>

a. Escriba el código necesario para recuperar o escribir por pantalla un listado de los títulos o headings de todos los mensajes almacenados en el fichero XML.

En PHP tenemos varias formas de leer y trabajar con XML , las funciones más comunes son SimpleXMLElement , simplexml_load_string, simplexml_load_file

<?php

// Ejemplo 2. Lectura de XML$ruta = "xxxxxxxxxxxxxxxxxxX\\ejercicio.xml";

try{

$note= simplexml_load_file($ruta);

foreach ($note as $nota){
echo "<b>".$nota->heading."</b><br>";
}

} catch (Exception $e) {
echo 'Excepción capturada: ', $e->getMessage(), "\n";
}

?>

Otra Forma

<?php

try{

$note = new SimpleXMLElement($ruta, NULL, TRUE);

foreach($note as $nota){
echo "<b>".$nota->heading."</br>"; // Will output the ID fine
}
} catch (Exception $e) {
echo 'Excepción capturada: ', $e->getMessage(), "\n";
}

?>

JAVASCRIPT Y JQUERY

Ejercicio 1
Mediante Javascript, ¿de qué manera se puede recuperar un elemento del DOM a través de su identificador?

<script>

function cambioByID() {
document.getElementById("ejemplo").innerHTML = "Has pulsado el bot&oacute;n";
}

function cambioByClass() {
document.getElementsByClassName("ejemplo1")[0].innerHTML = "Has pulsado el bot&oacute;n";
}

function cambioByName() {
document.getElementsByName("ejemplo2")[0].innerHTML = "Has pulsado el bot&oacute;n";
}

</script>

Les puse otros casos………………

Ejercicio 2

Utilizando Jquery, describa brevemente de qué manera se pueden recorrer los elementos de un array.
$.each( [ "elemento", "elemento1", "elemento2" ], function( i, l ){
  alert( "Index #" + i + ": " + l );
});

$.each({ name: "Carlos", lang: "PHP" }, function( k, v ) {
  alert( "nombre: " + k + ", valor: " + v );
});

Linux

Ejercicio 1

Se tiene el mismo fichero read_file.log en el directorio /var/log del mismo modo que en el primer problema, con el siguiente contenido:
2015/10/22– 22:33:12#OK#File /tmp/temp1.txt processed
2015/10/22– 22:37:51#OK#File /tmp/temp2.txt processed
2015/10/22– 22:41:03#ERROR#File /tmp/temp3.txt does not exist
2015/10/22– 23:15:13#OK#File /tmp/temp4.txt processed
2015/10/23– 00:03:12#ERROR#File /tmp/temp5.txt not readable, permission denied
2015/10/23– 00:12:06#OK#File /tmp/temp6.txt processed
grep "#ERROR" ejercicio.log >>nuevo.log

Un saludo a todos y espero solo espero que todos los que ahora mismo estéis buscando trabajo, lo encontréis y los que tengáis que hacer pruebas tomarlo como son, pero no le deis vueltas. Después de más de 15 años trabajando de desarrollador este tipo de pruebas me parecen absurdas, pero hay que hacerla……
Mañana os contare, la que me hicieron por teléfono, que esa es buena, un trabajo maravilloso con horario de 10:00 a 19:00 de lunes a viernes
.

Prueba de nivel PHP Modificado: junio 25th, 2018 por Carlos González Gurrea
1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (2 votos, promedio: 5,00 de 5)
Cargando...

Centro de preferencias de privacidad

    Almacenamiento y acceso a información

    El almacenamiento de información o el acceso a información ya almacenada en tu dispositivo como identificadores de publicidad, identificadores de dispositivo, cookies y tecnologías similares.

    google.com

    Personalización

    La recopilación y procesado de información sobre tu uso de este servicio para posteriormente personalizar la publicidad y/o el contenido para ti en otros contextos, como otras webs o apps, con el tiempo. Habitualmente el contenido de la web o la app se usa para hacer deducciones sobre lo que te interesa, lo que define la selección futura de publicidad y/o contenido.

    google.com

    Selección de anuncios, entrega, informes

    La recopilación de información y la combinación con información anteriormente recopilada para seleccionar y presentarte publicidad y para medir la entrega y efectividad de esa publicidad. Esto incluye usar información recopilada anteriormente sobre tus intereses para seleccionar anuncios, procesar datos sobre qué anuncios se mostraron, con qué frecuencia se mostraron, cuando y dónde se mostraron y si llevaste a cabo alguna acción relacionada con el anuncio, como por ejemplo hacer clic en un anuncio o hacer una compra. Esto no incluye la personalización, que es la recopilación y procesado de información sobre el uso que haces de este servicio para posteriormente personalizar publicidad y/o otros contenidos para ti en otros contextos, como webs o apps, con el tiempo.

    google.com

    Selecciones de contenido, entrega, informes

    La recopilación de información y combinación con información previamente recopilada para seleccionar y presentarte contenido y para medir la entrega y efectividad de ese contenido. Esto incluye el uso de información recopilada anteriormente sobre tus intereses para seleccionar contenido, procesar datos sobre qué contenido se mostró, con qué frecuencia o durante cuánto tiempo se mostró, dónde y cuándo se mostró y si llevaste a cabo alguna acción relacionada con el contenido, como por ejemplo hacer clic en contenido. Esto no incluye la personalización, que es la recopilación y procesado de información sobre el uso que haces de este servicio para posteriormente personalizar contenido y/o publicidad para ti en otros contextos, como webs o apps, con el tiempo.

    google.com