O que um desenvolvedor de backend deve saber. De frontent to backend

Vaga:
backend Web Developer.

Uma das especialidades exigidas no campo do desenvolvimento da Web é a criação de um back-end, ou seja, a parte do servidor do aplicativo da Web. Para o sucesso do emprego de profissionais, é necessária uma certa bagagem de conhecimento e habilidades. Representantes das empresas dizem quais especialistas gostariam de ver em sua equipe

  1. Quais conhecimentos e habilidades o desenvolvedor do backend-web tiver?
  2. Qual é o kit de ferramentas de um desenvolvedor web de backend?
  3. Quais são os requisitos da empresa para a formação de potenciais funcionários?
  4. Quais são os requisitos para a experiência de trabalho?
  5. Existem requisitos especiais que sejam devido à especificidade da empresa?

Arthur Bozhenov, programador sênior do Departamento de Automação Interna Tecnologias Positivas

Timur Himullin, engenheiro natural para testes de automação departamento de tecnologias positivas de tecnologias de desenvolvimento

1. Arthur Bozhenov: O desenvolvedor da Web de backend deve ter as seguintes habilidades e conhecimento:

  • programação multi-roscada;
  • os princípios de ácido (atomicidade, consistência, isolamento, confiabilidade) e sua aplicação na prática;
  • princípios gerais de arquitetura e protocolos de rede;
  • o ciclo de vida da solicitação / resposta HTTP, o caminho da passagem;
  • proteção de conexões de rede (HTTPS). Autorização. Definindo direitos de acesso aos recursos;
  • Descansar, odata, webapi, sabão;
  • serviços web;
  • hospedagem de aplicativos da Web (IIS, NGINX, Lighttpd, Node.js, Apache);
  • escalabilidade da solução, balanceamento / solicitações de roteamento;
  • exploração madeireira;
  • cache de dados;
  • armazenamento de dados (escolha adequada do método de armazenamento, dependendo da tarefa);
  • trabalhar com grandes quantidades de dados.

2. Arthur Bozhenov: Desenvolvedor da Web Basic Toolkit Backend:

  • iDE confortável (estúdio visual, netbeans, etc.);
  • serviços ou utilitários para criar / visualizar / modificar expressões de regex, JSON, XML, texto em codificação imprópria;
  • Google e stackoverflow;
  • MongoDB / Redis / Memcached;
  • Elasticsearch / kibana;
  • Rabbitmq / Zeromq / MSMQ e outro MQ.

Timur Himullin: Quanto ao IDE, este é o caso do gosto, pelo menos o bloco de notas (Sabloim, NPP), mas eu teria parecido melhor na direção dos produtos Jetbrain, e outros que estão bem integrados entre si.

3. Arthur Bozhenov: Maior (opcional) técnico (obrigatório). Experiência trabalho prático mais importante.

Timur Himullin: Quanto à educação, é melhor técnico ou matemático.

4. Arthur Bozhenov: 3-5 anos de desenvolvimento sem frontend.

Timur Himullin: Para desenvolvedores de backend, não consigo esclarecer.

5. Arthur Bozhenov: Mente analítica.

Timur Himullin: A verdadeira habilidade para trabalhar na equipe e a capacidade de negociar. Um desenvolvedor que não sabe como modelar e prossegue para trabalhar imediatamente sem pensar pela arquitetura geral e interação de todos os módulos de inscrição, eu não levaria a lugar nenhum. Na terceirização, deixe sentar!

Kuzin Evgeny, chefe do Departamento de Projetos de Rede,LLC "Doctor Web"

1. Primeiro de tudo, o desenvolvedor da Web de backend deve ter uma bagagem comum para todos os desenvolvedores - pensamento de engenharia, a capacidade de inserir a essência da tarefa, decomponha-a aos componentes e selecione corretamente as ferramentas para resolvê-la.

A arquitetura do aplicativo da Web difere significativamente da arquitetura do comum software Aplicado Primeiro de tudo, dezenas ao mesmo tempo, e às vezes centenas de usuários podem trabalhar com aplicativos da web. Isolamento do cliente uns dos outros, segurança do sistema, cálculo de um aumento na produtividade, escalonando o sistema e as soluções arquitetônicas e técnicas associadas são completamente caídas nos ombros do desenvolvedor da Web.

Em segundo lugar, é importante que o desenvolvedor da Web responda sensível ao desenvolvimento da Internet, analise as tecnologias e as ferramentas usadas.

O desenvolvedor da Web não deve ter medo de dominar novas tecnologias, deve ser fácil de subir (comparado aos colegas - programadores de aplicativos) e poder agir rapidamente.

2. Eu não chama programas específicos, porque para cada aspecto opções equivalentes são possíveis.

Claro, o navegador, com todas as extensões necessárias para análise, verificação e manipulação com elementos e scripts na página da Web. Em seguida, os utilitários que permitem enviar uma variedade de solicitações HTTP personalizadas (já que 95% de desenvolvimento da Web é o protocolo HTTP) e analisar tráfego e troca de dados e troca de dados em detalhes entre o cliente e o servidor. Também um desenvolvedor web de backend precisa editor de textoÉ desejável com o suporte dos idiomas de programação usados, ferramentas de depuração, perfil e controle das versões.

Separadamente, vale a pena mencionar ferramentas para escrever ou gerar documentação técnica. A documentação é boa, boa documentação também não é ruim.

E, claro, as principais ferramentas são mãos e mãos retas.

3. É absolutamente necessário conhecer russo, ser capaz de indicar claramente seus pensamentos em se comunicar com os colegas, tanto por escrito quanto por via oral. Para o resto, não exigimos candidatos sobre a maneira obrigatória de maior educação técnica ou a disponibilidade de quaisquer certificados - resolver a qualidade do trabalho e conhecimento prático.

4. Aqui é o mesmo princípio que com a educação. Experiência, experiência - pros incondicionais, mas consideramos cada candidato individualmente.

5. Se falamos de desenvolver precisamente pela Internet, o próprio desenvolvimento da web já apresenta a criação de um aplicativo que funciona em um ambiente público para o usuário, cujas intenções verdadeiras são desconhecidas. Programando qualquer ação, você precisa fazer perguntas: E se o usuário (um invasor) automatizar a execução infinita desta ação? E se os dados de entrada do aplicativo serão arbitrariamente editados? Que se o link para este serviço entrar acesso livreSerá transmitido através de um instante para outro usuário? Etc.

Em virtude das especificidades de nossa atividade, muitas vezes prossigamos o caminho para os atacantes, e os dados com os quais trabalhamos são de grande interesse em certos círculos, então alguns de nossos aplicativos da Web exigem proteção particularmente completa.

Nikolai Netherry, chefe de novo desenvolvimento, Badoo

1. O desenvolvedor da Web de backend no Badoo, como qualquer bom engenheiro, deve ser capaz de entender a tarefa e ser capaz de resolvê-lo efetivamente no âmbito das tecnologias e ferramentas disponíveis. Usamos php + mysql, para que nosso desenvolvedor da Web deve primeiro de todo o PHP e SQL. Deve ser responsável e se esforçar para fazer o seu trabalho bem - para observar os prazos, entender o valor / valor técnico da tarefa, respondendo pela qualidade final.

2. O conjunto básico é php, mysql, nginx, git, jira, ide, navegador favorito e linha de comando. Além disso, temos um grande número de diferentes ferramentas, sistemas, bibliotecas que os desenvolvedores são usados \u200b\u200bem todos os lugares para resolver certas tarefas. Algumas dessas ferramentas estão disponíveis em código aberto, por exemplo, o PINBA é um agente de monitoramento PHP em tempo real, nossa ferramenta de formatação de código é PHPCF, bloqueio de PHP para a biblioteca Leptica.

3. Se uma pessoa satisfizer nossas habilidades e requisitos de conhecimento, então estamos prontos para oferecer-lhe um trabalho, independentemente de sua educação.

4. A situação é semelhante à situação da educação: sem requisitos rigorosos e formais.

5. Nossos projetos têm um grande público e suficientemente carregado php-backends. Nos picos eles lidam com até 50 mil pedidos por segundo. A este respeito, prestamos especial atenção ao tema da produtividade. É necessário entender os princípios básicos do cache, replicação, trabalho ideal com dados, otimizar o consumo e a distribuição de recursos. Ser capaz de ver e localizar um problema de produtividade em qualquer nível.

Denis Streetov, chefe do Departamento de Desenvolvimento Tecnológico e Manutenção da empresa "NTC IT Rosa"

1. O candidato para tal posição no NTC Rosa será necessário pelas seguintes habilidades:

  • bom conhecimento de Ruby em Rails 4.x;
  • familiaridade com o desenvolvimento impulsionado pelo comportamento;
  • familiaridade com os princípios de desenvolvimento coletivo - versões de sistemas de controle, rastreadores de tarefas e assim por diante;
  • experiência com bancos de dados (tanto relacionados quanto no NOSQL);
  • experiência com Slim / Haml;
  • conhecimento e experiência com JavaScript / CoffeeSript;
  • conhecimento CSS / SCSS.

2. No NTC IT Rosa para o desenvolvimento da Web atualmente utilizou a estrutura de bootstrap, bem como o JavaScript Framework AngularJs. PostgreSQL e Redis são usados \u200b\u200bpara armazenar dados. O desenvolvimento no Ruby on Rails é conduzido de acordo com a abordagem de desenvolvimento orientada pelo comportamento usando o kit de ferramentas RSPEC.

3. A presença de educação técnica mais alta será uma vantagem, mas em primeiro lugar não vamos olhar para o diploma, mas sobre as habilidades e experiência de um potencial candidato.

4. A experiência é desejável de ano para ano em projetos, onde foram utilizados os mencionados no primeiro parágrafo da tecnologia (pelo menos ruby \u200b\u200bem trilhos).

5. Os desenvolvedores de back-end-web no NTC TI Rosa trabalha principalmente sobre o Sistema de Desenvolvimento ABF e Montagem usado para criar nossas principais distribuições de linha de produtos do sistema operacional Linux e produtos sob este sistema operacional. Portanto, será uma grande vantagem se um candidato para esta vaga estiver familiarizado com o Linux e com pacotes de montagem para este sistema. Não será ainda mais conhecido com outras tecnologias utilizadas na ABF - Virtualização (em particular, LXC), sistemas de gerenciamento de configuração (por exemplo, ansible) e sistemas de armazenamento (principalmente git).

Sergey Kazantsev, desenvolvedor sênior, "Kaspersky Lab"

1. Os desenvolvedores Becasend são responsáveis \u200b\u200bpelo código realizado em servidores da Web.

Assim, os desenvolvedores de backend devem entender não apenas linguagens de programação, mas também protocolos de arquitetura, bancos de dados e interação de rede.

2. O desenvolvedor deve saber pelo menos uma linguagem de programação de alto nível, estrutura para desenvolvimento e servidor da Web eficiente.

Pacotes populares podem ser:

  • C # + ASP.NET + IIS;
  • Java + Spring MVC + Apache Tomcat;
  • Ruby em Rails + Nginx;
  • Python + django + apache;
  • Php + apache;
  • ... ou suas combinações.

Muitos serviços da Web da empresa são construídos com base em tecnologias Microsoft e plataformas .NET, mas Ruby on Rails, Perl, PHP também são aplicados.

No arsenal de um bom desenvolvedor de backend, há sempre ferramentas:

  • monitoramento de tráfego: violinista, wireshark;
  • performance de perfil, solicitações de memória e banco de dados;
  • logs de pesquisa rápida: Grep.

3. Habilidades obrigatórias para trabalhar com bancos de dados, filas de mensagens e grandes projetos para uso do cache distribuído.

4. A experiência necessária pode depender da posição que o requerente alega:

  • 1 ano - desenvolvedor web júnior;
  • 2-5 anos - desenvolvedor web;
  • 5-7 + - desenvolvedor sênior / chumbo.

5. Os requisitos específicos do Kaspersky Lab podem ser atribuídos ao conhecimento de criptografia, potenciais ameaças a aplicações web e formas de impedi-los.

Ilya Kutukov, programador sênior, especialista em engenharia web em paralelos

1. Nós em paralelos são agora abertamente duas vagas para esses especialistas - o líder da Web Backend Developer (http://hh.ru/vacancy/12586616?query\u003dparallels) e o principal desenvolvedor da Web Bachend e Architect (Python) (http: //hh.ru/vacancy/12599030?query\u003dparlels), para que sabemos exatamente o que queremos de esses especialistas. Entende-se que uma pessoa vindo para nós é proprietária das linguagens e tecnologias de programação necessárias para trabalhar suficientemente. Além de verificar habilidades de codificação e erudição geral, damos um teste no arquiteto - o texto que é um TK livremente escrito e consciente no desenvolvimento do sistema. Além disso, pedindo ao candidato para esclarecer que não é claro para ele, que perguntas adicionais ele tem e como ele vê os principais componentes do sistema, o esquema de dados, como tudo mudará com o aumento da carga, a quantidade de dados e onde pode ser negligenciado.

2. O principal kit de ferramentas - IDE (vou esclarecer que estamos na equipe preferem Pycharm), o ambiente do desenvolvedor, isto é, um conjunto de programas que tornam o máximo possível no preenchimento de servidores de combate, mas no mesmo Tempo com a capacidade de entender rapidamente o que está acontecendo, vcs, scripts de cabeça. Das interessantes, relativamente novas ferramentas, tecnologias e abordagens, eu também gostaria de mencionar a abordagem "reativa" (Akka, Rx. *, Apache Storm, etc.), que requer o desenvolvedor de pensar no nível de mensagens, eventos e suas modificações. Além de arquiteturas de microsservice que estão bem complementando suas linguagens de descrição de interface (thrift, avro, protobufs, json esquema), o que permite criar contratos para os quais os dados estão sendo trocados.

3. A educação para nós não desempenha um papel fundamental.

5. Temos os desenvolvedores de backend trabalham em tal funcionalidade como Parallels MyAccount, Access Portal, Portal de Desktop, em soluções como Paralels Access (Solution acesso remoto) e Parallels Desktop para Mac (lançamento em Machs de diferentes sistemas operacionais e seus aplicativos sem reinicialização), com várias soluções de infraestrutura. Portanto, temos essa especificidade como tempo de inatividade zero e bem, se uma pessoa não apenas entende quais mudanças devem ser feitas, mas também como fazê-lo, não afetando os usuários.

Konstantin Kichinsky, especialista em tecnologia estratégica, Microsoft Russia

1. Conhecimento e habilidades necessárias para um desenvolvedor da Web de backend:

  • Arquitetura de rede, protocolos, canais de comunicação.
  • A pilha tecnológica correspondente ao projeto (por exemplo, C #, .NET, ASP.NET ou JavaScript / Typingcript + NodeJS) + Controle subjacente ao sistema operacional (por exemplo, Windows / Azure + PowerShell).
  • Automação de implantação e teste (incluindo carga).
  • Entendimento características da nuvem Principais provedores (Microsoft Azure, AWS), incluindo o fornecimento da escalabilidade dos serviços.
  • SDL e em questões gerais de segurança (incluindo criptografia e autenticação).

2. Ferramentas: Visual Studio, Git + O restante depende de processos e pilha tecnológica.

3. Educação: Perfil (TI) + experiência prática, bem-vindo conhecimento de qualidade em áreas específicas (também segurança ou assegurando a tolerância a falhas do site).

4. Experiência: experiência prática em projetos reais, incluindo participação em projetos do sistema operacional.

5. Requisitos específicos: Azure.

Alexander Mountain, diretor tecnologias de informação Mail.ru Group.

1. Primeiro, ele deve saber o backend - sua principal linguagem de programação, banco de dados, os princípios de organizar aplicativos do servidor. Além disso, ele precisa de conhecimento na web: o dispositivo de protocolo HTTP, recursos do CSS, pelo menos a propriedade elementar de HTML e JavaScript. E, finalmente, ele deve ser um bom desenvolvedor - para ser capaz de depurar seu próprio código e de outra pessoa, para usar corretamente algoritmos clássicos, escolha estruturas de dados relevantes.

2. A principal ferramenta é, é claro, a linguagem de programação. A linguagem define o segundo nível do kit de ferramentas: padrão para esta linguagem framework e kits de biblioteca. Em seguida, vá para bancos de dados: na maioria das vezes MySQL ou PostgreSQL - e instalações de armazenamento NOSQL, como tarantool ou redis.

3. Não há requisitos formais para o diploma durante o dispositivo funcionar no grupo Mail.ru. É muito mais importante para habilidades e projetos reais em que ele participou. O Grupo Mail.ru tem dois grandes projetos educacionais: um tecnopark com base no MSTU Bauman e na Technosfera com base no IMC MSU, cujo objetivo é dar aos alunos habilidades específicas no campo do desenvolvimento da Web.

4. Não há requisitos formais novamente, mas em geral pode-se dizer que o desenvolvedor se torna completamente independente em algum lugar após dois ou três anos de experiência "o segundo número".

5. O desenvolvimento de backend foi tradicionalmente o coração da nossa empresa. O desenvolvedor de backend deve ser realmente o melhor em tudo - inteligente, criativo, responsável, limpo, bem como um bom jogador de equipe e, de preferência, com um lug em volta da cabeça. De um ponto de vista técnico, nossa especificidade é que a maioria do backend é escrita em C ++, e não scripting idiomas - Altas cargas forçando-a.

Alexander Nedzelsky, HeSoft Web Studio Head

1. Se falarmos sobre uma certa imagem coletiva de um desenvolvedor de bachend, então:

  • entendendo o OOP, modelos de design, conhecimento de algoritmos básicos e estruturas de dados;
  • posse de uma das linguagens de programação (ou várias);
  • experiência com DBMS, conhecimento SQL;
  • compreender os princípios de projetar bancos de dados relacionais;
  • experiência com estruturas populares;
  • experiência com sistemas de gerenciamento de versões;
  • conhecimento básico de HTML, CSS, Javascript;
  • a capacidade de configurar um ambiente de teste.

2. "Bloco de notas" e cabeça nos ombros. E se sério, qualquer IDE / editor e área de teste. Normalmente, as ferramentas são selecionadas dependendo de preferências / tarefas / capacidades.

3. Técnico estritamente maior.

4. A presença de projetos comerciais concluídos e trabalhadores.

5. Estamos desenvolvendo aplicativos da Web, sites e serviços principalmente no PHP / MySQL. Ao mesmo tempo, usamos yii / symfony e 1c-bitrix para soluções padrão. Portanto, a experiência e o conhecimento relevantes são importantes para nós.

Eduard Gursky, liderança técnica na equipe de desenvolvimento interno, JetBrains

1. O desenvolvedor da Web do back-end é, na verdade, uma pessoa que desenvolve a lógica do servidor e consciente de qual contexto que será executado - no contexto de aplicativos da Web. Se os aplicativos da Web são implementados em Java, e na maioria dos casos, é assim, na verdade, o mesmo especialista aplicar todos os mesmos requisitos para conhecimentos e habilidades como o desenvolvedor Java habitual: conhecimento da linguagem, compreensão do trabalho e de dispositivos de Os principais componentes da biblioteca do Java SDK, etc. No entanto, as experiências também são adicionadas com vários frameworks da Web (simplificando a implementação da injeção de dependência, MVC, etc.), a capacidade de avaliar e melhorar o desempenho do aplicativo, sua escalabilidade. É necessário levar em conta e entender a rapidez com que o aplicativo do usuário receberá o resultado do código do servidor, bem como com que forma com segurança e racionalidade, a outra funcionalidade do servidor é racional através do navegador do usuário.

Muitas vezes, o aplicativo da Web de backend requer a integração com serviços de terceiros ou exportação de sua funcionalidade como uma API externa. O desenvolvedor deve entender como essas tarefas estão sendo implementadas quais protocolos e mecanismos são usados \u200b\u200bpara isso.

Apesar do fato de que tal pessoa estiver envolvida principalmente no desenvolvimento da lógica do Application Server, a necessidade de depurar ou prototipagem usando a parte do cliente do aplicativo. A partir daqui, segue a necessidade de entender a operação do protocolo TCP / IP, protocolos HTTP, os princípios da interação do navegador com o aplicativo da Web, o conhecimento básico sobre o layout, os estilos CSS, os recursos do JavaScript.

2. Geralmente este IDE para o desenvolvimento. Você também precisa usar um profiler para resolver tarefas de produtividade, consumo excessivo de recursos, etc. Em nossa equipe, usamos a ideia do Intellij.

3. Não impusemos requisitos formais para o nível de educação dos candidatos. Experiência mais importante, compreensão e inteligência e, claro, a motivação do homem.

4. Qualquer experiência no desenvolvimento de aplicativos da Web de produção, é claro, é uma vantagem. Conhecimento e habilidades descritos acima não podem estar presentes em um especialista na ausência de experiência relevante. Nas entrevistas, geralmente estamos interessados \u200b\u200bnos detalhes da participação em vários projetos especificados no currículo para avaliar a experiência que o candidato poderia ser adquirido implementando essas tarefas. Um especialista que tentou várias abordagens e tecnologias para resolver tarefas semelhantes no desenvolvimento de aplicativos da Web que podem analisar os prós e contras de cada abordagem, é um candidato muito interessante.

5. A experiência de desenvolvimento de aplicativos usando os produtos JetBrains é bem-vinda. Estamos todos na empresa tente usar nossos produtos, porque eles são confortáveis \u200b\u200be porque queremos torná-los ainda mais convenientes!

Também recentemente, praticamos o desenvolvimento de aplicativos da web na linguagem de Kotlin. Isso dá uma série de vantagens significativas, e também torna o processo de escrever um código mais agradável. O desejo do candidato é recebido em estudar novas linguagens e novas abordagens para a implementação de aplicativos da Web.

Dmitry Ovchinnikov, desenvolvedor web
Natalia Beetle, Recrutador em Sooo "Fluxo de Jogo" no Centro Minsk para Desenvolvimento Wargaming

1. O desenvolvedor de backend requer uma profunda compreensão da web: da formação de uma solicitação HTTP na lateral do navegador antes da implementação de Comunicações InterSPerson usando vários protocolos. A Web em Wargaming não é apenas uma "conta pessoal" do jogador, mas também muitos serviços fornecendo autenticação uniforme, registro, participação no programa de referência, etc.

Também é importante ter pensamento de engenharia. Combinado com um grande horizonte técnico, isso permite oferecer soluções eficazes.

E, claro, certifique-se de escrever código de qualidade. A face de um programador é seu código. O conhecimento de grandes arquiteturas e padrões de programação modernos geralmente é obrigatório ao trabalhar em uma grande equipe sobre um projeto complexo.

2. Em Wargaming, a pilha de tecnologia usada é bastante padrão: a principal matriz de projetos da Web é desenvolvida em Python, alguns serviços são escritos no PHP, e outros, críticos para acelerar e computação paralela, em Erlang. O MySQL é usado para armazenamento, para cache - memcached. Rabbitmq selecionado como um pneu de mensagens na empresa. De frameworks - Django e torcido. Se falarmos sobre a parte da frente, então este é um pacote de backbone / sublinhado / jquery comum.

Quanto às ferramentas de desenvolvimento, em Wargaming, aderimos à posição "O que é melhor para o desenvolvedor". Alguém usa IDE moderno, alguém mais confortável se sente com Vim ou Emacs. Não importa, com a ajuda de quais ferramentas nós realizamos nosso trabalho, se o resultado for serviços convenientes e úteis que façam milhões de jogadores todos os dias ao redor do mundo todos os dias.

3. Não temos requisitos formalizados para o nível de educação. Perfil (técnico, matemático) A educação será uma vantagem, pois indica a presença de uma preparação teórica fundamental do candidato, mas é improvável que se torne um fator decisivo quando a admissão para o trabalho. Entendemos que o conhecimento no campo da matemática, Oop, algoritmos clássicos e estruturas de dados pode ser obtido independentemente. Preferência é dada aos candidatos com experiência. Além disso, a capacidade de um candidato para resolver tarefas de engenharia e fazer soluções de engenharia e não apenas escrever código.

4. Requisitos para experiência de trabalho dependem da vaga. Se convidarmos um jovem especialista, em primeiro lugar, vamos olhar para seus "projetos domésticos" e desenvolvimentos universitários. Devemos ter certeza de que uma pessoa veio a nós não por acaso, foi uma escolha consciente que pode ser confirmada por exemplos reais de pelo menos pequenos, mas concluídos projetos. Quando se trata de um especialista experiente - os requisitos são mais específicos. Somos importantes para experimentar em várias áreas: bancos de dados, Linux, servidor da Web (Apache, Nginx), conhecimento e compreensão dos sistemas de cache (memcached), sistemas de mensagens (Rabbitmq) e experiência com estruturas (Django). A experiência na otimização de projetos de alta carga será muito útil e permitirá que você se junte rapidamente ao processo de desenvolvimento e trabalhe com máxima eficiência para você e equipe. Para os principais especialistas e especialistas, além do acima, um amplo horizonte técnico e experiência com uma variedade de pilha tecnológica são importantes.

5. Suporte para infraestrutura da Web para um grande número de jogadores do universo wargaming.net implica a capacidade de trabalhar com altas cargas e estabelecer na arquitetura do aplicativo a capacidade de operar grande quantidade Solicitações de.

Além de prontidão para a rede, é importante lembrar a segurança. Portanto, o desenvolvedor da Web em Wargaming é obrigado a saber sobre os mecanismos de combater as principais ameaças e garantir a confiabilidade de seu código.

Igor preparado Strompel

O Centro de Pesquisa do Portal SuperJob.Ru especialmente para o "Administrador do Sistema" estudou ofertas dos empregadores. Pela posição do desenvolvedor da Web-Web, os requisitos especiais ainda não estão definidos, eles são principalmente semelhantes ao fato de serem apresentados aos programadores.

Programador Java.

ISTO.
Telecomunicações.
Indústria
Produção
Prédio
Gestão da propriedade
Serviços B2V. VENDAS B2B. VENDAS B2C.
EU. 65 000 – 80 000 54 000 – 71 000 50 000 – 67 000 60 000 – 75 000 50 000 – 65 000 50 000 – 64 000
50 000 – 64 000 42 000 – 57 000 40 000 – 53 000 45 000 – 60 000 40 000 – 52 000 40 000 – 51 000
Ii. 80 000 – 90 000 71 000 – 87 000 67 000 – 85 000 75 000 – 90 000 65 000 – 83 000 64 000 – 87 000
64 000 – 72 000 57 000 – 70 000 53 000 – 68 000 60 000 – 70 000 52 000 – 66 000 51 000 – 70 000
Iii. 90 000 – 150 000 87 000 – 125 000 85 000 – 115 000 90 000 – 130 000 83 000 – 120 000 87 000 – 125 000
72 000 – 120 000 70 000 – 100 000 68 000 – 92 000 70 000 – 100 000 66 000 – 96 000 70 000 – 100 000
4. 150 000 – 200 000 125 000 – 150 000 115 000 – 150 000 130 000 – 180 000 120 000 – 170 000 125 000 – 160 000
120 000 – 160 000 100 000 – 120 000 92 000 – 120 000 100 000 – 145 000 96 000 – 140 000 100 000 – 130 000
Cf. 125 000 110 000 100 000 115 000 115 000 110 000
100 000 88 000 80 000 92 000 90 000 90 000

Linhas salariais ímpares - Médio MSK, mesmo - em São Petersburgo

Faixa salarial Requisitos e desejos de habilidades profissionais
Alcance I.
  • Ensino Superior Incompleto (Técnico / TI)
  • Excelente conhecimento HTML, CSS, Java, XML
  • Conhecimento de princípios de programação orientados a objetos
  • Conhecimento de fundamentos teóricos do desenvolvimento de banco de dados
  • Conhecimento do inglês no nível de documentação técnica de leitura
  • Experiência de programação Java a partir de seis meses
Intervalo II.
  • Experiência com servidores da Web e servidores de aplicativos
  • Experiência de programação Java a partir de 1 ano
GANHEIRO III.
  • Educação Superior (Técnica / TI)
  • Modelos de design de conhecimento Java e J2ee
  • Experiência usando ferramentas especiais (hibernate, primavera, struts, etc.)
  • Experiência na equipe de desenvolvimento
  • Experiência com sistemas de controle de versões
  • Experiência com DBMS (MS SQL Server ou Oracle)
  • Experiência de programação Java de 2 anos
Intervalo IV.
  • A presença de certificados qualificados
  • Experiência de experiência sistemas de informação e preparação da documentação do projeto
  • Experiência com soluções de integração (IBM WebSphere, Oracle Fusion Middleware)
  • Experiência no desenvolvimento de aplicativos multi-nível
  • Experiência de programação Java a partir de 3 anos
Possíveis desejos:
  • conhecimento do inglês no nível coloquial ou livre
  • grupo de desenvolvedores manual de habilidades

Valery Chernetova Preparado, Líder do Analista Superjob


Em contato com

  • Transferir

Esta lista apareceu como um memorando pessoal em tópicos que discuti com colegas e amigos e em que queria entender o mais profundo ...

Eu não sou um grande amante para fazer perguntas técnicas sobre as entrevistas: Para mim é melhor sentar-se muito com um candidato (ou um candidato) em um teclado sobre algum código real, um problema real - e um dia inteiro para se envolver Emparelhe a programação, é desejável alternadamente com o resto da equipe. Mas acredito que algumas questões técnicas podem ser um bom ponto de partida para o início de uma conversa fascinante e agradável e permitirão que um do outro seja mais profundo.

Uma série de questões relacionadas à parte do servidor são coletadas neste repositório, que podem ser usadas ao verificar possíveis candidatos. Em nenhum caso não é recomendado para perguntar tudo Perguntas para um candidato: levará várias horas e não fará sentido, porque cobrem uma ampla gama de tópicos. Ninguém pode saber tudo. Escolha a seção mais relevante e as perguntas mais interessantes para expandir a conversa.

Um aviso

A maioria das perguntas estão abertas, algumas simplesmente não direito ou errado Responder. Pelo contrário, eles devem ser um ponto de partida da conversa, que em uma ideia deve melhor mostrar habilidades humanas do que uma resposta simples. Pessoalmente, eu geralmente preferindo perguntas, as respostas para as quais eu mesmo não sei.

Mais uma vez, enfatizo que dificilmente é suficiente fazer perguntas. No final da entrevista, passe uma longa sessão de programação do par: este é um dos melhores opçõesPara entender o estilo e se aproximar uns aos outros - e dar para entender os candidatos, o que esperar do trabalho futuro.

Este projeto foi criado de acordo com a amostra de "perguntas para uma entrevista para o trabalho da fronteira" de @darcyclarke.

Onde estão as respostas?

Mais cedo ou mais tarde, complementarei o artigo com as respostas apropriadas. Eu seria grato por alguma ajuda!

Perguntas sobre modelos de design:

Por que os objetos globais e a estatística são maus? Você pode mostrar no código de exemplo?

Conte-nos sobre a inversão de controle e como ela melhora o código da organização.

A lei demers (o princípio da consciência mínima) afirma que cada módulo de programa deve ter conhecimento limitado sobre outros módulos e deve interagir apenas com "amigos" diretos (às vezes é formulado como "não fale com estranhos"). Você pode escrever um código que viole esse princípio? Por que sua má organização e como consertar isso?

O registro ativo é um modelo de design que incentiva a implementação de funções a si mesma, como inserir, atualizar e excluir e propriedades que correspondem às colunas de alguma tabela básica no banco de dados. Você acha e experimenta, quais restrições e armadilhas têm esse modelo?

O Data-Mapper é um modelo de design que incentiva o uso de uma camada de conversores (mapas) movendo dados entre objetos e banco de dados, ao mesmo tempo, mantendo sua independência entre si e do próprio conversor. Em contraste com esse modelo, no registro ativo, os objetos incluem diretamente as operações para se salvar no banco de dados e propriedades correspondentes às tabelas básicas no banco de dados. Você tem uma opinião sobre esses modelos? Em que casos você prefere um deles para outro?

Por que quando administrado a nulo muitas vezes mencionam "um erro de bilhões de dólares"? Quer discutir técnicas para evitar isso, como o modelo de objeto nulo apresentado no livro GOF, ou tipos opcionais?

Por que a composição é frequentemente melhor que a herança?

Qual é o nível de segurança (camada anti-corrupção)?

Singleton é um modelo de design que cria uma instância da classe para um único objeto. Escreva o caminho certo (singleton seguro) não é tão fácil. Tentar?

A capacidade de alterar a implementação sem influenciar a parte do cliente é chamada de apresentação de dados abstrata (abstração de dados). Escreva um exemplo que viole essa propriedade e corrija-a.

Escreva um trecho do código que viole o princípio de não se repita (seco). Em seguida, corrija-o.

Como você vai lidar com as dependências do inferno (o inferno da dependência)?

Por que é goto - é mal?

O princípio da confiabilidade é a regra geral da organização do Código que recomenda "Ser conservador é que você envia e liberal no que você aceita". Muitas vezes é formulado como "Ser tolerante leitor e escritor cauteloso". Quer discutir o significado desse princípio?

Separação de discussão - princípio de design para separação programa de computador Para áreas individuais, cada uma das quais é responsável por sua tarefa. Existem muitos mecanismos diferentes para separar as responsabilidades (uso de objetos, funções, módulos ou modelos, como MVC e semelhantes). Quer discutir este tópico?

Perguntas sobre a organização do código (design de código):

Muitas vezes é dito que uma das tarefas mais importantes do projeto orientada a objetos (e a organização do Código como um todo) é uma embreagem e fraqueza forte. O que isto significa? Por que eles são tão importantes e como alcançá-los?

Por que, na maioria das línguas, o índice de matriz começa a partir do zero?

Como os testes e o TDD afetam o código da organização?

Escreva um fragmento de código que viole o princípio de não se repita (seco). Explique por que ele tem uma organização ruim e correta.

Qual é a diferença entre a embreagem e a conexão?

O que é refatorar?

São comentários no código são úteis? Alguém diz que eles devem ser evitados, se possível, e idealmente eles não precisam de jeito nenhum. Você concorda?

Qual é a diferença entre o código e a arquitetura da organização?

Por que os testes de TDD são escritos antes do código?

C ++ suporta várias heranças, e o Java permite que a classe implemente várias interfaces. Que efeito o uso desses fundos para a ortogonalidade? Existe alguma diferença nos efeitos entre o uso de múltiplas heranças e várias interfaces? Existe uma diferença entre usar delegação e herança? [Esta é uma questão do livro "Programador pragmático" Andrew Khanta e Defvida Thomas]

Prós e contras Armazenamento da lógica da área de assunto em procedimentos armazenados.

Na sua opinião, por que a organização orientada a objetos domina tantos anos no mercado?

Se o seu código tiver uma organização ruim, como você entende isso?

Perguntas em Idiomas de Programação:

Diga o O. três principais. As desvantagens de sua linguagem de programação favorita.

Por que aumenta o interesse na programação funcional?

O que é um fechamento e o que é útil? O que é comum com fechamentos e classes?

Quando é conveniente usar genéricos?

O que é funções de encomenda? O que eles são necessários? Escreva esse recurso em qualquer idioma.

Escreva o ciclo e convertê-lo para uma função recursiva usando apenas estruturas imutáveis \u200b\u200b(isto é, sem variáveis). Descreva-o.

O que significa quando a linguagem considera funciona como objetos de primeira classe?

Mostrar um exemplo quando uma função anônima pode ser útil.

Por que você precisa de namespace? Venha com uma alternativa.

Conte-nos sobre a compatibilidade Java e C # (ou selecione duas outras línguas arbitrárias).

Por que muitos desenvolvedores não gostam de Java?

O que faz uma boa língua boa e má língua - ruim?

Escreva duas funções, uma referencialmente transparente e outra referencialmente opaca. Vamos discuti-los.

Qual é a pilha e o que é um monte? O que é o estouro de pilha?

Por que é importante que as funções sejam objetos de primeira classe na linguagem?

Em algumas línguas, especialmente com uma abordagem funcional, é permitida uma técnica, que é chamada de comparação com a amostra. Ela te conhece? Como o mapeamento de amostra difere do design do interruptor?

Por que, em algumas exceções de linguagens de programação, não são implementadas? Quais são as vantagens e desvantagens dessa abordagem?

Se o gato é animal, então é verdade que Takecare - Isso é takecare. ?

Por que em Java, C # e muitos outros designers de idiomas não fazem parte da interface?

Nos últimos anos, muito barulho ao redor do Node.js. Qual é a sua opinião sobre o uso na linguagem de retroiluminação, que foi originalmente concebida para trabalhar no navegador?

Imagine que você tenha uma máquina do tempo e há uma oportunidade para retornar em um certo ponto no tempo na história de Java (C #, Python, ir ou outra coisa) e conversar com alguns dos criadores do JDK. O que você tentaria convencê-los? Excluir exceções controladas? Adicionar tipos primitivos não assinados? Herança múltipla?

Perguntas para o desenvolvimento da Web:

Por que os cookies nativos e os cookies de terceiros são processados \u200b\u200bde maneira tão diferente?

Como você gerenciaria a numeração de versões da API de serviços da Web?

Do ponto de vista do backend, há alguma desvantagem ou obstáculos à introdução de aplicações de página única?

Por que geralmente nos esforçamos tanto para que o serviço fosse apátrida? O que é tão bom no código sem estado? Por que e quando o armazenamento de condição (estado) é ruim?

Descansar e sabão: Em que situações você escolherá uma dessas abordagens e, em que outra?

No desenvolvimento da Web, as abordagens do controlador de visualização de modelos e da visualização de modelos-View-View são amplamente semelhantes tanto no BESENE quanto na frente. O que eles imaginam e por que apropriado usá-los?

Perguntas do banco de dados:

Como você publica o aplicativo de um banco de dados para outro, por exemplo, do MySQL no PostgreSQL? Se você tiver que gerenciar tal projeto, quais problemas você espera?

Por que o banco de dados considera nulo como um caso tão especial? Por exemplo, por que no SQL SELECT * da tabela onde o campo \u003d null não dá a gravação com o campo nulo?

O ácido é um acrônimo para atomicidade, consistência, isolamento, durabilidade (atomicidade, consistência, isolamento, estabilidade). A maioria dos mecanismos de banco de dados garante essas quatro propriedades para transações no banco de dados. O que você sabe sobre isso? Quer te contar mais?

Como você lidaria com a transferência do esquema DB, ou seja, como você automatiza as alterações no esquema DB como o aplicativo é desenvolvido a partir da versão para a versão?

Como implementar uma carga preguiçosa? Quando é útil? O que são pedras subaquáticas?

O chamado "problema N + 1" ocorre quando o código deve carregar elementos filho a partir do relacionamento "pais-descendentes" em ORM com inicialização preguiçosa e, portanto, enviar uma solicitação para o registro pai e, em seguida, uma solicitação para cada subsidiária . Como resolver o problema?

Como você encontra os pedidos de maior custo no aplicativo?

Na sua opinião, é sempre necessário normalizar o banco de dados? Quando é aconselhável usar o banco de dados desnormalizado?

Um dos métodos de integração contínua é chamado de dívida azul-verde. Consiste em usar dois ambientes de operação industrial, tanto quanto possível - e implantados em um deles durante o outro e, em seguida, seguro tráfego comutação de um ambiente para o segundo após o teste em uma configuração conveniente. Este método é complicado se a dívida envolve a alteração da estrutura ou conteúdo do banco de dados. Eu gostaria de discutir este tópico com você.

Perguntas no NOSQL:

O que é consistência finalmente (eventual consistência)?

E quanto ao teorema da PAC, dar exemplos de sistemas CP, AP e CA.

Como você explica o respingo de interesse em Nosql ultimamente?

Como o Nosql resolve o problema da escalabilidade?

Nesse caso, você preferirá um DBMS orientado a documentos como o MongoDB em vez de um DBMS relacionacional, como o MySQL ou o PostgreSQL?

Perguntas sobre a versão do código:

Por que a implementação de filiais em mercúrio ou git é mais fácil do que no SVN?

Quais são os prós e contras dos sistemas de controle de versões distribuídas, como o Git, em comparação com vcs centralizados como SVN?

Você pode descrever o fluxo de fluxo de trabalho e o gitflow?

O que é rebase (mover)?

Por que a fusão é mais fácil de se exercitar de mercurial ou git do que em svn e cvs?

Perguntas sobre paralelismo:

Por que você precisa de um paralelismo? Explique.

Por que é tão difícil testar o código multi-threaded / paralelo?

Qual é o status da corrida? Escreva um exemplo em linguagem arbitrária.

O que é bloqueio mútuo? Você pode escrever algum código que sofre com fechaduras mútuas?

Qual é a fome de recursos (fome de processo)? Se necessário, vamos considerar sua definição.

O que é um algoritmo de sincronização sem bloqueio sem expectativas (algoritmo de espera)?

Perguntas sobre sistemas distribuídos:

Como testar o sistema distribuído?

Nesse caso, você aplica comunicação assíncrona entre dois sistemas?

Quais são as principais pedras subaquáticas dos procedimentos de desafio remoto?

Se você criar um sistema distribuído para escalabilidade e confiabilidade, quais problemas diferentes podem ocorrer em um ambiente de rede fechado e seguro - e em um sistema geograficamente distribuído e público?

Como garantir a tolerância a falhas do aplicativo da Web? Aplicação de desktop?

Como lidar com falhas em sistemas distribuídos?

Vamos falar sobre diferentes abordagens para restauração da capacidade de trabalho (reconciliação) após uma violação de conexão de rede.

Quais são os equívocos sobre a computação distribuída?

Quando você aplicar solicitação / resposta e quando publicar / se inscrever?

Suponha que o sistema com o qual você trabalhe não suporta transacionamento. Como você o implementaria do zero?

Perguntas sobre o software de ciclo de vida e equipe manual:

O que é flexibilidade (agilidade)?

Como você vai trabalhar com um código legado?

Diga, eu sou seu gerente de projeto e não um especialista em programação. Tente me explicar o que é um código legado e por que você precisa cuidar da qualidade do código.

Eu sou o diretor executivo da sua empresa. Explique-me Kanban e convença você a investir nele.

Qual é a principal diferença entre a metodologia de desenvolvimento flexível e o modelo de cascata?

Sendo um líder de grupo, como você resolve o problema de muitas reuniões?

Como você vai lidar com o projeto que é realizado com um atraso forte?

"As pessoas e a interação são mais importantes do que os processos e ferramentas" e "cooperação com o cliente é mais importante do que a harmonização dos termos do contrato" é metade dos valores proclamados em manifesto ágil. Vamos discuti-los.

Diga-nos quais decisões você tomaria se houvesse o diretor técnico da sua empresa.

Existe algum benefício dos gerentes de programas?

Faça um cronograma de trabalho, usando uma programação flexível (ou seja, sem o horário de trabalho instalado) e as políticas de juros "tomar quando você precisar".

Como você lidaria muito de ensino e convencer os desenvolvedores a não deixar a equipe sem aumentar o salário? Que bem a empresa pode fazer com que fiquem?

Quais são as três principais qualidade que você valoriza em colegas, exceto a programação?

Quais são as três coisas principais sobre a programação da programação de conhecer as humanidades, na sua opinião?

Imagine que a empresa lhe fornece um mês e orçamento para melhorar a qualidade da vida cotidiana de você e de seus colegas. O que você faria?

Perguntas sobre lógica e algoritmos:

Escreva uma fila FIFO usando apenas pilhas de lifo. Em seguida, crie uma pilha de lifo usando apenas filas FIFO.

Escreva um fragmento do código para transbordar o buffer.

Escreva um fatorial com uma recursão final.

Em qualquer idioma, escreva o RESCH, que exibe imediatamente os valores inseridos. Melhore-o para a calculadora RPN.

Como você projetaria um utilitário para desfragmentação?

Escreva um programa que gere labirintos aleatórios.

Escreva um código de exemplo que cria vazamento de memória.

Gerar uma seqüência de números aleatórios exclusivos.

Escreva um exemplo de um simples sistema de coleta de lixo.

Escreva um corretor simples de mensagens em qualquer idioma.

Escreva um servidor web muito simples. Faça um plano de funções que precisam ser implementadas no futuro.

Como você classifica o arquivo de 10 GB? Como você vem a fazer alterações em um arquivo de 10 TB?

Como você encontra um programa de arquivos duplicados?

Perguntas sobre arquitetura em:

Quando o cache não é necessário e até prejudica?

Por que a arquitetura orientada para eventos melhora a escalabilidade?

O que torna o código legível?

Qual é a diferença entre o desenvolvimento de design (design emergente) e a arquitetura evolutiva?

Escala horizontal e vertical: O que eles diferem? Quando aplicar uma coisa, e quando é outro?

Como trabalhar com a interceptação do controle em falhas (failover) e sessões de usuário?

O que é CQRS (segregação de responsabilidade da consulta de comando)? Como difere do antigo princípio da separação da consulta de comando?

O que é uma arquitetura de três níveis?

Como você vai projetar um sistema de software com escalabilidade?

Quais estratégias para resolver o problema do C10K?

Como você projetam um sistema P2P Central (i.e. sem servidor central)?

Por que o CGI não é dimensionado?

Como você protege seus sistemas de ligação ao fornecedor (LOCK-IN)?

Quais são as deficiências do modelo de design "Publisher-Assinante" ao dimensionar?

O que aconteceu desde os anos 80 no desenvolvimento de processadores, por que é importante para a programação?

Em que estágio do ciclo de vida deve considerar o desempenho e como?

Como o problema do fracasso da recusa pode não aparecer por causa do ataque do DOS, mas por causa do design ruim ou devido ao problema da arquitetura?

Qual é a relação entre desempenho e escalabilidade?

Quando é aceitável usar um engajamento forte (acoplamento apertado)?

Quais características o sistema deve ser publicado para ir para a nuvem?

A unidade do design da terra dos arquitetos? Simplesmente coloca: Pode um bom design surgir dos esforços coletivos de todos os desenvolvedores?

Qual é a diferença entre design, arquitetura, funcionalidade e qualidades estéticas? Vamos discutir isso.

Perguntas sobre arquitetura orientada para serviços e microsserviço:

Por que em SOA longas transações não são encorajadas e, em vez disso, são convidadas a usar saga?

Qual é a diferença entre SOA e Microservice?

Vamos falar sobre a numeração de versões de serviços da Web, compatibilidade de versão e alterações críticas que quebram a compatibilidade anterior.

Qual é a diferença entre operação de transação e compensação em saga, em SOA?

Quando é micro micro?

Quais são os prós e contras da Arquitetura Microservice?

Perguntas de segurança:

Como escrever um código seguro? Na sua opinião, é responsabilidade do desenvolvedor ou deve ser um especialista separado da empresa? E porque?

Por que você diz que não deveria tentar inventar ou projetar suas próprias regras de criptografia?

Qual é a autenticação de dois fatores? Como você o implementa em um aplicativo da Web existente?

Se você não lidar com os logs cuidadosamente, há sempre um risco que as informações confidenciais chegarão lá, incluindo senhas. Como você evita tal problema?

Escreva um snippet do código sujeito à injeção do SQL e corrija-a.

Como posso encontrar uma vulnerabilidade para a injeção SQL pelo método de análise de código estático? Eu não estou esperando que você escreva o algoritmo acabado, como é muito grande, mas vamos discutir a abordagem geral.

O que você sabe sobre o script cruzado? Se você não se lembra, vamos ver sua descrição na internet e falar sobre isso.

O que você sabe sobre a consulta cruzada falsa? Se você não se lembra, vamos ver sua descrição na internet e falar sobre isso.

Como o HTTPS funciona?

Qual é o ataque "homem no meio"? E por que https ajuda a proteger contra isso?

Como você pode impedir o roubo de uma sessão de usuário? Muito provavelmente, você se lembra do que o roubo é uma sessão ou cookies, caso contrário, lemos a página da Wikipedia juntos neste tópico.

Problemas gerais:

Por que é importante funcionar a programação? Quando devo usar o idioma da programação funcional?

Como as empresas gostam da Microsoft, Google, Opera e Mozilla ganham seus navegadores?

Por que a abertura do soquete TCP tem grande sobrecarga?

O que é importante usar o encapsulamento?

O que é um sistema em tempo real e como difere do sistema comum?

Qual é a conexão entre os idiomas de programação em tempo real e a alocação de memória em uma pilha?

Inalterando é a prática de uma única configuração de valores no momento da criação de um objeto, e esses valores são então alterados. Como a imutabilidade ajuda a escrever um código mais seguro?

Prós e contras de valores variáveis \u200b\u200be imutáveis.

O que é uma lacuna de objetos relacionais (incompatibilidade de impedância relacionada ao objeto)?

Quais princípios você se aplica para determinar o tamanho do cache?

Qual é a diferença entre TCP e HTTP?

Quais são os compromissos da seleção de renderização no lado do cliente e no lado do servidor?

Como desenvolver um protocolo de comunicação confiável baseado em não confiável?

O inventor do ponteiro zero Tony Hoar disse uma vez "posso chamá-lo com meu bilhão de dólares erro", porque atrairá "incontáveis \u200b\u200berros, vulnerabilidade e fracassos sistêmicos, que provavelmente causaram sofrimento e danos a um bilhão de dólares nos últimos quarenta anos . " Suponha que você queira eliminar a possibilidade de usar os ponteiros de zero em sua linguagem de programação: Como você decide uma tarefa? Quais conseqüências ela pode ter?

Perguntas abertas:

Por que as pessoas resistem à mudança?

Explique o conceito dos fios com sua avó.

Como desenvolvedor, você quer simultaneamente e aplica a inovação e é previsível. Como esses dois gols podem existir uns com os outros dentro da mesma estratégia?

O que faz um bom código bom?

Explique como a transmissão de streaming é realizada e como você o implementa.

Suponha que sua empresa lhe dê uma semana para melhorar a vida para você e seus colegas: Como você usa esta semana?

O que você descobriu na última semana?

Em qualquer projeto há elemento estético. A questão é que esta estética é sua amiga ou inimiga?

Nomeie os últimos cinco livros que você lê.

Como você implementa uma abordagem de entrega contínua em uma grande empresa de sucesso, para a qual a transição de um modelo de cascata para a abordagem de fornecimento contínuo não é trivial devido ao seu tamanho e complexidade comercial?

Quando faz sentido reinventar a roda?

Vamos falar sobre a invenção das rodas de Beach, a rejeição da síndrome do desenvolvimento de outra pessoa e a prática de usar a empresa ou uma equipe de desenvolvedores de seus próprios serviços e produtos (comendo sua própria comida).

O que você primeiro automatiza no fluxo de trabalho atual?

Quais são as dificuldades por escrito programas? O que dificulta a oferta de software?

Você prefere trabalhar em projetos completamente novos (Greenfield) ou continue o atual (brownfield)? Por quê?

O que torna o sistema operacional quando não há comando para a execução de um código específico e parece desocupado? Eu gostaria de começar uma conversa sobre interrupções, demônios, serviços de fundo, pesquisas, processamento de eventos, etc.

Explique Unicode ou Transações no DBMS do bebê de cinco anos.

Dar argumentos em favor da arquitetura monolítica.

O que significa ser um "desenvolvedor profissional"?

Programação é arte, artesanato ou engenharia? Sua opinião.

Por que as corporações pioram a introdução de inovações do que as startups?

Sua última conquista você tem orgulho?

Perguntas com fragmentos de código:

Qual é o resultado da execução desta função Javascript?

Function hotedupevents () (para (var eu \u003d 0; eu< 3; i++) { document.getElementById("button" + i) .addEventListener("click", function() { alert(i); }); } }
E quanto à apagamento dos tipos, o que dará esse código java e por quê?

ArrayList. Li \u003d nova arraylist (); ArrayList. Lf \u003d nova arraylist (); if (li.getclass () \u003d\u003d lf.getclass ()) // Avaliou para o True System.out.println ("igual");
Você pode detectar vazamento de memória?

Pilha de classe pública (elementos de objeto privado; private int size \u003d 0; private static final int defulform_initial_capacity \u003d 16; pilha pública () (elementos \u003d novo objeto;) push público (objeto E) (Essurecapacity (); elementos \u003d E;) POP do objeto público () (if (size \u003d\u003d 0) lance New ForceStackException (); Elementos de retorno [- tamanho];) / ** * Espaço Essure para pelo menos mais um elemento, aproximadamente * dobrando a capacidade toda vez que a matriz precisa Para crescer. * / Private Void ObjectCapacity () (se (elements.length \u003d\u003d tamanho) elementos \u003d array.copyof (elementos, 2 * tamanho + 1);)
Você pode se livrar do interruptor e escrever mais código orientado a objetos?

Formatador de classe pública (serviço de serviço privado; Formatéria pública (serviço;) string pública Dothejob (string theinput) (string response \u003d service.askForpermission (); interruptor (resposta) (caixa "falha": retorne "erro"; "OK" : retorno string.format ("% s% s", theinput, theinput); Padrão: retorne nulo;))))
Você pode se livrar de operadores e escrever mais código orientado a objetos?

Classe pública Theserviço (Final Privado FileHandler FilePhandler; Forepository final privado FOOREPOpository; Public theservice (FileHandler fileHandler, FOOREPOpository FOOREPOpository) (este.filehandler \u003d filehandler; this.foopository \u003d FOOREPOpository;) String Public (Final String File) (Final String Rescritenurl \u003d Filehandler.getxmlfilefromfilename (arquivo); Final String ExecutionID \u003d filehandler.gextionidfromfilename (arquivo); if ((executionid \u003d\u003d "" "(rewrittenurl \u003d\u003d" "" "" "";) foo conhecidofoo \u003d forepepository.getfoobyxmlfilename rewrittenurl ); if (conhecidofoo \u003d\u003d null) (return "";) retorna conhecidofoo.dothat (arquivo);)))
Como fazer uma refatoração de tal código?

Função () (HRESULT Error \u003d S_OK; se (bem-sucedido (operação1 ()) (se (sucedeu (Operation2 ()) (se (sucedeu (Operation3 (Error \u003d Operation4Failed;)) Operação3Failed;)) mais (Erro \u003d operação2Failed;)) mais (error \u003d operation1Failed;) Retornar erro;)

Desenvolvedor de back-end (do inglês. Desenvolvedor de back-end (verso) Este é um especialista que está envolvido em uma parte administrativa de software de um aplicativo da Web, conteúdo do sistema interno, tecnologia de servidor - banco de dados, arquitetura, lógica de software. A profissão é adequada para aqueles que estão interessados \u200b\u200bem ciência da computação (veja a escolha de uma profissão por interesse em assuntos escolares).

O desenvolvedor Bec-end é um lutador dianteiro invisível.

Sites modernos, aplicativos da Web e jogos tornaram-se muito complexos, então toda uma equipe de especialistas trabalha neles. Para criar um site completo, bonito, funcional e fácil de usar, é necessário um trabalho consistente dos desenvolvedores front-end e back-end. Este é o trabalho rápido para criar um site ou aplicativo da Web e facilita o seu serviço.

Falando figurativamente, o desenvolvimento de back-end é a criação de um motor de carro, enquanto o desenvolvimento da frente é a criação do projeto e funções do controle da máquina. O desenvolvedor traseiro funciona em estreita conexão com o desenvolvedor front-end, recebendo informações do usuário e retornando o resultado resultante.

Ferramentas básicas Back End Developer - Servidor Idiomas de Programação: como PHP, Python, Ruby, Java, Perl, Nó JS (plataforma de software). Além do nó JS, é útil aprender Express (biblioteca para interagir a plataforma do nó JS com um servidor) e um mongo dB (banco de dados para obter e armazenar informações).

Como fundos adicionais Symfony, CodeIniter, Yii, Zend Framework, Kohana, etc. são usados \u200b\u200bpara armazenar dados usando o MySQL / SQLite.

Características da profissão

Desenvolvedores modernos não só escrever código para programas. Então funcionou programadores 10-15 anos atrás. Atualmente, esse termo é inadequado, porque no trabalho muitas vezes é possível fazer sem escrever código, simplesmente conectando as peças acabadas a uma única configuração. E programadores agora são chamados de "desenvolvedor" ou "engenheiro".

Com o desenvolvimento da esfera IT, os projetos estão se tornando mais complexos e são um designer que pode ser coletado usando soluções prontas (estruturas) para quase todas as tarefas.

Assim, a funcionalidade Pro-end do desenvolvedor é assim:

  • design da arquitetura de serviço;
  • criando um núcleo do site;
  • desenvolvimento da plataforma e principal funcional;
  • trabalhar com arquitetura de código;
  • desenvolvimento de aplicativos que suportam a interface de usuário e a segurança;
  • controle sobre o estado de servidores (combate, teste e trabalhador);
  • controle de versões, bancos de dados, integração contínua.

Profissão Prós e Cons

Profissão de alto pagamento e exigido.

Local de trabalho

Empresas de desenvolvimento do site, aplicativos da web, aplicações Móveis.

Qualidades importantes

  • mente analítica
  • pensamento lógico
  • iniciativa
  • capacidade de planejar e seguir os planos
  • habilidades de trabalho em grupo
  • flexibilidade de pensar
  • responsabilidade, perseverança, propositação
  • concentre-se no resultado e qualidade
  • o desejo de estudar continuamente o novo e sua aplicação em seu trabalho

Conhecimento e habilidades profissionais

Conhecimento de pelo menos uma linguagem de programação: GO, C, C, C ++, Perl, Python, Php, Ruby, Java.

  • a capacidade de escrever código rápido, bonito e correto;
  • conhecimento de freignors populares (Django, frasco, primavera);
  • bancos de dados de design de habilidade e otimizar solicitações;
  • conhecimento de paradigmas modernos de programação;
  • conhecimento de padrões de design;
  • compreensão dos serviços da Web, interfaces;
  • português ler a documentação técnica.

Onde aprender com desenvolvedor de back-end

Trens (pessoalmente, Moscou). Instituição educacional internacional especializada em educação informática. Trabalhando desde 1999. 42 filiais em 16 países do mundo. O maior centro de treinamento autorizado Microsoft, Cisco, Autodesk. Os alunos recebem certificados internacionais e diploma internacional. O principal objetivo é o emprego de cada graduação.

Ensino superior:

A fim de se tornar um verdadeiro profissional no campo do desenvolvimento de back-end, é necessário ter uma educação básica de perfil, que pode ser obtida nas seguintes universidades:

Mas é importante lembrar que a educação fundamental universitária estabelece a fundação para a educação, mas não o suficiente para o conhecimento atual sobre tecnologias modernas. Portanto, a auto-educação é importante nesta área para acompanhar todas as novas tecnologias e ferramentas. Mas, por sua vez, a falta de educação de perfil afeta naquele momento em que algo deixa de trabalhar e a pessoa não entende - por que razão. Um especialista com educação fundamental, é claro, não sabe tudo, mas tem uma grande habilidade - onde encontrar e como usar o conhecimento necessário.

Empregadores modernos, por via de regra, não impõem requisitos formais para ensino superior candidatos para o cargo. Para eles, a experiência mais importante, inteligência, motivação de um especialista.

Pagamento de warry (quantos desenvolvedores de back end ganha)

Salário em 16/09/2019.

Rússia 40000-100000 ₽.

Moscou 80000-300000 ₽.

Carreira de escadas e perspectivas

Da posição do desenvolvedor de back-end, após o desenvolvimento das habilidades do front-end de desenvolvedor, o caminho direto para o desenvolvedor de pilha completa. Para mais um crescimento, é necessário aprender constantemente com o novo: estudo em detalhes as tecnologias de desenvolvimento produtos de software., configuração e configuração de sistemas de serviço.

As transições nos departamentos às vezes são relacionadas de forma diferente. Alguém é simplesmente familiarizar qualquer alteração de carreira dentro de uma empresa através do prisma de postar posts. Alguém não considera possível alterar o escopo da atividade, mesmo que seja adjacente ao atual. Em terceiro lugar, em princípio, estamos confiantes de que a transição do departamento no departamento significa que uma pessoa assume a posição de "um peixe, nem carne, e é improvável que possam conseguir algo significativo.



Ao mesmo tempo, alguns empregadores recebem isso em todos os sentidos e consideram algo como um fusível do burnout - uma pessoa mudará o foco de atenção, mudará o departamento ou o departamento, mas não mudará o próprio trabalho como um todo.


Meu nome é Kostya, e eu trabalho em Qiwi por quase 4 anos. Hoje vou te contar como cometeu com sucesso do desenvolvimento de frontend no backend.

A parte dianteira

No Qiwi, desde o final de 2014, comecei a trabalhar como desenvolvedor de aplicativos iOS e, em princípio, um par de anos estava envolvido no desenvolvimento de uma carteira Qiwi. Ao mesmo tempo, não posso dizer que era chato - as tarefas eram bem diferentes e dentro da mesma aplicação: fomos envolvidos na integração da carteira com outros serviços, vingando os insetos, apertou a animação. Além disso, houve uma experiência avançada na criação de um pedido de relógio da Apple. Então ela expandiu um pouco de foco e trabalhou mesmo sobre o aplicativo iOS para "consciência".



E então, então comecei a me mover lentamente para as costas. Em termos de metodologia flexível, é ainda conveniente - eu mudei, no primeiro sprint poderia fazer algum tipo de tarefas de bachendas, e no segundo para realizar a integração da API, que eu escrevi.


Mas no backend, na época, havia poucos desenvolvedores e um retrocesso muito pesado, então no final ainda mudei para o backend completamente. O que estou fazendo agora é as tarefas clássicas do reitor - estou escrevendo um código em nosso microsservice, Chiny Bugi, estou envolvido na refatoração, compreendendo KoTlin. Há uma oportunidade para trabalhar no produto fresco da empresa - qiwi investidor.


A propósito, não posso dizer que, por esses dois anos, acabou de sair na frente, percebi claramente que também havia lá, onde se desenvolver. Por exemplo, vejo o que está acontecendo na equipe de desenvolvimento móvel agora, e eu entendo que ficaria lá, eu continuaria a crescer mais com os caras.


Então, houve uma situação ganha-ganha aqui - eu queria ajudar a equipe e o produto (a vantagem do desenvolvimento não foi muito para o backends) e ganhando novos conhecimentos. Timlids entenderam tudo e deixou-me ir sem queixas, e também produtos.


Além disso, o conhecimento que eu queria diversificar para não ser anexado a uma plataforma (Android eu não gosto um pouco, mas a Apple ainda dá a posição). Bem, houve um desejo em caso do que ser capaz de tomar e tornar-se um pedido para si mesmo (e frente, e apoiar), se algum tipo de idéia legal aparecer de repente. Até agora, não foi útil, no entanto.

Processo interno.


Claro, o primeiro problema com o qual você se depara com essa transição é lacunas na partida. No meu caso, estas foram algumas sutilezas de trabalhar com bancos de dados, mas ajudou a capacidade de se auto-educam e a equipe - os caras responsivos e sempre prontos para ajudar e explicar algo em detalhes. Em Qiwi, em princípio, com a aprendizagem em qualquer estágio, tudo está bem, se você é pelo menos junior no início do trabalho, pelo menos é como decidir e mudar a esfera um par de anos depois.


Ninguém estava irritado naquela primeira vez que obviamente trabalhou não tão eficazmente, porque em muito era necessário entrar (mas a longo prazo a equipe ainda está em vencer).


Claro, eu tive uma pequena experiência em diferentes áreas - jogos móveis e web, mas era tudo, sim, tentativas de sentir a sua própria experiência prática prática.

As impressões do backend após o frontend

Nenhum trabalho com a interface do usuário. Em absoluto. Anteriormente, tive que matar o tempo para corrigir bugs na interface do usuário, agora não há. Contras de tal posição - o usuário final não vê os resultados de um especificamente do meu trabalho, como estava com a frente. Eu tentei determinar o que é mais difícil ou frente, e percebi que (pessoalmente para mim) foi mais pesado sempre trabalhar com multithreading e uma pilha de rede. E aqui não é mais importante - você é para a frente ou para as costas. Na frente, acabei de encontrar tais tarefas pela primeira vez, sem preparação, e no backend, com qualquer experiência.


É possível ganhar experiência e fazer algo legal em qualquer área, haveria um desejo e pré-requisito, há práticas aqui - fazer algo (e fazer bem), e que funcionava com segurança e facilmente suportado. E para o retorno não é tão crítico da presença ou ausência de experiência na frente. Se o desenvolvimento levar em conta todas as pequenas coisas, hesita o caso de canto e como um todo entende como sua API usará, então fará tudo o que deveria.


É mais fácil para mim descobrir problemas possíveis Só porque conheço as características da implementação de nossas aplicações móveis. Mas isso não é algum tipo de superposição - este é um conjunto de conhecimento que qualquer outro beckened, que muitas vezes funciona com frentes.

Que no final

O desenvolvimento de back-end tornou-se outra boa experiência para mim - aprendi a escrever código e Revw, pense na arquitetura. É realmente interessante.


Mas, ao mesmo tempo, tentar viver que a frente é essa de volta, não direi que, no caso de que o backend escolheria imediatamente no início da carreira. Ainda é importante para mim ver e entender como meu produto percebe os usuários. Com backend, é tudo muito fantasmagórico.


Muito provavelmente, escolhendo a esfera agora, eu iria para GameDev ou Web Frente. A Web ainda permanece uma boa plataforma para o lançamento de novos produtos, e ao mesmo tempo deixou de ser terrível e difícil de entender. Todos esses tutoriais do código de espaguete e do chullback - o inferno permaneceu muito atrás, felizmente.

O frontend é um desenvolvimento interface de usuário e funcionalidade que funciona no lado do cliente do site ou aplicativo. Esse tipo de desenvolvimento pode ser atribuído a tudo o que o usuário vê, abrindo a página da Web. O desenvolvedor de frontend colabora com designers, programadores e analistas UX para criar um produto conveniente e exigido.

Para entender claramente o que é o desenvolvimento de frontend, abra a página de qualquer site - você verá a interface na sua frente. Ao clicar com o botão direito, você pode ver o código desta página no navegador.

Este código é um exemplo de um desenvolvedor de frontend, ele é baixado para o navegador do usuário, e você pode vê-lo com meus próprios olhos. O código da página descreve tudo o que você vê na frente: cores, layout, fontes, localização dos elementos gráficos e assim por diante.

O desenvolvimento de frontend inclui:

  • HTML (linguagem de marcação de hypertext) - linguagem de marcação de documentos, com a qual a estrutura da página é formada: manchetes, parágrafos, listas e assim por diante;
  • CSS (folhas de estilo em cascata) - Linguagem para descrição e estilização visão externa Documento. Graças ao Código CSS, seu navegador entende como exibir elementos. CSS Especifica as cores e os parâmetros da fonte, determina como diferentes blocos do site serão localizados e assim por diante. Também permite que você produza o mesmo documento em estilos diferentes, por exemplo, para impressão (fonte convencional ou braille), saída para tela ou leitura de voz;
  • Javascript. - Esta é a linguagem que foi criada para reviver páginas da Web. Sua tarefa é responder às ações do usuário, lidar com cliques no mouse, mova o cursor, pressionamentos de tecla. Ele também envia solicitações para o servidor e carrega os dados sem reinicializar a página, permite inserir mensagens e muito mais.

Qual é o desenvolvimento de backend?

O desenvolvimento de backend é um conjunto de software de hardware, com o qual a lógica do site é implementada. Simplesmente falando, isso é o que está oculto do olho do usuário e ocorre fora do seu navegador e computador.

Por exemplo, quando você insere uma solicitação na página da página de pesquisa e clique na tecla ENTRARFrontend termina e começa a backend. Sua solicitação é enviada para o servidor. Google ou Yandex.onde os algoritmos de busca estão localizados. É lá que toda a "mágica" acontece. Assim que as informações que você estivesse procurando, um retorno à zona de frontend apareceu no monitor.

Em geral, o servidor é o mesmo computador, apenas mais poderoso. Ele armazena dados e responde a solicitações do usuário.

Backend é o processo de combinar o servidor com o usuário.

O desenvolvedor de backend pode aplicar quaisquer ferramentas disponíveis em seu servidor. Ele tem o direito de escolher qualquer uma das linguagens universais de programação, por exemplo, Rubi, php, python, java.

Também para desenvolvimento de backend usado sistemas diferentes. Gerenciamento de banco de dados:

  1. Mysql;
  2. Postgresql;
  3. Sqlite;
  4. MongoDB.

Dependendo do tipo de produto, os deveres de desenvolvedores de backend podem mudar muito. Esse especialista pode criar e integrar bancos de dados, garantir a segurança, criar tecnologias. cópia de reserva e recuperação.

Como o frontend e o back-end interagem?

O frontend e o backend interage em um círculo: O frontend envia informações do usuário no back-end, é processado e retorna, tomando um formulário claro.

Como regra, diferentes especialistas estão envolvidos nesses tipos de trabalho, mas é desejável entender os princípios para os quais os colegas funcionam. Por exemplo, o designer de interface é importante, pelo menos, em termos gerais para saber o que é um backet do projeto para o qual está envolvido. Isso o ajudará a apreciar adequadamente quais capacidades técnicas podem ser no site ou aplicativo.

Existem várias opções para a interação do frontend e backend:

  • A solicitação HTTP é enviada diretamente ao servidor, o servidor está procurando informações, incorpora-o no modelo e retorna como uma página HTML;
  • Opção usando ferramentas AJAX (JavaScript assíncrono e XML). Neste caso, o pedido envia Javascript.baixado para o navegador e a resposta vem no formato XML ou JSON;
  • Aplicativos de página única que baixem dados sem atualizar a página. Isso também é feito quando ajuda ajax. ou freymvorkov. Angular e brasa.;
  • Brasa. ou biblioteca. Reagir Ajude a usar o aplicativo e no servidor e no cliente. O frontend e o backend interajam via código AJAX e HTML que é processado no servidor.

Como vemos, o desenvolvimento moderno é um processo complexo e multi-nível, que é dividido em duas partes: cliente e servidor. Nos programadores de frontend-e backend do Arsenal, há muitas ferramentas, cuja escolha depende das tarefas e da complexidade do projeto. Ambos os tipos de desenvolvimento incluem componentes técnicos e criativos.

As responsabilidades dos desenvolvedores de frontend-e backend são geralmente divididas, mas há momentos em que o programador tem que resolver problemas que surjam tanto no lado do servidor quanto na parte do cliente. Muitas vezes no mercado você pode conhecer especialistas que se sentem com confiança na frente e no backend e podem combinar dois tipos de trabalho.

Você pode começar seu caminho em Frontend e Backend - Desenvolvimento de uma habilidade de 12 meses. É adequado para recém-chegados e programadores com pequena experiência. Para o ano, os ouvintes de estudantes na prática explorarão os principais idiomas de programação e criarão seu próprio portfólio, o que ajudará a encontrar um trabalho promissor e bem remunerado.