Programador Web & SEO – Madrid

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
Salir de la versión móvil