
O que veremos nesta sessão inteira, que são as restrições de complexidade (tempo e espaço) geralmente presentes nos Code Challenges
Esta aula apresenta um primeiro desafio para você começar a entender o Code Challenge. Faça-o em python, java ou ambos. Estamos considerando Python 3+ e Java 1.8+.
A solução do primeiro desafio feita em python. Discutiremos as bibliotecas e veremos os detalhes de implementação. Nos recursos há um zip com todos os códigos python utilizados nesta sessão.
A solução do primeiro desafio feita em java. Discutiremos as bibliotecas e veremos os detalhes de implementação. Nos recursos há um zip com todos os códigos java utilizados nesta sessão.
Veremos uma introdução à teoria da complexidade computacional
Veremos aqui a análise da complexidade de tempo de um algoritmo
Veremos aqui a análise da complexidade de espaço de um algoritmo
Veja os algoritmos clássicos mais comuns em Code Challenges, além de conhecer dois tipos de desafio: O Blackbox e o Longa duração. Em anexo estão referências bibliográficas e um arquivo a ser utilizado no desafio de trilhas.
Desafios blackbox são menos comuns, mas aparecem muito em entrevistas para Top Hi-Techs. Nos recursos está a cópia da descrição do desafio.
Aqui veremos a resposta ao primeiro desafio blackbox. Nos anexos estão os códigos em Python e Java.
Vejamos agora outro desafio blackbox cuja solução está em um algoritmo clássico. Em anexo está a cópia da descrição do desafio.
Veremos aqui a solução do segundo desafio blackbox com outro algoritmo clássico. Nos recursos estão as implementações Python e Java.
Em muitas entrevistas, o Code Challenge não é feito na hora. É passado um link para um website de Code Challenge e você tem um tempo para fazer o desafio. Nos recursos estão a cópia do desafio e o arquivo de entrada.
Aqui está a solução para o desafio de longa duração, utilizando outro algoritmo clássico. Nos recursos temos as implementações em Python e Java.
Vamos estudar problemas com vetores, muito comuns em desafios de Code Challenge. Faça TODOS os desafios, mesmo os que parecerem impossíveis! Não "googue" a resposta! Você precisa desenvolver a habilidade de trabalhar com vetores. Eu darei solução para todos eles, explicando detalhadamente. Veja as referências em anexo e procure estudar os assuntos em detalhe.
Este primeiro desafio é do tipo "Analise este código", e nem sempre o entrevistador lhe pedirá para alterar alguma coisa, só te fará perguntas. Mas nem por isso é mais simples!
"What would you change" ou "Analise este código" são um tipo de desafio no qual é apresentado apenas um código-fonte, sem nenhuma descrição nem exemplos de entrada e/ou saída. Apenas o código-fonte.
Muitas vezes problemas de vetores necessitam de navegação bidirecional para solução. Este é um caso.
Vamos analisar uma possível solução para o problema da maior soma. Os exemplos de código estão anexados.
Outro problema que já foi relatado muitas vezes. Vamos analisar outro caso que pode ser resolvido aplicando-se navegação não convencional por um vetor.
Nesta aula analisamos o problema passado na aula anterior, relacionado com navegação não convencional de vetores, e apresentamos possíveis soluções. Códigos em anexo.
A maioria dos problemas apresentados em Code Challenges são fáceis, alguns possuem dificuldade média e poucos, muito poucos mesmo são considerados realmente difíceis. Mas, nestes casos, é dado um tempo maior para você fazer offline, por exemplo 8 horas.
Esta aula é um pouco longa, mas tenha paciência e assista quantas vezes for necessário para compreender bem a solução apresentada. Não fique com dúvidas! Se não entender, me contacte pelos canais do curso! Em anexo estão os códigos de solução e uma planilha LibreOffice contendo o passo a passo do algoritmo.
Alguns problemas impõem outro tipo de restrição de complexidade e temos que nos prepararmos para isto.
Conhecer bem as APIs e recursos especiais das linguagens que você pretende usar para um Code Challenge, é fundamental. Em anexo os códigos de possíveis soluções.
Introdução aos desafios envolvendo strings.
Vamos começar nossos exercícios de problemas com strings. Este é um desafio de complexidade média, no qual será necessário utilizar uma técnica muito importante (que eu explico somente depois). Tente fazer! Nos recursos está a explicação detalhada do que você verá no vídeo.
Aqui veremos uma possível solução para o desafio da "Canção do Exílio", com implementações em Python e Java (em anexo).
Veremos um tutorial sobre expressões regulares e seu uso em Python e Java, para você resolver muitos desafios de strings
Vamos fazer outro desafio envolvendo expressões regulares, para você fixar bem o assunto.
Aqui veremos uma possível solução para o problema dos emails, envolvendo Regex, em Python e Java (anexos).
Nem só de Regex vivem os code challenges! Vejamos agora outra técnica muito interessante. A descrição do desafio está no vídeo e em PDF nos recursos.
Difícil não quer dizer impossível. Veremos uma solução até bem simples para o problema de gerar substrings balanceados. Os códigos estão nos recursos.
Este desafio é muito comum mesmo em entrevistas de emprego e não é tão complicado como parece. A descrição está no vídeo e nos recursos, em PDF.
Veremos aqui uma possível solução simples para o problema da aula anterior. As implementações em Python e Java estão nos recursos.
Esse é um desafio muito tenso! Ao ler a descrição, você se desespera imediatamente, mas, na verdade, não é tão complicado assim. Nos recursos o PDF e na aula a descrição explicada.
As vezes a descrição complica o que é simples! É preciso ter calma e entender o que é pedido e como resolver o problema. Em anexo estão as implementações em Python e Java.
Não vou te enganar: Este desafio é bem difícil. Tente fazer. A descrição está nos recursos.
Eu sei que o desafio final foi muito difícil, então aqui veremos uma solução para ele.
Todo código-fonte tem suas capacidades ou aspectos, que podem ser questionados em desafios de code challenge.
Vamos começar com um primeiro desafio de code challenge de aspectos do código. Em anexo estão os códigos a serem analisados.
Veremos nesta aula a solução para o desafio da limpeza na versão Python. Em anexo está o texto da solução
Veremos nesta aula a solução para o desafio da limpeza, na versão Java. Em anexo está o texto da solução
Mais um desafio sobre aspectos do código-fonte para você. Em anexo estão os exemplos de código.
Veremos aqui a análise de segurança para a implementação Python. Em anexo está o texto.
Veremos aqui a análise de segurança para a implementação Java. Em anexo está o texto.
Agora um problema diferente sobre o aspecto de desempenho do código. Em anexo estão os códigos a serem analisados.
Neste desafio, a solução passa por questões arquiteturais, além das implementações. Em anexo está o texto explicativo.
Veremos uma introdução aos tipos de algoritmos que estudaremos nesta parte: Programação dinâmica, Greedy, Grafos e Árvores de pesquisa binária
Solução para os exercícios 1 e 2, que envolvem programação dinâmica. Nos recursos estão os códigos-fonte e os slides do vídeo.
Veremos como desenvolver algoritmos utilizando o método "greedy" (ganancioso ou guloso). Soluções para os exercícios 3 e 4 assim como os slides do vídeo nos recursos da aula.
Veremos as soluções para os problemas: 5, 6 e 7, envolvendo grafos. Os slides do vídeo e os códigos-fonte estão nos recursos da aula.
Árvores binárias (Binary search trees) são um recurso valioso. Veremos os exercícios 8, 9 e 10. Slides do vídeo e códigos fonte nos recursos da aula.
Atenção: Este curso prepara um desenvolvedor para entrevistas de emprego que apresentem desafios de código-fonte, em Python e Java. Não é um curso para iniciantes e exige experiência e conhecimentos obtidos fora do escopo do curso. Leia atentamente a descrição do curso.
As melhores empresas do mercado estão adotando entrevistas técnicas para pessoal de TI, especialmente desenvolvedores. Para estes, as estratégias de Code Challenge ou desafio de código, são muito utilizadas. Há várias estratégias, como:
- "Code this": Dado um requisito, escreva o código-fonte que o atenda;
- "Black box": É dada uma entrada e uma saída e você tem que escrever o código que a produza a partir da entrada dada;
- "What would you change": É apresentado um código pronto e lhe perguntam sua opinião ou o que mudaria no código apresentado;
Seu instrutor é um profissional experiente, com 45 anos de mercado, que já passou em vários concursos públicos e entrevistas de Code Challenge, tanto em empresas nacionais como estrangeiras. Além disso, é professor universitário, tendo ensinado cadeiras de algoritmos e estruturas de dados em várias instituições de ensino superior.
Para melhor experiência de aprendizado, assista a todos os vídeos, leia os textos e faça todos os exercícios. Os alunos-piloto demoraram cerca de 30 dias para completar o curso inteiro. Se você tem uma entrevista em dois dias, nem adianta começar, pois é preciso tempo para estudar e aprender a raciocinar algoritmicamente.
Eu não prometo a você que irá passar em entrevistas de emprego que usem Code Challenge. Não posso prometer isso. Tampouco ofereço uma "cola" das questões utilizadas nessas provas. Na verdade, podem cair desafios que eu sequer citei aqui. Você precisa entender isso claramente ANTES de se inscrever neste curso! Mas eu prometo exercitar sua capacidade de resolver desafios com algoritmos, mostrando a você problemas e técnicas que, talvez, jamais tenha imaginado.
O que verá, caso se inscreva no curso, são recursos importantes pada melhorar suas habilidades de codificação. Mas, no fim, tudo dependerá do seu esforço. Neste curso vou ajudar você a desenvolver suas habilidades de programação com desafios para cada assunto popular em code challenges, como: Complexidade de tempo e espaço, algoritmos clássicos, vetores, strings etc.
A cada sessão abordaremos um assunto através de uma série de desafios e suas correspondentes explicações. Para ter melhor experiência de aprendizado, verifique as referências de cada sessão e procure estudá-las, assim como procure fazer TODOS os desafios (ou pelo menos tentar).
Reveja ou aprenda as técnicas essenciais de complexidade computacional, estruturas de dados e algoritmos clássicos para lhe ajudar a resolver mais facilmente os desafios propostos. Veremos casos reais, utilizados em entrevistas reais e muitos exercícios com correção.
Além dos exercícios práticos, há muitos questionários com perguntas e testes para você assentar o conhecimento, afinal de contas, os entrevistadores costumam perguntar muito durante e depois do Code Challenge. Tudo o que você precisa para se preparar adequadamente para uma entrevista de emprego.
Seu sucesso dependerá de boas habilidades de compreensão de problemas, além de codificação sob pressão. Para ter a melhor experiência de aprendizado e aumentar suas chances de passar em entrevistas que utilizam Code Challenge é necessário que você faça TODOS os exercícios propostos!
Um curso para profissionais experientes em Python e Java que estejam desempregados ou desejem arranjar um emprego melhor, em empresas nacionais ou estrangeiras.
Atençâo: Neste curso assumo que você já conhece as linguagens de programaçâo: Python e/ou Java. Não ensinarei a programar nestas linguagens neste curso.