Introducción

¿busca un trabajo en Python? Lo más probable es que necesites probar que sabes cómo trabajar con Python. Aquí hay un par de preguntas que cubren una amplia base de habilidades asociadas con Python. La atención se centra en el lenguaje en sí, y no en ningún paquete o Marco en particular. Cada pregunta estará vinculada a un tutorial adecuado si hay uno. Algunas preguntas resumirán varios temas.,

en realidad no me han dado una prueba de entrevista tan difícil como esta, si puedes llegar a las respuestas cómodamente, entonces ve a buscarte un trabajo.

qué no es este Tutorial

este tutorial no pretende cubrir todas las culturas de trabajo disponibles: diferentes empleadores te harán diferentes preguntas de diferentes maneras; seguirán diferentes convenciones; valorarán diferentes cosas. Te pondrán a prueba de diferentes maneras., Algunos empleadores se sientan en de de una computadora y preguntarle a resolver problemas simples; algunos estarán de pie en frente de una pizarra blanca y similares; algunos le dará una prueba casera para resolver; algunos simplemente tener una conversación con usted.

La mejor prueba para un programador es en realidad la programación. Esto es algo difícil de probar con un tutorial simple. Así que para los puntos de bonificación asegúrese de que realmente puede utilizar la funcionalidad demostrada en las preguntas., Si realmente entiendes cómo llegar a las respuestas lo suficientemente bien como para que realmente puedas hacer uso de los conceptos demostrados, entonces estás ganando.

del mismo modo, la mejor prueba para un ingeniero de software es en realidad la ingeniería. Este tutorial trata sobre Python como lenguaje. Ser capaz de diseñar jerarquías de clase eficientes, efectivas y mantenibles para resolver problemas de nicho es grande y maravilloso y un conjunto de habilidades que vale la pena perseguir, pero mucho más allá del alcance de este texto.

otra cosa que este tutorial no es compatible con PEP8., Esto es intencional, ya que, como se mencionó anteriormente, diferentes empleadores seguirán diferentes convenciones. Tendrá que adaptarse para adaptarse a la cultura del lugar de trabajo. Porque la practicidad vence a la pureza.

otra cosa que este tutorial no es es conciso. No quiero lanzarte preguntas y respuestas y esperar que algo se pegue. Quiero que usted es, o al menos lo suficientemente bien que ustedes están en una posición para buscar más explicaciones, para cualquier problema temas.

¿quieres mejorar tu entrevista técnica? Programe una sesión de práctica de entrevista técnica con un experto ahora!,

Pregunta 1

¿Qué es Python realmente? Puede (y se le anima) hacer comparaciones con otras tecnologías en su respuesta

respuesta

Aquí hay algunos puntos clave:

  • Python es un lenguaje interpretado. Esto significa que, a diferencia de lenguajes como C y sus variantes, Python no necesita ser compilado antes de ser ejecutado. Otros lenguajes interpretados incluyen PHP y Ruby.

  • Python se escribe dinámicamente, esto significa que no necesita indicar los tipos de variables cuando los declara ni nada por el estilo., Puede hacer cosas como x=111 y luego x="I'm a string" sin error

  • Python es muy adecuado para la programación orientada a objetos, ya que permite la definición de clases junto con la composición y la herencia. Python no tiene especificadores de acceso (como C++’s public, private), la justificación de este punto se da como «todos somos adultos aquí»

  • En Python, las funciones son objetos de primera clase., Esto significa que pueden ser asignados a variables, devueltos desde otras funciones y pasados a funciones. Las clases también son objetos de primera clase

  • escribir código Python es rápido, pero ejecutarlo a menudo es más lento que los lenguajes compilados. Afortunadamente, Python permite la inclusión de extensiones basadas en C para que los cuellos de botella se puedan optimizar y, a menudo, lo son., El paquete numpy es un buen ejemplo de esto, es realmente bastante rápido porque gran parte del procesamiento de números que hace en realidad no lo hace Python

  • Python encuentra uso en muchas esferas: aplicaciones web, automatización, modelado científico, aplicaciones de big data y muchas más. También se usa a menudo como código «pegamento» para que otros lenguajes y componentes se reproduzcan bien.

  • Python facilita las cosas difíciles para que los programadores puedan centrarse en sobreescribir algoritmos y estructuras en lugar de detalles de bajo nivel.,

por qué esto importa:

si estás solicitando un puesto en Python, deberías saber qué es y por qué es tan genial. Y por qué no es o.o

