Una amplia descripción de las entrevistas de Python. Consejos y trucos

Hola a todos!


Brevemente sobre ti. Soy matemático por educación, pero programador por profesión. En el campo del desarrollo desde 2006. Aunque, desde que comenzaron a estudiar programación en la escuela, comencé a escribir mis primeros programas y juegos en la escuela (aproximadamente, desde 2003). Sucedió que tuve que aprender y trabajar en varios idiomas. Si no tiene en cuenta las conferencias universitarias sobre C, C ++, BASIC, Pascal y Fortran, realmente trabajé con Delphi (más de 6 años), PHP (más de 5 años), Embedded (Atmel + PIC durante aproximadamente 2.5 años) y la última vez Python + un poco de Scala. Por supuesto, tampoco puedes prescindir de las bases de datos.


¿Para quién es este artículo? Para todos los que, como yo, quisiéramos (o quisiéramos) encontrar un trabajo decente y bien remunerado con un proyecto interesante, un equipo genial y todo tipo de cosas buenas. Y también para aquellos que desean elevar su nivel de conocimiento y habilidad.


¿Cómo surgió este artículo? Después de 3 semanas de entrevistas, búsquedas, estudios, noches de insomnio (a menudo pasaba por posibles eventos en mi cabeza, opciones de respuesta, etc.) recibí muchas ofertas. Los dos primeros tuvieron que ser rechazados, porque el plazo para tomar una decisión terminó, y estaba esperando ofertas de otras oficinas. Como resultado, me tomé un día específico para decidir y esperé los resultados de las entrevistas actuales y pasadas. Honestamente, mi elección fue bastante complicada, porque las opciones entre las que elegí eran generalmente muy atractivas. En general, decidí priorizar la dirección del desarrollo, en lugar de las condiciones y el proyecto. Incluso después de que se tomó la decisión (y la propuesta), otros continuaron viniendo (pero para mí no era importante).


Antes de cada entrevista, preparé bastante bien + conté esos lugares, las respuestas a preguntas sobre las cuales no sabía o no recordaba, o no lo descubrí hasta el final.


Aprecié las preguntas que realmente podrían mostrar mi comprensión (o malentendido) de algunos conceptos fundamentales. Desafortunadamente, tales preguntas podrían contarse con los dedos de ambas manos.


Al final, decidí que valía la pena recopilar toda esta experiencia y compartirla con otros.


Por supuesto, estas preguntas no agotan el conocimiento que todo desarrollador experimentado debería tener. Me parece que algunas cosas en la práctica rara vez se usan para preguntar constantemente sobre ellas. Además, probablemente no me equivoque si digo que más del 90% de las preguntas se buscan en Google de manera elemental durante 10-30 segundos.


Combiné algunas preguntas en una, para ahorrar tiempo y espacio.
También al final del artículo daré enlaces que me parecieron los más interesantes.


Contenido


Teoría general
  • La primera pregunta en la mayoría de las entrevistas es: "¿Qué es SOLIDO?" Honestamente, nunca pude recordar la decodificación completa de esta abreviatura, así que expliqué con mis propias palabras o le pedí a mi interlocutor que sugiriera al menos nombres en inglés, y luego puedo descifrar. Al principio, me pareció que el interlocutor me entendería y aceptaría tal variante de respuestas, pero por alguna razón, en dos casos, los chicos decidieron que no sabía la respuesta a esta pregunta (sería mejor no comentar más sobre esto (un pequeño rublo)). Personalmente, una vez confundí la inyección de dependencia con la inversión de dependencia.


  • La segunda pregunta típica: "¿Qué es REST?" y luego después de "¿Qué es Restfull?" o "¿Cuáles son las condiciones básicas?"
    Puedes encontrar tu respuesta. Personalmente, prefiero esta opción .


  • ¿Qué es el HTTP? ¿Qué métodos tiene él?


  • ¿Qué métodos HTTP son idempotentes y cuáles no?


  • Me gustó una pregunta sobre HTTP que nunca había encontrado en la práctica y, por lo tanto, no sabía. Suponga que tiene una lista bastante grande de páginas URL (como audio o video) que deben descargarse en el disco. Pero para cada uno de ellos debe verificar si hay suficiente espacio en la computadora para estos archivos. ¿Cómo usar HTTP (qué métodos)?
    La respuesta correcta es el método HEAD (lea sobre esto). Personalmente, di una respuesta que el interlocutor ni siquiera escuchó (u olvidó) y una búsqueda rápida mostró que también tenía razón (como una opción). Indiqué que usaría el método GET, pero para no descargar todo el archivo, indicaría el parámetro Range con un paso mínimo. Aunque esto solo funcionará si el servidor envía un parámetro Accept-Ranges distinto de cero en la respuesta. Escribo esto al hecho de que esta pregunta solo muestra si trabajé con tal tarea o no. Una segunda búsqueda dará una respuesta exhaustiva.


  • ¿Cuál es la diferencia entre autenticación y autorización? Honestamente, inmediatamente hice una pregunta retórica: "¿por qué te perdiste otra identificación?". Con esto traté cuidadosamente de dejarle claro al interlocutor que estaba al tanto de estos problemas.


  • ¿Cuál es la diferencia entre HTTP y HTTPS?


  • ¿Qué es un token CSRF?


  • ¿Qué formatos de datos conoce aparte de JSON, XML?
    Hay demasiados, así que no me limitaré a una lista específica.


  • ¿Qué es el jabón?
    Pregunta loca. No me gustan estos ¿Por qué preguntar qué se usa de vez en cuando, o ciertamente no en mi proyecto?


  • ¿Qué patrones de diseño conoces?
    Google para ayudarte;)


  • En una de las entrevistas sobre desarrollo de bajo nivel, se preguntó mucho sobre algoritmos.
    En general, es deseable comprender al menos aproximadamente qué es O-big al evaluar la complejidad de los algoritmos. También es probablemente deseable conocer los algoritmos básicos: búsqueda simple, búsqueda binaria, clasificación, clasificación rápida, trabajo con árboles (recorrido de ancho y profundidad). Un conocido me aconsejó que leyera el maravilloso libro "Algoritmos de Grokay. Aditya Bhargava". No pensé que fuera posible explicar cosas bastante complicadas de manera tan bella y simple. ¡Se lee de una vez (sinceramente)! Se lo recomiendo a cualquiera que, como yo, no se considere un algoritmo. Simplemente no hay palabras!



Pitón
  • ¿Qué es la PEP8? ¿Cómo te sientes acerca de él?


  • ¿Qué patrones de programación conoce y cómo se pueden implementar?


  • ¿Cuáles son las opciones para implementar la plantilla Singleton en Python?
    También le aconsejo que comprenda las desventajas de la implementación a través del decorador (especialmente para las pruebas). La forma más elegante y versátil, por supuesto, a través de metaclases.


  • Decoradores.
    Creo que será útil leer y comprender:



  • ¿Cómo implementa Python métodos públicos, privados y estáticos?


  • ¿Qué son las metaclases?
    Te aconsejo que leas completamente esto o aquello .


  • No preguntaron, pero aconsejo leer sobre las diferencias fundamentales entre la segunda y la tercera versión (al menos 2.7 y 3.4).


  • ¿Qué es nuevo ()? ¿Y en qué se diferencia de init ()? ¿En qué secuencia se ejecutan?


  • ¿Qué programas conoces para verificar el estilo del código? ¿Cuáles son los pros y los contras de ellos?
    Personalmente, trabajé con pylint, pychecker, pero mencioné tres principales: pychecker, pylint, pyflakes, porque ya había leído sobre ellos =) Por cierto, aquí está la última versión, que detalla las herramientas para analizar el código Python .


  • ¿Cómo se prueba el código? ¿Qué es burlarse?
    Personalmente, uso tox, unittest, nose o miro lo que dice Travis. Sobre simulacro de google mejor.


  • En cuanto a las pruebas, me gustaron las siguientes preguntas:


    • ¿Qué hacer si la función bajo prueba utiliza una conexión remota a servicios externos, que a veces ve un error de tiempo de espera, 404 y similares?
    • ¿Qué pasa si la función bajo prueba toma mucho tiempo para realizar operaciones repetidas dentro de ella? Por ejemplo, dentro del ciclo es de 1..1000000, donde se lee, escribe y calcula algo.
      Te aconsejo que leas sobre parches.

  • ¿Qué sabes de estructuras de datos en Python? ¿Cuáles son mutables / inmutables?
    Personalmente, ahora sé que hay muchos de ellos. Además de los típicos (dict, list, set, tuple), asegúrese de leer frozen_set, default_dict, order_dict (ya no es relevante para las nuevas versiones) y qué más habrá en la oficina. Muelle (sí, comience con él).


  • ¿Cómo funciona una tabla hash (diccionario)? ¿Qué son las colisiones y cómo lidiar con ellas?
    Creo que para los puestos altos tiene sentido saberlo.


  • ¿Dónde será la búsqueda más rápida y dónde está la búsqueda y por qué: dict, list, set, tuple?


  • ¿Cómo se pasan los valores de argumento a una función o método?


  • ¿Qué es un generador? ¿Cómo es diferente de un iterador?
    Hay artículos más cortos, pero este me gustó. Hay muchas cosas que no se pueden revelar completamente en respuestas cortas de stackoverflow.


  • ¿Qué es la comprensión de listas / dict?


  • No puedo formular una pregunta específica, por lo que le aconsejo que lea sobre introspección (usando dir (), dir , hasattr (), getattr ()), cambio de nombre.


  • ¿Cuál es la diferencia entre guiones bajos simples (_) y dobles (__)?
    Una respuesta exhaustiva está aquí .


  • ¿Qué es un GIL? ¿Qué problemas tiene él?


  • ¿Qué es el MRO? ¿Cuál es la diferencia entre MRO2 y MR3 (problema del diamante)?
    Inicie google y usted mismo lo entenderá todo.


  • ¿Qué es y cuál es la diferencia entre las clases de estilo antiguo y las de estilo nuevo?


  • ¿Qué sabes sobre Threading? Roscado vs Multiprocesamiento?
    Te aconsejo que lo leas y lo pruebes tú mismo: http://effbot.org/zone/thread-synchronization.htm . El artículo es un poco viejo, pero da una buena comprensión.


  • ¿Has trabajado con asyncio? ¿Cuál es su característica?
    Recomiendo leer artículos sobre Python asíncrono y sentirlo usted mismo.


  • ¿Qué es el recolector de basura (gc)? ¿Cuáles son sus pros y sus contras?
    Creo que todo lo que se necesita para una respuesta se describe aquí .


  • ¿Por qué necesitas apio?


  • ¿Qué es async / await, para qué sirven y cómo usarlos?


  • Hay una función:


    def f(sum, l=[]): l.append(sum) print(l) 

    Lo que se mostrará en la pantalla:


     l = [1] f(10) // [10] f(10) // [10, 10] f(10, l) // [1, 10] f(10) // [10, 10, 10] print(l) // [1, 10] 


Django / matraz
  • ¿Cómo funciona el serializador en Django REST Framework?
  • ¿De qué es responsable Meta en el serializador?
  • ¿Cuál es la diferencia de rendimiento entre django y Flask (y por qué)?
  • ¿Cuál es el propósito de estos marcos?
  • ¿Cómo funciona la autenticación en django?
  • ¿Cómo maneja (y genera) el token CSRF con django?

Frontend
  • ¿Qué son las cookies? ¿Por qué están, cómo trabajar con ellos y dónde se almacenan?
  • ¿Puede un servidor cambiar (agregar, eliminar) cookies?
  • ¿Qué es JWT (JSON Web Token)?

SDLC
  • Agile \ scrum: todo lo que necesitas saber
  • ¿Cuál es la diferencia entre CI y CD? Para aquellos en el tanque: CI - integración continua, CD - entrega continua
  • ¿Cuál es la diferencia entre Scrum y Kanban?
  • ¿Qué tipos de pruebas conoces?
    Google aparte: pruebas unitarias, pruebas de integración, pruebas de aceptación, etc.
  • Pregunta para los líderes de equipo (muy probablemente): ¿Qué hará si no hay pruebas en el proyecto y el cliente no quiere gastar tiempo y dinero en su desarrollo?
    Personalmente, apelo a la rentabilidad para el negocio del cliente.
  • ¿Qué es la deuda de código y cómo lidiar con ella (vivir, amar, pelear)?

Git, versionado, refactorización
  • ¿Qué sistemas de control de versiones conoce (usa)?
  • ¿Qué es el flujo de Git?
    Te aconsejo que lo leas , ya que esto es algo documentado.
  • ¿Qué es git rebase?
  • ¿Qué es una selección de cereza git?
  • ¿Qué herramientas utilizas para la revisión de código?
    Personalmente, soy un fanático del cliente web github (está lleno de cosas interesantes y convenientes). Pero mi interlocutor decidió que yo era una bardana y me puso un signo negativo. Busqué en Google en casa y vi que hay mucho software especializado que es muy similar al que usé durante más de 3 años. Software como software: para un aficionado.
    P.S. No me gustó este momento, ya que tenía una experiencia de revisión de código lo suficientemente larga + tuve que leer constantemente confirmaciones de 500 a 3000 cambios de longitud (sí, en uno de mis proyectos principales, tales confirmaciones eran normales), y la gente decidió eso desde No conozco otras utilidades, significa bardana.
  • ¿Qué es el empuje forzado?
  • ¿Qué es la verificación previa al compromiso?
  • ¿Qué es la cohesión de código y el acoplamiento de código?

Bases de datos

Para mi sorpresa, las preguntas sobre este tema me parecieron demasiado simples (al igual que para la escuela), excepto literalmente 2-3.


  • ¿Qué es una transacción? ¿Qué propiedades tiene ella?
  • ¿Qué son los niveles de aislamiento de transacciones? Como son
    Te aconsejo que leas esto detenidamente, ya que estas son cosas fundamentales .
  • ¿Qué son las transacciones anidadas?
  • ¿Qué es un cursor y por qué es necesario?
  • ¿Cuál es la diferencia entre PostgreSQL y MySQL?
  • ¿Qué es VACUUM en PostgreSQL?
  • ¿Qué es EXPLICAR? ¿Cuál es la diferencia entre este y EXPLAIN ANALYZE?

Big data

Desafortunadamente, recordé algunas preguntas, porque mi experiencia previa en el desarrollo de software y el trabajo con bases de datos fue importante para mi interlocutor (creo que esto es muy inteligente).


  • ¿Qué es Hadoop? ... y HDFS?
  • ¿Qué es MapReduce y cómo funciona?
  • ¿Es posible crear muchos mapeadores y reductores (o indicar su número)?
  • ¿Cuál es la diferencia entre Hive y HBase?
  • ¿Es posible crear un índice en HBase?
  • ¿Qué es el reparto?
  • ¿Cuál es la diferencia entre repartition y coalesce?
    Muy simple y asequible descrito aquí .
  • ¿Qué es la elección maestra en Zookeeper?

Las tareas

Sorprendentemente, solo en una de una docena de entrevistas me pidieron que escribiera código. Probablemente porque todos los demás querían verificar el código después de la parte teórica. Y dado que las entrevistas duraron al menos una hora (¡la más larga, tres horas!), Y nunca se hicieron todas las preguntas, los chicos simplemente físicamente no tuvieron tiempo de revisar el código.
Además de practicar, no aconsejaré nada más.


  1. Hay un archivo que contiene palabras separadas por un espacio. Por ejemplo: "abba com mother bill mother com abba dog abba mother com". Es necesario encontrar y deducir las tres palabras que ocurren más a menudo juntas (el orden no importa). Es decir, en mi ejemplo, las tres palabras son "abba com mother", "com mother bill", "mother bill mother", etc. La respuesta correcta debería ser "abba com mother" (frecuencia - 3 veces).
  2. Escriba una función para atravesar el árbol en profundidad (en ancho).
    Para que no pierda el tiempo, le daré un enlace donde ambas funciones son muy hermosas y simples.
    Había otra tarea simple: escribir un generador.

Preguntas y enlaces de mi parte

Para fines educativos generales, vale la pena leer los siguientes artículos:


  • "Preguntas de la entrevista de Python". Leí diferentes, pero por alguna razón agregué solo estos dos a los marcadores: 1 y 2 . Pero te aconsejo que busques más en Google.
  • Likbez sobre escribir en lenguajes de programación .
  • Es una pena que al discutir las bases de datos no haya preguntas sobre el teorema CAP. Descubre más aquí .
  • No sé por qué no se tocó el tema de los microservicios. Solo puedo suponer que quienes me entrevistaron trabajaron con ellos poco o les prestaron la debida atención. Sin embargo, si está interesado, aquí hay un buen artículo .
  • También para mi sorpresa, nadie hizo preguntas sobre virtualización, docker, contenedores, Kubernetes. Le aconsejo que al menos trate con la ventana acoplable, ya que ahora hay muchas instrucciones simples paso a paso con explicaciones.
  • Enlaces Python súper útiles .
  • Zen Python en los ejemplos .
  • Todos los que trabajan con Python, creo, deberían saber sobre innovaciones geniales .
  • Pocos de los interlocutores sabían sobre los diccionarios en python que el coautor mismo cuenta aquí .
  • Nadie preguntó acerca de Lambda en Python, pero es mejor entender qué es y con qué se come.
  • Tipos y trucos en python. El artículo es antiguo, pero la mayoría de los "trucos" son relevantes ahora .
  • Por cierto, para los amantes de python: un resumen de las últimas noticias y otros materiales .
  • En el frente, le aconsejo que mire una breve conferencia sobre el bucle de eventos en JavaScript. No creo que sepas cómo funciona realmente. Lo recomiendo mucho
  • Con respecto al lado del servidor, es recomendable comprender la diferencia entre nginx y apache. Internet está lleno de artículos. Si es realmente interesante, ¿cuál es la diferencia bajo el capó? Aquí hay un artículo con ejemplos .

Consejos para todos los que realmente quieran lograr el dominio: no sean perezosos para repetir el código en la consola (ya sea python, DB u otras cosas). NO copie, es decir, repita. Por supuesto, esto significa material nuevo, y no el que ha estado escribiendo a ciegas durante mucho tiempo.


De hecho, hubo 3-4 veces más preguntas. Algo se olvida. Pero traje los más importantes.


Probablemente notó que prácticamente no había preguntas en el frente. Esto se debe a que no teníamos tiempo para llegar a ellos, o había tan pocos que los olvidé.


Por cierto, aquí hay una buena matriz de competencias en diversas áreas de TI. Si tiene la oportunidad de realizar una entrevista, le aconsejo que al menos comprenda lo que necesita preguntar y a qué nivel, y que no retenga a todos bajo la misma barra (como se hace a menudo ahora): se han acumulado demasiadas áreas diferentes. Personalmente, no entiendo por qué exigirle al front-end senior una excelente comprensión de la base de datos, o una comprensión profunda del back-end senior del motor del navegador o la interacción del bucle de eventos con el renderizador del navegador, o del probador, la capacidad de encontrar el camino más corto de manera equilibrada gráfico, etc. Con suerte, mirando esta matriz, entiendes lo que quiero decir.


¡Sinceramente deseo éxito a todos los que decidan consolidarse por sí mismos y demuestren a otros su conocimiento para obtener una buena oferta interesante!


UPD:
Aquí puede practicar entrevistas, si 4to - pramp.com. Gracias a non_smile por el enlace.

Source: https://habr.com/ru/post/439576/


All Articles