
Esboço de Curso
noções básicas:
- O que é um computador, comando de computador, uma aplicação e uma linguagem de programação? A evolução dessas noções.
- análise detalhada da execução do programa de computador: descrevendo as funções de sistema operacional, drivers, CPU, memória, ônibus, teclado, mouse e outros componentes
- As diferenças entre as linguagens de alto e baixo nível de programação (código de máquina, assembler, C, C ++, Java, SQL, HTML).
- Como para começar a escrever um programa. editor de texto, compilador, vinculador.
- IDEs (Ambientes de Desenvolvimento Integrado).
Começando:
- Explicação da anterior linha por linha de código do programa.
- O pré-processador - ponto de entrada do programa.
- Introduzindo regras primeira codificação. Erros, como lidar com eles.
- Os tipos de dados (tamanho, escala), a Declaração de variáveis. regras de nomenclatura, a legibilidade do código e estilo de codificação bom.
- A pilha (fila LIFO). Variáveis visibilidade e duração de vida. As variáveis globais e locais. estilo de codificação ruim - uso de variáveis globais. Visibilidade do operador extensão "::".
- Variáveis e constantes, a diferença entre a inicialização e atribuição.
- formatos binários, decimais e hexadecimais.
Prática:
- "Olá Mundo!" programa.
- Como receber dados de entrada do usuário e mostrá-lo. de diálogo do usuário.
As primeiras ferramentas:
- As noções de operador, expressão e instrução. Correcta importância o uso de terminologia para passar entrevista bem sucedida.
- operadores aritméticos, operadores de comparação e as regras da sua utilização. Assinado e tipos não assinados. Explícita e implícita conversão de tipo. Pós e pré-incremento. Prioridade e associatividade. operadores condicionais (if, else if), operador ternário, switch (cair conceito).
- Loops: para, ao mesmo tempo, fazer enquanto. loops aninhados (i, j, k contadores de ordem).
- Debug: Como traçar uma execução do programa, os pontos de interrupção, F5, F10, relógios.
Prática:
- Algumas perguntas das entrevistas.
- Uma calculadora simples. Examinar a capacidade de processar qualquer entrada do usuário.
- Como para reduzir o número de possíveis erros. O primeiro conceito de design de aplicação multi-plataforma.
- Desenho de formas: cheio, vazio, com espessura de fronteiras definidas, retângulos, triângulos, losango.
- Como para exibir o texto no meio do rectângulo. posicionamento de tela
- Diversos formatos em uma fileira.
- animações simples (formas em movimento), getch (), a primeira ferramenta para obter informações necessárias.
- Encontrar e processar os números específicos da gama.
- O primeiro programa 'Desenho', que poderia trabalhar eterna; ele deve mostrar o menu, tirar qualquer forma de escolha do usuário ou terminar.
Arrays, ponteiros, referências, algoritmos:
- Pilha de agregados com base, o seu operador de dimensão, o índice, sizeof (), inicialização de matriz.
- Ponteiros, como é que iArray [i] expressão realmente funciona, o que significa que o tipo de ponteiro para um compilador. alocação dinâmica de memória, montão, novo, apagar, apagar [] operadores. Todos os ponteiros relacionados nuances: ponteiros não inicializados, enforcados ponteiros (esquecidas), vazamentos de memória (e ferramentas para detectá-lo). Ponteiro para tudo - void *.
- Referências, as diferenças entre eles e ponteiros.
- Classificar, pesquisar e algoritmos de comparação, o seu desempenho. O profiler. Compilar e erros de execução.
- matrizes dinâmicas (que pode mudar o tamanho em tempo de execução). arrays multidimensionais. -
Prática:
- Algoritmos: busca, o valor mínimo de busca, valor máximo, contam itens, soma, média.
- algoritmos mais complicados: trabalhar com arrays multidimensionais, criação de histograma, rotação de matriz. Como olhar para a frente a partir da posição atual na matriz.
- Vários algoritmos de ordenação com análise de seu desempenho.
- Primeiro jogo: tic-tac-toe. Descrição: O usuário terá opção de escolher '0'-s ou' X'-s e definir a quantidade de rodadas para jogar. O programa deve determinar o vencedor da rodada atual e manter o número total de vitórias, empates e derrotas.
- Programa também devem ser protegidos contra erros do usuário (com uma explicação deles), tem uma boa usabilidade e interface. Avançado: usar a cor para a saída de texto.
Funções:
- Por que precisamos em funções?
- Passando argumentos de função por valor, por endereço e por referência.
- Primeiro, olhe para o espaço de endereço do aplicativo e formato de arquivo executável, um custo da chamada de função.
- Funções sobrecarga, parâmetros padrão.
- Recursão, pilha de chamadas, estouro de pilha, integer overflow.
- Ponteiros e modificador const: a diferença entre ponteiro constante e ponteiro para constante.
- Um bom estilo de codificação. Por que é tão importante.
Prática:
- medição de desempenho do algoritmo. Como obter uma precisão razoável.
- Algumas tarefas de entrevista (uso de recursão).
- Reescrever Tick_tack-toe, calculadora e aplicativos de desenho usando funções.
Cordas:
- Um aplicativo de console, buffer do sistema e interrupções de teclado.
- funções de biblioteca: strcmp, strlen, strtok_s, strstr.
- Como formatar a saída de texto (em C e C ++), cin.getline.
- Char e wchar_t, zero, string terminada. matriz dinâmica de cordas.
Prática:
- Criar funções auxiliares para proteger seu aplicativo de entrada errada do usuário:
- evitar a entrada de caracteres, em vez de dígitos;
- evitar entrar mais símbolos do que a capacidade tampão;
- estar pronto para a entrada de texto extra-grande
- Quantas vezes uma determinada palavra presente em uma frase?
- O usuário digita qualquer número de sentenças, a aplicação analisa-los, cria matriz de palavras a partir dessas frases, conta o número palavras ot, encontra o mais longo eo mais curto, classificará palavras de comprimento e em ordem alfabética.
- Criar app "rolagem cadeia de texto" com a opção de suspender o ciclo e atualizar o conteúdo.
- Avançado: Implementar algoritmo palavra-wrap.
operações bit a bit:
- Operadores e, |, ^, ~, <<, >>!. -
Prática:
- Armazenar em um inteiro variável quatro números de diferentes gamas (0-5, 0-100, 10-60, 100- 40000).
- Mostrar representação binária do valor inteiro
- O que é o maior número pode ser armazenado em um byte?
- Levante 2 elevado à potência de 200.
- Liste todas as unidades lógicas de PC.
- Criptografar e descriptografar texto inserido.
Estruturas, enumerações, sindicatos, campos de bits:
- Quais são os tipos definidos pelo usuário. As diferenças entre С e С ++. Primeiro contato com programação orientada a objetos.
- armazenamento Universal para cada tipo de dados.
- enum como declaração compacta de constantes relacionadas.
Prática:
- Como usar sindicatos para enviar e receber dados de qualquer tipo.
- Desenvolver aplicativos "estudantes" para armazenar e processar dados pessoais. A estrutura de "Student" (armazenamento de dados) tem que ter seguintes campos: nome, sobrenome, idade, 5 pontos (matriz), Mark média. Implementar operações simples com array de objetos: pesquisar, ordenar, adicionar, excluir, editar. Criar um algoritmo de inicialização automática de matriz de estruturas (incluindo nomes). Você entrará tamanho da matriz de teclado. Advanced Task: classificar os dados e mostrar usando ponteiros para estruturas, não é em si objetos.
directivas de pré-processador:
- Como e onde deve ser definido restrições críticas, constantes.
- Como incluir um unidades de compilação dos mesmos ou de diferentes locais, impedindo a partir de um arquivo incluindo várias vezes.
- classes de memória: extern, estático, cadastre-se, automático.
- Variáveis estáticas em funções e arquivos.
- compilação condicional. desenvolvimento de plataforma cruzada.
- Usando # e ## operadores de depuração.
- Macros: como escrever uma macro, a favor e contra, e como escrever testes de unidade convenientes.
Prática:
- Criar várias .h * e * arquivos .cpp e ligá-los corretamente.
- Escrever uma macro para a avaliação de qualquer declaração de desempenho.
Arquivos:
- O papel do sistema operacional, drivers e aplicação em operações de IO, contabilidade referências, modos de operação de arquivo.
- Que tipos de erros relacionados arquivos devem ser verificados na aplicação de produção.
- Ler, escrever e as operações de posicionamento. tamanho e formato do arquivo. saída tamponada.
- As diferenças entre o texto e modos de abertura de arquivos binários. Qual deve ser usado.
Prática:
- Como explorar o conteúdo de unidades e diretórios.
- Como copiar um arquivo grande.
- Gravar no arquivo de dados criptografados de qualquer formato. Leia-o, descriptografar e show.
- Criar um aplicativo como lembrete (diário, organizador). Descrição: O usuário digita algumas informações e define o tempo para lembrar sobre isso. Uma vez usuário inicia este aplicativo, ele verifica a data e hora atual, olha através de todos os registros armazenados em um arquivo. Se houver alguma coisa para lembrar, neste momento ele exibe uma mensagem de lembrete.
projeto do curso:
- gerenciador de arquivos simples que pode pesquisar e exibir o conteúdo de cada arquivo (como é, sem reconhecimento do formato de arquivo), e editar determinados arquivos. O estudante deve desenvolver o seu próprio formato de arquivo para armazenamento e processamento de dados - uma grande variedade de estruturas 'Student' (ver descrição acima na seção prática das Estruturas).
- complexidade avançada: Adicionar campo "experiência" com a estrutura 'Student' (uma matriz de caracteres no heap) e seu comprimento. Nem todos os alunos têm a experiência, ele deve complicar formato de arquivo.
- O programa deve ter uma interface amigável e operar em dois modos:
- Criar um arquivo e encontrá-lo no sistema de arquivos.
- abrir, ler, adicionar ou excluir registro, editar, classificar os dados, com base em seus vários critérios especificados pelo usuário.
- Trabalhar em qualquer modo, o usuário deve ser capaz de ver o menu de contexto. App deve ser protegido de quaisquer erros do usuário e não tem qualquer tipo de vazamentos de memória (memória heap, descritores).
C ++ avançada
Duração do curso: 120 horas ponteiros de função:
- Uso dos ponteiros de função como critério de pesquisa e comparação, que podem ser passados como argumentos para pesquisar ou classificar algoritmos. Predicados.
- Adaptar a sua funcionalidade para interface existente, por exemplo: classificar qualquer matrizes utilizando a função qsort_s. funções de retorno, typedef.
- Como estender a funcionalidade do seu programa sem recompilar-lo. Custo do trabalho de controle de qualidade extra.
Prática:
- Ordenar "estudantes" (ver prática curso base) por vários critérios recebidos durante a execução.
- Rewrite app 'calculadora' usando matriz de ponteiros de função.
funções de modelo:
- Tipo de deduzir, argumentos typecast e função, função de modelo sobrecarga.
- parâmetros não-tipo.
Prática:
- Desenvolver um aplicativo que classifica matrizes de inteiros, caracteres e dobra o uso de funções do modelo.
- O papel do primeiro parâmetro, especificadores de formato, va_list.
- Desenvolver uma função de "mini printf".
Classes (conceitos básicos):
- Filosofia de design de classe e uso.
- Construtores, destruidores, construtores sobrecarregados, interface de classe como um conjunto de regras para trabalhar com ele ...
- Como rastrear todas as chamadas para funções de classe no programa.
- Padrão funcionalidades função de classe e como desativá-lo.
- Composição: agregação e conhecido, um diagrama de interação, UML.
- regra de inicialização. Como trabalhar com recursos. este, público, privado.
- A #ifndef pré-processador e directivas #pragma dependente do compilador. O que é um padrão c ++; Classe A tem objeto da classe B, mas a classe B possui um ponteiro para A - como resolver isso. Amigos: Como uma função ou classe pode se tornar um amigos para outra classe. As relações entre "amigos".
Prática:
- Desenvolver classes de array e de linha.
- Outra ferramenta: BackUp classe, que pode ser usado por qualquer cliente para reescrever com segurança qualquer arquivo, e segura recuperar um de dados (um proxy entre um cliente e um arquivo);
Cópia construtor e operador de sobrecarga:
- Quando você precisa dessas ferramentas? cópia superficial e profunda.
- Como copiar um objeto que tem um outro objeto dentro.
- construtores explícitos.
- Built-in e tipos de dados definidos pelo usuário. Operador sobrecarga regras.
Prática:
- Sobrecarga de +, =, <<, (typecast), * (indirecta), novo, ++, <, == and [] operators.
lista ligada, classes de modelo, introdução à STL:
- Como lista ligada funciona. Diferença entre lista e matriz, comparação de suas performances.
- Quais são os níveis de cache da CPU, acerto de cache e cache de falta. Por ligada listas são bastante mal do que bem.
- Introdução ao STL: contentores, iteradores.
- classes de modelo: * arquivos .hpp, construtores com base em outros objetos classes.
- Usando operadores sobrecarregar em templates. Modelos de especialização.
Prática:
- Desenvolver classe List stl-like.
Uso o modificador 'const' em classes:
- const_cast, mutável, diferença entre o "constante real 'e campo somente leitura.
- funções de membro const.
Prática:
- Desenvolver uma classe com membros const;
membros da classe estática:
- construtor privado, como contar todos os objetos de uma classe. O que é um padrão? padrão Singleton. Como deve ser projetado para não ser um anti-padrão.
- funções de membro estático.
- Introdução aos ponteiros inteligentes, sobrecarga do operador ->.
- Ponteiros para os membros da classe.
Prática:
- Contar o número de todos os objetos da classe.
- Desenvolver uma classe Smartptr simples.
Herança e polimorfismo:
- membros da classe protegidas, herança privada e protegida.
- Inicialização do objeto filho.
- Trabalhar a partir do ponteiro para a classe base. Novos símbolos UML.
- funções virtuais, destructor, classe base abstrata, interface, vptr, vtbl
- Estática e dinâmica de ligação, static_cast, dynamic_cast, typeid, RTTI.
- Diferença entre herança da funcionalidade (e dados) e herança de interface.
- Quando um processo de destruição virtual é uma solução ruim. ABI - Application Binary Interface.
Prática:
- Criar hierarquia de classes, verificar a visibilidade do membro da classe e do objeto.
- Patterns: ponte, Abstract Factory, adaptador, visitante, decorador.
- Algumas perguntas de entrevistas.
estruturas de dados dinâmicos. STL, Boost:
- contêineres STL: vetor, lista do jogo, mapa, deque, Pilha, unordered_set. Nuances de trabalhar com eles. std :: shared_ptr, make_shared (), std :: unique_ptr.
- Algoritmos, functors, adaptadores de função: encontrar, copiar, find_if, remover equal_to, bind2nd e assim por diante.
- Namespaces. notação Big O.
- REFORÇO: como compilar suas bibliotecas e incluí-los em um projeto. shared_ptr, weak_ptr, make_shared, bind, e assim por diante.
Prática:
- Trabalhar com todos os recipientes principais e algoritmos.
Tratamento de exceções:
- A arquitetura de um programa com a manipulação de exceção.
- excepções rethrowing, catch (...), pilha de rebobinagem sequência e regras. O tempo de vida do objeto de exceção Throwed. dynamic_cast<>.
Prática:
- Padrão "Chain of Responsibility '.
- descrição parcial do projecto de diploma "loja on-line '(sem fios, bibliotecas e redes).
C ++ 11:
- Lambdas, auto, rvalue, construtores móveis e operador de atribuição. std :: move (), decltype, lista de inicializador uniforme, nullptr.
Prática:
- Verifique as condições em que o desempenho do construtor movimento vai ser melhor do que construtor de cópia faz.
herança múltipla:
- Outra implementação do padrão Adapter.
- herança virtual, as diferenças entre compiladores. As partes do objecto.
- Por que C # e Java permitem herança múltipla a partir de apenas interfaces.
- Os fundamentos da tecnologia COM: IUnknown, QueryInterface, o registo de componentes, GetClassObject, regsvr32, CLSID.
Prática:
- Verifique armadilhas de fundição tipo de void *.
bibliotecas dinâmicas e estáticas:
- Como exportar funções e classes da biblioteca. Como incluí-los em um projeto.
- vinculação explícita e implícita, de depuração.
- Projeto de uma aplicação multi-plataforma.
Prática:
- Usar bibliotecas em seu projeto "Loja on-line '.
- A noção de um sistema de controle de versão. Git.
aplicações GUI usando Win32 API. Qt GUI .:
- Qual é a diferença entre o console app e app janela. loop infinito, mensagens, procedimento janela, as diferenças entre as funções SendMessage e PostMessage? arquivo de recurso * .rc.
- Como criar uma janela personalizada e definir uma mensagem personalizada.
- Como trabalhar com controles: botões (rádio, cheque, groupbox), COMBOBOX, EDIT, etc. (incluindo Qt).
- Função InitCommonControls.
- Eventos e slots Qt. Como subclasse uma janela (substituir um procedimento de janela) (incl. Qt), deslocando a janela de exibição na janela. Criando o controle de usuário, estilo OwnerDraw.
- HDC compatível.
Prática:
- Criar três versões (cada um estende a versão anterior) de um app 'VectorDraw', que desenha formas simples e os armazena como imagem usando os princípios de gráficos vetoriais. Desenvolver um formato de arquivo e arquitetura de programa (usando polimorfismo) para alcançar compatibilidade com versões anteriores.
Processos e threads:
- espaços de endereços OS do usuário e. objetos kernel.
- Quando você deve usar threads e que número deles pode acelerar o seu programa. contexto da discussão.
- Threads, volátil e otimização do compilador.
- Threads (e processos) de sincronização usando Win32 API. Exclusões mútuas, eventos, semáforos, temporizadores waitable. WaitForSingleObjects e outros. A família de funções Interlocked- atômicas. Em que ordem de semáforos deve ser desbloqueado?
- TLS (armazenamento local de segmento). Reenterable e código de thread-safe.
- Processos: prioritários, multitarefa preemptiva, como processo filho herda alças.
- IPC (comunicação entre processos), mapeamento de memória, tubos, compartilhada seções na biblioteca.
- Funções para a memória virtual, instantâneo dos processos, threads, bibliotecas.
- sincronização tópicos usando c ++ 11 e impulso. std :: thread (diferença de boost :: thread), mutex, lock_guad, condition_variable, unique_lock, boost :: crono.
Prática:
- Descrição do aplicativo: A aplicação de consola quer acelerar algum trabalho. Você deve criar e inicializar na matriz e 'main' int, dividi-lo em partes, dependendo do número de núcleos de CPU. Comece o mesmo número de threads e dar-lhes as suas partes de dados. Enquanto isso, o 'main' continua a fazer o seu trabalho e esperar por threads. Mostrar os dados do 'main'.
- Como sincronizar o seguinte fila: Um segmento de entrada envia sequência ordenada de estruturas de dados para três segmentos de trabalho. Eles fazem o mesmo trabalho, mas o tempo para processar, qualquer objeto pode ser diferente. threads de trabalho processar objetos e dar-lhes um fio de saída para remontar sequência de dados em uma ordem anterior. thread de GUI apresenta dados.
- Como criar uma fila de mensagem personalizada. WAIT_TIMEOUT.
- Como usar uma janela para deixar mensagem para uma lista de discussão.
- Como usar TLS.
- Como usar funções atômicas.
- Como redirecionar a saída de aplicativo de console para outro processo - a mesma coisa que IDE faz quando lança um compilador.
- C ++ 11: o uso de fios, de exclusão mútua, condition_variable, lock_guard, aulas unique_lock.
- Quais bibliotecas são usadas na aplicação e onde eles estão?
- Os interiores de DllMain. Como para bloqueá-lo, como usá-lo.
aplicações de rede:
- Protocolos (IP, TCP, UDP, HTTP), tomadas, bloqueando e chamadas sem bloqueio usando Winsock2 biblioteca. selecionar, WSAAsyncSelect, WSAEventSelect.
- estados de conexão TCP e erros de manipulação.
Prática:
- servidor de eco simples.
- Networking versão do Tick-tack-toe.
- Mini Git.
projecto de diploma 'store Online':
aplicação cliente-servidor: um servidor, um cliente para comprar produtos, vários clientes para comprá-los. No primeiro servidor capaz de vender apenas duas categorias de produtos. A aplicação deve ter capacidade de adicionar plug-ins - bibliotecas com classes para trabalhar com algumas outras categorias de produtos. O aplicativo deve reconhecer o seu primeiro lançamento para definir o capital inicial para começar o seu trabalho (compra de produtos).
Servidor inicia o seu trabalho ao analisar diretório atual para a lista de plug-ins (bibliotecas). Quando se descobre uma nova biblioteca, ele tem que ser capaz de trabalhar com a nova categoria de produto sem recompilação. O aplicativo tem que suportar a arquitetura multi-plataforma: todas as plataformas de rotina dependente (recursos, hardware) devem ser separadas da lógica.
O aplicativo tem que ser protegida de usuário do e erros de rede
Program taught in:
See 3 more programs offered by Infopulse University Ukraine »
24 sessões, 2,5 horas, 2 vezes por semana