Pregunta 2

rellene el código que falta:

def print_directory_contents(sPath): """ This function takes the name of a directory and prints out the paths files within that directory as well as any files contained in contained directories. This function is similar to os.walk. Please don't use os.walk in your answer. We are interested in your ability to work with nested structures. """ fill_this_in

respuesta

preste especial atención

  • sea consistente con sus convenciones de nomenclatura. Si hay una convención de nomenclatura evidente en cualquier código de muestra, apégate a ella. Incluso si no es la Convención de nomenclatura, por lo general utiliza
  • Las Funciones recursivas necesitan recurrir y terminar., Asegúrese de entender cómo sucede esto para evitar callstacks sin fondo
  • utilizamos el módulo os para interactuar con el sistema operativo de una manera multiplataforma. Se podría decir sChildPath = sPath + '/' + sChild pero eso no funcionaría en windows
  • La familiaridad con los paquetes base realmente vale la pena, pero no se rompa la cabeza tratando de memorizar todo, Google es su amigo en el lugar de trabajo!
  • haga preguntas si no entiende lo que se supone que debe hacer el código
  • ¡KISS! Mantenlo Simple, Estúpido!,

por qué esto importa:

  • Muestra el conocimiento de las cosas básicas de interacción del sistema operativo
  • la recursión es muy útil

pregunta 3

mirando el siguiente código, anote los valores finales de A0, A1, An An.

Si no sabe lo que zip es no estresarse. Ningún empleador cuerdo esperará que memorices la biblioteca estándar. Aquí está la salida de help(zip).

si eso no tiene sentido, tómate unos minutos para averiguarlo como quieras.,

respuesta

por qué esto importa

  1. La comprensión de la lista es un maravilloso ahorro de tiempo y un gran obstáculo para mucha gente
  2. Si puedes leerlos, probablemente puedas escribirlos
  3. parte de este código fue hecho para ser deliberadamente extraño. Es posible que tenga que trabajar con algunas personas extrañas

Pregunta 4

Python y multi-threading. Es una buena idea? Enumere algunas formas de obtener código Python para ejecutarlo en paralelo.

respuesta

Python no permite multi-threading en el verdadero sentido de la palabra., Tiene un paquete multi-threading, pero si desea multi-thread para acelerar su código, entonces generalmente no es una buena idea usarlo. Python tiene una construcción llamada Global Interpreter Lock (GIL). El GIL se asegura de que solo uno de sus ‘hilos’ pueda ejecutarse a la vez. Un hilo adquiere el GIL, hace un pequeño trabajo, luego pasa el GIL al siguiente hilo. Esto sucede muy rápidamente, por lo que para el ojo humano puede parecer que sus hilos se ejecutan en paralelo, pero en realidad solo se turnan usando el mismo núcleo de CPU. Todo este paso de GIL añade gastos generales a la ejecución., Esto significa que si desea hacer que su código se ejecute más rápido, usar el paquete de subprocesos a menudo no es una buena idea.

hay razones para usar el paquete threading de Python. Si desea ejecutar algunas cosas simultáneamente, y la eficiencia no es una preocupación, entonces está totalmente bien y es conveniente. O si está ejecutando código que necesita esperar algo (como alguna IO), entonces podría tener mucho sentido. Pero la biblioteca de subprocesos no te permitirá usar núcleos de CPU adicionales.,

Multi-threading se puede externalizar al sistema operativo (haciendo multi-procesamiento), alguna aplicación externa que llama a su código Python (por ejemplo, Spark o Hadoop), o algún código que su código Python llama (por ejemplo: podría hacer que su código Python llame a una función C que hace las costosas cosas multi-threaded).

¿por Qué Importa Esto

Porque el GIL es Un agujero. Mucha gente pasa mucho tiempo tratando de encontrar cuellos de botella en su código de múltiples subprocesos Python de lujo antes de aprender lo que es GIL.,

Pregunta 5

¿Cómo realizar un seguimiento de las diferentes versiones de su código?

respuesta:

control de versiones! En este punto, debes actuar emocionado y decirles cómo incluso usas Git (o lo que sea que sea tu favorito) para realizar un seguimiento de la correspondencia con la abuela. Git es mi sistema de control de versiones preferido, pero hay otros, por ejemplo subversion.

por qué esto importa:

porque el código sin control de versiones es como el café sin una taza., A veces necesitamos escribir scripts de una sola vez y eso está bien, pero si se trata de una cantidad significativa de código, un sistema de control de versiones será un beneficio. El control de versiones ayuda a realizar un seguimiento de quién hizo qué cambio en la base de código; averiguar cuándo se introdujeron errores en el código; realizar un seguimiento de las versiones y versiones de su software; distribuir el código fuente entre los miembros del equipo; implementación y ciertas automatizaciones. Le permite rodar su código de nuevo a antes de que se rompió que es grande por sí mismo. Muchas cosas. Es simplemente genial.,

Question 6

What does this code output:

def f(x,l=): for i in range(x): l.append(i*i) print(l) f(2)f(3,)f(3)

Answer

Hu?

la primera llamada a la función debe ser bastante obvia, el bucle agrega 0 y luego 1 a la lista vacía, l. l es un nombre para una variable que apunta a una lista almacenada en memoria.
la segunda llamada comienza creando una nueva lista en un nuevo bloque de memoria. l entonces se refiere a esta nueva lista. A continuación, añade 0, 1 y 4 a esta nueva lista. Así que eso es genial.,
La tercera llamada a la función es la rara. Utiliza la lista original almacenada en el bloque de memoria original. Es por eso que comienza con 0 y 1.

Pruebe esto si no entiende:

Pregunta 7

¿Qué es el parche de mono y es Alguna vez una buena idea?

respuesta

el parcheo de mono cambia el comportamiento de una función u objeto después de que ya se haya definido. Por ejemplo:

import datetimedatetime.datetime.now = lambda: datetime.datetime(2012, 12, 12)

La mayoría de las veces es una idea bastante terrible – generalmente es mejor si las cosas actúan de una manera bien definida. Una razón para patch mono sería en las pruebas., El paquete de simulación es muy útil para este fin.

Why This Matters

esto demuestra que usted entiende un poco acerca de las metodologías en las pruebas unitarias. Su mención de la evitación del mono mostrará que usted no es uno de esos codificadores que favorecen el código de fantasía sobre el código mantenible (están ahí fuera, y apestan para trabajar con). ¿Recuerdas el principio del beso? Y muestra que sabes un poco sobre cómo funciona Python en un nivel inferior, cómo se almacenan y llaman las funciones y cosas por el estilo.

PD: vale la pena leer un poco sobre mock si aún no lo has hecho. Es bastante útil.,

la Pregunta 8

¿Qué significa esto quiere decir: *args, **kwargs? ¿Y por qué lo usaríamos?

Answer

Use *args cuando no estamos seguros de cuántos argumentos se van a pasar a una función, o si queremos pasar una lista almacenada o tupla de argumentos a una función. **kwargs se usa cuando no sabemos cuántos argumentos de palabras clave se pasarán a una función, o se puede usar para pasar los valores de un diccionario como argumentos de palabras clave., Los identificadores args y kwargs son una convención, también se podría usar *bob y **billy pero que no sería prudente.

Aquí hay una pequeña ilustración:

¿por qué cuidar?

a veces necesitaremos pasar un número desconocido de argumentos o argumentos de palabras clave a una función. A veces vamos a querer almacenar argumentos o argumentos de palabras clave para su uso posterior. A veces es sólo un ahorro de tiempo.,

la Pregunta 9

¿Qué significa para usted: @classmethod, @staticmethod, @property?

Answer Background Knowledge

estos son decoradores. Un decorador es un tipo especial de función que toma una función y devuelve una función, o toma una clase y devuelve una clase. El símbolo @ es solo azúcar sintáctica que le permite decorar algo de una manera que es fácil de leer.,

@my_decoratordef my_func(stuff): do_things

Es equivalente a

def my_func(stuff): do_thingsmy_func = my_decorator(my_func)

Usted puede encontrar un tutorial sobre cómo decoradores en general el trabajo aquí.

Respuesta Real

El decoradores @classmethod, @staticmethod y @property se utilizan en funciones definidas dentro de las clases. Así es como se comportan:

pregunta 10

considere el siguiente código, ¿qué generará?

respuesta

la salida se especifica en los comentarios del segmento a continuación:

¿por qué nos importa?,

porque la programación OO es muy, muy importante. Realmente. Responder a esta pregunta muestra su comprensión de la herencia y el uso de la función super de Python. La mayoría de las veces el orden de resolución no importa. A veces lo hace, depende de su aplicación.

pregunta 11

considere el siguiente código, ¿qué generará?

Answer

