introdução
à procura de um trabalho em Python? É provável que precise de provar que sabe trabalhar com o Python. Aqui estão algumas perguntas que cobrem uma ampla base de habilidades associadas com Python. O foco é colocado na própria linguagem, e não em qualquer pacote ou estrutura particular. Cada pergunta será ligada a um tutorial adequado se houver um. Algumas perguntas terminarão vários tópicos.,na verdade, não me foi dado um teste de entrevista tão difícil como este, se você pode chegar às respostas confortavelmente, então vá arranjar um emprego.
o que este Tutorial não é
Este tutorial não visa cobrir todas as culturas disponíveis no local de trabalho-empregadores diferentes irão fazer-lhe perguntas diferentes de diferentes maneiras; irão seguir diferentes convenções; irão valorizar coisas diferentes. Vão testar-te de formas diferentes., Alguns empregadores vão sentar-se para baixo a partir de um computador e pedir-lhe para resolver problemas simples; alguns vão ficar em frente a um quadro branco e semelhantes; alguns vão dar a você levar para casa um teste para resolver; alguns só vai ter uma conversa com você.
O melhor teste para um programador é realmente a programação. Isto é uma coisa difícil de testar com um simples tutorial. Assim, para pontos de bônus certifique-se de que você pode realmente usar a funcionalidade demonstrada nas perguntas., Se você realmente entender como chegar às respostas bem o suficiente para que você possa realmente fazer uso dos conceitos demonstrados, então você está ganhando.
Similarmente, o melhor teste para um engenheiro de software é realmente engenharia. Este tutorial é sobre Python como uma linguagem. Ser capaz de projetar hierarquias de classe eficientes, eficazes e sustentáveis para resolver problemas de nicho é grande e maravilhoso e um conjunto de habilidades que vale a pena perseguir, mas muito além do escopo deste texto.
outra coisa que este tutorial não é compatível com o PEP8., Isto é intencional, uma vez que, como mencionado anteriormente, diferentes empregadores seguirão diferentes convenções. Terá de se adaptar à cultura do local de trabalho. Porque a praticidade vence a pureza.
outra coisa que este tutorial não é conciso. Não quero apenas fazer-te perguntas e respostas e esperar que algo se agarre. Eu quero que você o obtenha, ou pelo menos o consiga o suficiente para que você esteja em posição de procurar explicações adicionais por si mesmo para quaisquer tópicos problemáticos.queres arrasar na tua entrevista técnica? Marque uma sessão de prática de entrevista técnica com um especialista agora!,
Pergunta 1
o que é realmente o Python? Você pode (e são incentivados a fazer comparações com outras tecnologias em sua resposta
Resposta
Aqui estão alguns pontos-chave:
-
Python é uma linguagem interpretada. Isso significa que, ao contrário de linguagens como C e suas variantes, Python não precisa ser compilado antes de ser executado. Outras linguagens interpretadas incluem PHP e Ruby.
-
Python é dinamicamente tipado, o que significa que não precisa de indicar os tipos de variáveis quando as declara ou algo do género., Você pode fazer coisas como
x=111
ex="I'm a string"
sem erro -
Python é bem adequado para o objeto de programação orientada que permite a definição de classes, juntamente com a composição e herança. Python não tem acesso especificadores (como C++’s
public
private
), a justificativa para este ponto é dado como “somos todos adultos aqui” -
Em Python, as funções são de primeira classe de objetos., Isto significa que elas podem ser atribuídas a variáveis, retornadas de outras funções e passadas para funções. Classes também são objetos de primeira classe
-
escrever código Python é rápido, mas executá-lo é muitas vezes mais lento do que as linguagens compiladas. Felizmente, o Python permite a inclusão de extensões baseadas em C para que gargalos possam ser otimizados e muitas vezes são.,
numpy
pacote é um bom exemplo disso, é realmente muito rápida, porque um grande número de triturar ele faz não é, na verdade, feito por Python -
Python encontra uso em muitas esferas, aplicações web, automação, científica modelagem de dados grandes, aplicações e muito mais. Também é muitas vezes usado como código de “cola” para obter outras línguas e Componentes para jogar bem.
-
Python torna as coisas difíceis fáceis para que os programadores possam se concentrar em algoritmos e estruturas superiores, em vez de detalhes de baixo nível.,
Why This Matters:
If you are applying for a Python position, you should know what it is and why it is so gosh-damn cool. E por que não é o. O
Pergunta 2
preencha o código em 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
resposta
preste especial atenção
- seja consistente com as suas convenções de nomeação. Se houver uma convenção de nomenclatura evidente em qualquer código de amostra, atenha-se a ela. Mesmo que não seja a Convenção de nomes que você normalmente usa
- funções recursivas precisam recursar e terminar., Certifique-se de que compreende como isto acontece para evitar as chamadas sem fundo
- usamos o módulo
os
para interagir com o sistema operativo de uma forma que seja a plataforma transversal. Você poderia dizersChildPath = sPath + '/' + sChild
mas isso não funcionaria no windows - familiaridade com pacotes base é realmente útil, mas não quebre sua cabeça tentando memorizar tudo, o Google é seu amigo no local de trabalho!faça perguntas se não entender o que o código deve fazer. KISS! Mantém as coisas simples, estúpido!,
Por que Isto Importa:
- Exibe conhecimentos básicos de sistema operacional interação coisas
- a Recursividade é hella útil
a Pergunta 3
Olhando o código abaixo, anote os valores finais de A0, A1, …An.
Se você não sabe o que zip
é não stress. Nenhum empregador são esperará que memorize a biblioteca padrão. Aqui está a saída de help(zip)
.
Se isso não faz sentido, em seguida, tomar alguns minutos para descobrir como você escolher.,
Resposta
Por que Isto Importa
- Lista de compreensão é uma excelente economia de tempo e uma grande pedra de tropeço para muitas pessoas
- Se você pode lê-las, provavelmente você pode escrevê-los
- Alguns deste código foi feito para ser deliberadamente estranho. Você pode precisar trabalhar com algumas pessoas estranhas
Pergunta 4
Python e multi-threading. É uma boa ideia? Listar algumas maneiras de obter algum código Python para executar de uma forma paralela.
A resposta
Python não permite a multi-threading no sentido mais verdadeiro da palavra., Ele tem um pacote multi-thread, mas se você quiser multi-thread para acelerar o seu código, então geralmente não é uma boa idéia para usá-lo. Python tem uma construção Chamada Global Interpreter Lock (GIL). O GIL garante que apenas um dos seus ‘threads’ pode executar a qualquer momento. Um fio adquire o GIL, faz um pouco de trabalho, em seguida, passa o GIL para o próximo fio. Isso acontece muito rapidamente para o olho humano pode parecer que seus fios estão executando em paralelo, mas eles estão realmente fazendo turnos usando o mesmo núcleo de CPU. Tudo o que o GIL passou acrescenta custos à execução., Isto significa que se você quiser fazer o seu código correr mais rápido, em seguida, usando o pacote de thread muitas vezes não é uma boa idéia.
existem razões para usar o pacote de threading do Python. Se você quiser executar algumas coisas simultaneamente, e eficiência não é uma preocupação, então é totalmente bom e conveniente. Ou se você está executando um código que precisa esperar por algo (como algumas IO), então ele poderia fazer um monte de Sentido. Mas a biblioteca de tópicos não te deixa usar núcleos de CPU extra.,
Multi-threading pode ser terceirizado para o sistema operacional (por meio do multi-processamento), alguns externos aplicativo que chama o seu código Python (por exemplo, Faísca ou Hadoop), ou algum código que seu código Python chama (por exemplo: você pode ter seu código Python chamada de uma função C que faz o cara multi-threaded coisas).
por que isso importa
porque o GIL é um buraco A. Muitas pessoas passam muito tempo a tentar encontrar pontos de estrangulamento no seu código multi-roscado Python antes de saberem o que é o GIL.,
Pergunta 5
Como você mantém o controle de diferentes versões do seu código?
resposta:
controlo de versão! Neste momento, você deve agir animado e dizer-lhes como você mesmo usar Git (ou o que quer que seja o seu favorito) para manter o controle de correspondência com a vovó. Git é o meu sistema de controle de versão preferido, mas há outros, por exemplo subversion.
por que isso importa:
porque o código sem controle de versão é como o café sem uma xícara., Às vezes precisamos escrever scripts descartáveis e isso é ok, mas se você está lidando com qualquer quantidade significativa de código, um sistema de controle de versão será um benefício. O controle de versões ajuda a manter o controle de quem fez a mudança na base de código; descobrir quando bugs foram introduzidos ao código; manter o controle de versões e lançamentos de seu software; distribuir o código fonte entre os membros da equipe; implantação e certas automações. Ele permite que você role o seu código de volta para antes de você quebrá-lo, o que é ótimo por si só. Muitas coisas. É fantástico.,
a Pergunta 6
o Que faz este código de saída:
def f(x,l=): for i in range(x): l.append(i*i) print(l) f(2)f(3,)f(3)
Resposta
Hu?
a primeira chamada de função deve ser bastante óbvia, o loop adiciona 0 e, em seguida, 1 para a lista vazia, l
. l
é um nome para uma variável que aponta para uma lista armazenada na memória.a segunda chamada começa criando uma nova lista em um novo bloco de memória. l
depois refere-se a esta nova lista. Ele então adiciona 0, 1 e 4 a esta nova lista. Isso é óptimo.,
a terceira chamada de função é a estranha. Ele usa a lista original armazenada no bloco de memória original. É por isso que começa com 0 e 1.
Experimente isto se não compreender:
questão 7
o que é o remendo do macaco e é alguma vez uma boa ideia?
resposta
patching macaco está mudando o comportamento de uma função ou objeto depois que ele já foi definido. Por exemplo:
import datetimedatetime.datetime.now = lambda: datetime.datetime(2012, 12, 12)
na maioria das vezes é uma ideia bastante terrível – geralmente é melhor se as coisas agem de uma forma bem definida. Uma razão para o monkey patch seria em testes., O pacote mock é muito útil para este fim.
Why This Matters
it shows that you understand a bit about methodologies in unit testing. Sua menção de evitar macacos vai mostrar que você não é um desses programadores que favorecem o código chique sobre o código sustentável (eles estão lá fora, e eles não prestam para trabalhar). Lembras-te do princípio do beijo? E isso mostra que você sabe um pouco sobre como o Python funciona em um nível mais baixo, como as funções são realmente armazenadas e chamadas e afins.
PS: realmente vale a pena ler um pouco sobre mock se você ainda não o fez. É muito útil.,
Question 8
What does this stuff mean: *args
, **kwargs
? E porque o usaríamos?
Resposta
Use *args
quando não temos certeza de quantos argumentos vão ser passadas para uma função, ou, se quisermos passar uma lista ou tupla de argumentos para uma função. **kwargs
é usado quando não sabemos quantos argumentos de palavra-chave serão passados para uma função, ou pode ser usado para passar os valores de um dicionário como argumentos de palavra-chave., Os identificadores args
e kwargs
são uma convenção, você também pode usar *bob
e **billy
, mas isso não seria sábio.
aqui está uma pequena ilustração:
por que se importar?
às vezes precisamos passar um número desconhecido de argumentos ou palavras-chave em uma função. Às vezes, vamos querer armazenar argumentos ou argumentos de palavra-chave para uso posterior. Às vezes, poupa-me o tempo.,
Pergunta 9
o Que isto significa para você: @classmethod
@staticmethod
@property
?estes são decoradores. Um decorador é um tipo especial de função que assume uma função e retorna uma função, ou leva uma classe e retorna uma classe. O símbolo
é apenas açúcar sintático que lhe permite decorar algo de uma forma fácil de ler.,
@my_decoratordef my_func(stuff): do_things
É equivalente a
def my_func(stuff): do_thingsmy_func = my_decorator(my_func)
Você pode encontrar um tutorial sobre como decoradores em geral trabalham aqui.
de Resposta Real
Os decoradores @classmethod
@staticmethod
e @property
são usados em funções definidas dentro de classes. Aqui está como eles se comportam:
pergunta 10
considere o seguinte código, o que ele irá emitir?
resposta
a saída é especificada nos comentários no segmento abaixo:
por que nos importamos?,porque a programação OO é muito, muito importante. Realmente. Responder a esta pergunta mostra a sua compreensão da herança e do uso da função
do Python. A maioria das vezes a ordem de resolução não importa. Às vezes, depende da sua aplicação.
pergunta 11
considere o seguinte código, o que ele irá produzir?
Resposta
oRoot.print_all_1()
fotos:
oRoot.print_all_2()
fotos:
Por que isso importa?
Because composition and object construction is what objects are all about., Os objectos são compostos de coisas e precisam de ser iniciados de alguma forma. Isto também liga algumas coisas sobre recursão e uso de geradores.os geradores são óptimos. Você poderia ter alcançado uma funcionalidade semelhante a print_all_2
apenas construindo uma grande lista longa e depois imprimindo o seu conteúdo. Uma das coisas boas sobre Geradores é que eles não precisam ocupar muito espaço na memória.
também vale a pena ressaltar que print_all_1
atravessa a árvore em uma profundidade-primeira maneira, enquanto print_all_2
é Largura-primeiro., Certifica-te que entendes esses termos. Às vezes um tipo de travessia é mais apropriado do que o outro. Mas isso depende muito da sua aplicação.
pergunta 12
descreva resumidamente o mecanismo de recolha de lixo do Python.
resposta
muito pode ser dito aqui. Existem alguns pontos principais que você deve mencionar:
- Python mantém uma contagem do número de referências a cada objeto na memória., Se uma contagem de referência vai para zero, então o objeto associado não é mais vivo e a memória alocada a esse objeto pode ser liberada para algo mais
- ocasionalmente coisas chamadas “ciclos de referência” acontecem. O coletor de lixo periodicamente procura estes e limpa – os. Um exemplo seria se você tiver dois objetos
o1
eo2
tais queo1.x == o2
eo2.x == o1
. Seo1
eo2
não são referenciados por qualquer outra coisa, então eles não deveriam ser vivo., Mas cada um deles tem uma contagem de referência de 1.certas heurísticas são usadas para acelerar a coleta de lixo. Por exemplo, objetos criados recentemente são mais propensos a estar mortos. À medida que os objetos são criados, o coletor de lixo os atribui a gerações. Cada objeto recebe uma geração, e as gerações mais jovens são tratadas primeiro.
esta explicação é específica para o CPython.a pergunta 13 coloca as seguintes funções abaixo por ordem da sua eficiência. Todos eles têm uma lista de números entre 0 e 1. A lista pode ser bastante longa., Uma lista de entrada de exemplo seria . Como pode provar que a sua resposta está correcta?
Resposta
Mais para o menos eficiente: f2
f1
f3
. Para provar que este é o caso, você gostaria de traçar o seu código. O Python tem um belo pacote de perfis que deve funcionar.
import cProfilelIn = cProfile.run('f1(lIn)')cProfile.run('f2(lIn)')cProfile.run('f3(lIn)')
para o bem da completação, aqui está o que as saídas acima do perfil:
por que se importar?muitas vezes vale a pena localizar e evitar estrangulamentos., Um monte de codificação para a eficiência vem para o senso comum – no exemplo acima é obviamente mais rápido para classificar uma lista se é uma lista menor, então se você tem a escolha de filtrar antes de um tipo é muitas vezes uma boa idéia. O material menos óbvio ainda pode ser localizado através do uso das ferramentas adequadas. É bom saber destas ferramentas.pergunta 14: algo em que falhaste?
resposta errada
I never fail!
por que isso é importante:
mostra que você é capaz de admitir erros, assumir a responsabilidade por seus erros, e aprender com seus erros., Todas estas coisas são muito importantes se você vai ser útil. Se você é realmente perfeito então muito ruim, você pode precisar de ser criativo aqui.tem algum projecto pessoal?a sério?
isto mostra que está disposto a fazer mais do que o mínimo em termos de manter as suas competências actualizadas. Se você trabalha em projetos pessoais e Código fora do local de trabalho, então os empregadores são mais propensos a vê-lo como um ativo que vai crescer. Mesmo que não façam esta pergunta, acho que é útil abordar o assunto.,
conclusão
estas questões tocaram intencionalmente muitos tópicos. E as respostas foram intencionalmente verbosas. Em uma entrevista de programação, você terá que demonstrar sua compreensão e se você pode fazê-lo de uma forma concisa, então por todos os meios fazer isso. Eu tentei dar informações suficientes nas respostas que você poderia obter algum significado deles, mesmo se você nunca tinha ouvido falar de alguns desses tópicos antes. Espero que ache isto útil na sua procura de emprego.vai-te a eles, tigre.