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