oRoot.print_all_1() prints:

oRoot.print_all_2() prints:

Why do we care?

porque la composición y la construcción de objetos es de lo que se tratan los objetos., Los objetos están compuestos de cosas y necesitan ser inicializados de alguna manera. Esto también ata algunas cosas sobre la recursión y el uso de generadores.

Los generadores son geniales. Podría haber logrado una funcionalidad similar a print_all_2 simplemente construyendo una gran lista larga y luego imprimiendo su contenido. Una de las cosas buenas de los generadores es que no necesitan ocupar mucho espacio en la memoria.

también vale la pena señalar que print_all_1atraviesa el árbol de una manera primero en profundidad, mientras que print_all_2 es primero en anchura., Asegúrate de entender esos términos. A veces un tipo de recorrido es más apropiado que el otro. Pero eso depende mucho de su aplicación.

pregunta 12

Describe el mecanismo de recolección de basura de Python en breve.

Respuesta

se puede decir mucho aquí. Hay algunos puntos principales que debe mencionar:

  • Python mantiene un recuento del número de referencias a cada objeto en memoria., Si un recuento de referencia va a cero, el objeto asociado ya no está activo y la memoria asignada a ese objeto puede liberarse para otra cosa
  • ocasionalmente ocurren cosas llamadas «ciclos de referencia». El recolector de basura los busca periódicamente y los limpia. Un ejemplo sería si usted tiene dos objetos o1 y o2 tales que o1.x == o2 y o2.x == o1. Si o1 y o2 no están referenciados por nada más, entonces no deberían estar en vivo., Pero cada uno de ellos tiene un recuento de referencia de 1.
  • ciertas heurísticas se utilizan para acelerar la recolección de basura. Por ejemplo, es más probable que los objetos creados recientemente estén muertos. A medida que se crean los objetos, el recolector de basura los asigna a generaciones. Cada objeto recibe una generación, y las generaciones más jóvenes son tratadas primero.

Esta explicación es específica de CPython.

pregunta 13

coloque las siguientes funciones a continuación en orden de su eficiencia. Todos ellos toman en una lista de números entre 0 y 1. La lista puede ser bastante larga., Una lista de entrada de ejemplo sería . ¿Cómo probarías que tu respuesta es correcta?

Respuesta

Más a menos eficiente: f2, f1, f3. Para probar que este es el caso, usted querría perfilar su código. Python tiene un paquete de perfiles encantador que debería hacer el truco.

import cProfilelIn = cProfile.run('f1(lIn)')cProfile.run('f2(lIn)')cProfile.run('f3(lIn)')

para completar, esto es lo que el perfil anterior produce:

¿por qué cuidar?

localizar y evitar cuellos de botella a menudo vale la pena., Una gran cantidad de codificación para la eficiencia se reduce al sentido común – en el ejemplo anterior, obviamente, es más rápido ordenar una lista si es una lista más pequeña, por lo que si tiene la opción de filtrar antes de ordenar, a menudo es una buena idea. Las cosas menos obvias todavía se pueden localizar a través del uso de las herramientas adecuadas. Es bueno saber acerca de estas herramientas.

pregunta 14

¿algo en lo que fallaste?

respuesta incorrecta

¡nunca fallo!

por qué esto es importante:

muestra que usted es capaz de admitir errores, asumir la responsabilidad de sus errores y aprender de sus errores., Todas estas cosas son bastante importantes si vas a ser útil. Si usted es realmente perfecto entonces demasiado malo, es posible que tenga que ser creativo aquí.

pregunta 15

¿Tienes algún proyecto personal?

¿en serio?

esto muestra que estás dispuesto a hacer más que el mínimo en términos de mantener tu conjunto de habilidades al día. Si trabajas en proyectos personales y codificas fuera del lugar de trabajo, es más probable que los empleadores te vean como un activo que crecerá. Incluso si no hacen esta pregunta, me parece útil abordar el tema.,

conclusión

estas preguntas tocaron intencionalmente muchos temas. Y las respuestas fueron intencionalmente detalladas. En una entrevista de programación, usted tendrá que demostrar su comprensión y si usted puede hacerlo de una manera concisa entonces por todos los medios hacer eso. Traté de dar suficiente información en las respuestas para que pudiera obtener algún significado de ellas, incluso si nunca había oído hablar de algunos de estos temas antes. Espero que encuentre esto útil en su búsqueda de trabajo.

ve por ellos tigre.

Articles

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *