• ,

добавление пустой директории в zip Архив

В общем есть такой вопрос в собеседовании к Level31
номер 5: Как добавить директорию в архив?

Для себя я этот вопрос понял, как добавление пустой директории в уже готовый zipАрхив

Вот код.

В нем текстовые файлы добавляются в заданный архив, а вот пустая папка нет, может быть кто-нибудь знает почему?

Main:

public class Main {
    public static void main(String[] args) {
        String[] myFiles = {"D:\\forJava\\MyArtifactName\\packForTest\\res2.txt",
                "D:\\forJava\\MyArtifactName\\packForTest\\res.txt",
                "D:\\forJava\\MyArtifactName\\packForTest\\res4.txt",
                "D:\\forJava\\MyArtifactName\\packForTest\\testDir"
                };
        String zipFile = "D:\\forJava\\MyArtifactName\\packForTest\\res.zip";
        ZipUtility zipUtil = new ZipUtility();
        try {
            zipUtil.zip(myFiles, zipFile);

        } catch (Exception ex) {
            // some errors occurred
            ex.printStackTrace();
        }
    }
}


ZipUtility.java:

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;

import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class ZipUtility {

    private static final int BUFFER_SIZE = 4096;

    public void zip(List<File> listFiles, String destZipFile) throws IOException {
        ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(destZipFile));
        for (File file : listFiles) {
            if (file.isDirectory()) {
                zipDirectory(file, file.getName(), zos);
            } else {
                zipFile(file, zos);
            }
        }
        zos.flush();
        zos.close();
    }

    public void zip(String[] files, String destZipFile) throws IOException {
        List<File> listFiles = new ArrayList<File>();
        for (int i = 0; i < files.length; i++) {
            listFiles.add(new File(files[i]));
        }
        zip(listFiles, destZipFile);
    }

    private void zipDirectory(File folder, String parentFolder, ZipOutputStream zos) throws  IOException {
        for (File file : folder.listFiles()) {
            if (file.isDirectory()) {
                zipDirectory(file, parentFolder + "/" + file.getName(), zos);
                continue;
            }
            zos.putNextEntry(new ZipEntry(parentFolder + "/" + file.getName()));
            BufferedInputStream bis = new BufferedInputStream(
                    new FileInputStream(file));
            long bytesRead = 0;
            byte[] bytesIn = new byte[BUFFER_SIZE];
            int read = 0;
            while ((read = bis.read(bytesIn)) != -1) {
                zos.write(bytesIn, 0, read);
                bytesRead += read;
            }
            zos.closeEntry();
        }
    }

    private void zipFile(File file, ZipOutputStream zos)
            throws  IOException {
        zos.putNextEntry(new ZipEntry(file.getName()));
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(
                file));
        long bytesRead = 0;
        byte[] bytesIn = new byte[BUFFER_SIZE];
        int read = 0;
        while ((read = bis.read(bytesIn)) != -1) {
            zos.write(bytesIn, 0, read);
            bytesRead += read;
        }
        zos.closeEntry();
    }
}

Java-конференция Joker 2016

14-15 октября в Петербурге уже в четвертый раз состоится Java-конференция Joker 2016, которая соберет более 1000 разработчиков уровня Senior/Middle. Конференция ориентирована на участников, которые хорошо разбираются в Java.



Спикеры конференции – ведущие мировые эксперты из США, Европы и России, такие как Алексей Шипилев, Барух Садогурский, Евгений Борисов и многие другие. Полный список спикеров и докладов вы найдете на сайте конференции: jokerconf.com/

Кроме того, в рамках конференции пройдет специальная программа для начинающих разработчиков и студентов, изучающих Java. Подробности о Joker Student Edition: jokerconf.com/se.html
  • ,

Хочу критику кода (новичок)

После того как бесплатные уроки кончились, а оплатить подписку я не мог (и пока не могу). Я стал смотреть разные видео на ютьюбе. Ну и в общем пришел к тому, что захотелось по практиковаться на чем-то. Хотел было попробовать андройд, но мой слабый комп не тянет (15 минут запускается эмулятор и еще 10 минут компилируется проект) Пришлось сделать выбор в пользу JavaFX. Его API мне показался не сложным и решил попробовать написать тетрис. Кое как мне удалось примерно понять идею того, как он должен работать (гуманитарий). Стал пробовать писать, долго доходил до понимания некоторых алгоритмовю. Позже в паблике JavaRush нашелся человек, который дает мне советы в некоторых моментах логики. В общем сам по себе тетрис можно сказать работает (остался один баг с вращением), но он еще не дописан до конца. Я бы хотел услышать критику имеющегося кода и разные советы. Он может казаться нагроможденным иногда. Я создал 4 класса- первые два это классы фигуры и поля, третий класс контроллер, содержащий логику и последний класс, где вызывается обновление и рендерится целиком все поле по таймеру. Проект Идеи в репозитории github.com/ZackFox/TetrisJava/tree/master/src/sample
  • ,

level06.lesson11.bonus02

Приветствую, коллеги. Компилируется без ошибок, работает, тест не проходит, никак не могу найти проблему.
Спасибо всем за внимание.

package com.javarush.test.level06.lesson11.bonus02;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/* Нужно добавить в программу новую функциональность
Задача: У каждой кошки есть имя и кошка-мама. Создать класс, который бы описывал данную ситуацию. Создать два объекта: кошку-дочь и кошку-маму. Вывести их на экран.
Новая задача: У каждой кошки есть имя, кошка-папа и кошка-мама. Изменить класс Cat так, чтобы он мог описать данную ситуацию.
Создать 6 объектов: дедушку(папин папа), бабушку(мамина мама), папу, маму, сына, дочь.
Вывести их всех на экран в порядке: дедушка, бабушка, папа, мама, сын, дочь.

Пример ввода:
дедушка Вася
бабушка Мурка
папа Котофей
мама Василиса
сын Мурчик
дочь Пушинка

Пример вывода:
Cat name is дедушка Вася, no mother, no father
Cat name is бабушка Мурка, no mother, no father
Cat name is папа Котофей, no mother, father is дедушка Вася
Cat name is мама Василиса, mother is бабушка Мурка, no father
Cat name is сын Мурчик, mother is мама Василиса, father is папа Котофей
Cat name is дочь Пушинка, mother is мама Василиса, father is папа Котофей
*/

public class Solution
{
    public static void main(String[] args) throws IOException
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String gfatherName = reader.readLine();
        Cat catGFather = new Cat(gfatherName);

        String gmotherName = reader.readLine();
        Cat catGMother = new Cat(gmotherName);

        String fatherName = reader.readLine();
        Cat catFather = new Cat(fatherName,null, catGFather);

        String motherName = reader.readLine();
        Cat catMother = new Cat(motherName, catGMother, null);

        String sonName = reader.readLine();
        Cat catSon = new Cat(sonName, catMother, catFather);

        String daughterName = reader.readLine();
        Cat catDaughter = new Cat(daughterName, catMother, catFather);

        System.out.println(catGFather);
        System.out.println(catGMother);
        System.out.println(catFather);
        System.out.println(catMother);
        System.out.println(catSon);
        System.out.println(catDaughter);
    }

    public static class Cat
    {
        private String name;
        private Cat mother;
        private Cat father;

        Cat(String name)
        {
            this.name = name;

        }

        Cat(String name, Cat mother, Cat father)
        {
            this.name = name;
            this.mother = mother;
            this.father = father;
        }


        @Override
        public String toString()
        {
            if ((mother == null)&&(father == null))
                return "Cat name is " + name + ", no mother"+", no father";
            else if (mother == null)
                return "Cat name is " + name + ", no mother"+", father is " + father.name;
            else if (father ==null)
                return "Cat name is " + name + ", mother is " + mother.name+", no father";
            else
                return "Cat name is " + name + ", mother is " + mother.name+", father is " + father.name;



        }
    }

}

Подбор сайтов для оттачивания навыков в программировании

  1. Codewars
  2. Codewars — отличный сервис для закрепления навыков программирования на Ruby, JavaScript, Java, Python, Clojure, CoffeeScript, C#, Haskell. Представлены как алгоритмические задачи, так и практические задачи, связанные с шаблонами проектирования. После каждой решенной задачи вы можете посмотреть на другие решения, рассортированные по рейтингу в зависимости от их красоты и использования лучших практик в программировании.
  3. Leetcode
  4. Leetcode — сайт с алгоритмическими задачками для подготовки к техническим собеседованиям в такие крупные фирмы, как Google и Facebook. Возле каждой задачи есть обсуждение, в котором так или иначе может фигурировать решение к этой задаче. Можно использовать различные языки программирования: C, C++, Java, Python, C#, JavaScript, Ruby, Bash.
  5. Programming Praxis
  6. Programming Praxis — блог, включающий целый ряд интересных задач, решения которых можно проверить на нескольких языках программирования.
  7. TopCoder
  8. TopCoder — активное сообщество программистов, которые любят решать головоломки. Много активных соревнований, некоторые из них включают денежные призы.
  9. C Puzzles
  10. C Puzzles предоставляет вам головоломки по программированию, характерные для языка Си (со всеми его причудами). Поскольку многие языки являются Си-подобными или напрямую выведенными из него, даже если вы не знаете язык Си как свой родной, велика вероятность, что вы поймете эти головоломки.
  11. Project Euler
  12. Цитата с главной страницы: «Project Euler — ряд бросающих вызов математических/программистских задач, которые предполагают наличие математической интуиции для их решения». Ресурс включает в себя как относительно простенькие, так и по-настоящему сложные задачки.
  13. Codeforces
  14. Полноценный русскоязычный аналог уже упомянутого Topcoder.
  15. Сборник задач от CppStudio
  16. Задачки в основном на проверку знаний С++, однако реализуемы и на других языках программирования.
  17. Timus Online Judge
  18. Timus Online Judge — это крупнейший в России архив задач по программированию с автоматической проверяющей системой. Основной источник задач для архива — соревнования Уральского федерального университета, Чемпионаты Урала, Уральские четвертьфиналы ACM ICPC, Петрозаводские сборы по программированию.
  • ,

Как стать программистом (часть 4) — установка необходимого ПО

Первая часть статьи: определяемся с пулом технологий
Вторая часть статьи: основные источники информации
Третья часть статьи: дополнительные, но важные источники информации

Выбери среду разработки и установи на свою рабочую машину всё необходимое ПО


выбор среды разработки
Если ты выбрал JavaRush, там тебе расскажут и покажут, что нужно установить для того, чтобы ты мог писать и запускать Java-программы на своем компьютере. Причем расскажут задолго до платных уровней, так что рекомендуем =). Тем не менее, кратко расскажем и здесь, что нужно делать.

Первое, что тебе понадобится — платформа Java. Заходишь, выбираешь, устанавливаешь.
Затем средство, в котором ты будешь писать код. Сразу оговоримся: некоторые программисты рекомендуют начинать программировать с нуля без специальных приложений, чуть ли не в блокноте. На самом деле, можно попробовать и так, это забавно. Выглядит загадочно и очень олдскульно.

Тем не менее, сегодня ты вряд ли встретишь профессионального Java-программиста, который работает без удобной интегрированной среды разработки (IDE, Integrated Development Environment) — специальной программы, которая позволяет писать код, распределять его по файлам и пакетам, подсвечивает код, исполняет код, указывает на ошибки… Хотя нет, ты можешь найти таких программистов в университетах и курсах. Только они обычно называются не «разработчики», а «преподаватели».

Гораздо важнее научиться использовать существующие инструменты, с которыми ты всё равно столкнёшься в работе. Владение ими будет только на пользу, они существенно повышают эффективность работы программиста.

Для Java-разработчиков стандартами де-факто являются такие IDE как Eclipse и IntelliJ IDEA. Несколько лет превалировал Eclipse, но IDEA постепенно её догоняет. Первая среда хороша тем, что абсолютно бесплатна и к ней написана масса плагинов. Вторая существует в платной и бесплатной версии. Для твоих нынешних потребностей возможностей бесплатной версии хватает с головой. Кроме того, IDEA лояльнее к новичку, и, судя по отзывам, наиболее удобна программистам. Именно из-за того, что она такая классная, JavaRush рекомендует использовать именно IDEA. Специально для неё мы написали очень удобный плагин: ты его подключаешь и можешь делать задания курса и проверять их прямо из IDE, даже на сайт не заходя. Справедливости ради упомянем еще одну популярную IDE — NetBeans. Тоже неплохое решение, хотя чуть менее удобное, чем IDEA. И гораздо менее красивое.

Этому пункту и выводы не нужны. Просто установи всё вышеуказанное на свой компьютер и вперед. Или начни с JavaRush, там всё расскажут. Да, можно разок попробовать написать и запустить программу без IDE. Для понимания.

Первую часть статьи читайте здесь.
Вторую часть статьи читайте здесь.
Третью часть статьи читайте здесь.

Вакансия Java, Москва

Некоторое время не имею отношения к Java, хотя Android приходится интересоваться. Но попадаются запросы от знакомых, всё-таки технологии Java самые востребованные на рынке.

Вакансия Разработчик
Обязанности:
· Доработка существующего функционала основного приложения (комплексная автоматизация бизнес-процессов розничных и логистических бизнесов).

· Разработка нового функционала для приложений, постанавливаемых заказчикам (связка Java плюс Oracle в различных вариантах разных версий и не только).

Требования:
Обязательно:
Знание и навык работы с Java Core
Умение быстро разбираться в «чужом» коде
Опыт работы с DSCM (системы контроля версий Git, Mercurial).
Желательно:
Опыт работы с задачами для retail или управления складами. Разработка и поддержка приложений уровня предприятий (Enterprise level).
Опыт продолжения работ по разработке продукта с анализом «чужого» кода. В качестве компаний, с большой вероятностью предоставивших кандидату такой опыт являются банки, retail сети.
Способность выполнять рутинную работу в достаточно большом объеме по разбору кода, поиску отклонений, их исправлению, разработанного компанией-производителем основного продукта и приложений к нему.
Знание и навык работы с системой управления баз данных Oracle PL\SQL или любой другой промышленной СУБД
Знание Pro*C.
Знание MS Reports, Oracle Reports.
Условия:
· м. Парк Победы

· Оформление по ТК РФ

· График работы 5\2

· Официальная зарплата, индивидуально по итогам собеседования.
  • ,

Как стать программистом (часть 3)

Первая часть статьи: определяемся с пулом технологий
Вторая часть статьи: основные источники информации
Четвертая часть статьи: Выбери среду разработки и установи на свою рабочую машину всё необходимое ПО

Как стать программистом

Дополнительные, но важные источники информации: форумы


Форумы очень важны, как бы ни учился, самостоятельно или на курсах, они — кладезь народной мудрости. Хотя прежде чем дойти до правды, тебе придется хорошенько прошерстить информацию оттуда. Но это полезный навык.

  1. ru.stackoverflow.com/questions/tagged/java — старый и полезный форум. Есть раздел на русском, но куда более обширной является его английская версия.
  2. toster.ru/tag/java/info — аналог Stackoverflow от создателей знаменитого Habrahabr
  3. javatalks.ru/ — чисто «джавистский» форум.
  4. help.javarush.ru/ — специальный форум для обсуждения задач JavaRush и не только.
  5. www.reddit.com/r/learnjava/ — тут тоже никто не будет смеяться над вопросами новичков.

Еще дополнительные источники информации: книги и справочники.
Онлайн-справочники по программированию

  1. docs.oracle.com/javase/7/docs/api/ — официальная документация. Сухая, непростая. Тем не менее, рекомендуется постепенно к ней привыкать, причем с самого начала. На английском.
  2. www.tutorialspoint.com/java/java_documentation.htm — простой справочник. Тоже на английском.

Книги по программированию

Самые простые и доступные по изложению книги по программированию. Как справочники не использовать!

  1. Head First in Java — мировой бестселлер серии Head First издательства O’Reilly. Написана с юмором и большим количеством лирических отступлений. Если чувствуешь себя неуверенно — рекомендуем.
  2. Книга Якова Файна «Программирование на Java для детей, родителей, бабушек и дедушек». На русском, рассчитанная в первую очередь на юных программистов, но не только.

Более фундаментальные издания для начинающих. Учебно-справочного толка.

  1. Кей Хорстманн «Java SE 8. Базовый курс» — неплохой учебник.
  2. Герберт Шилдт «Java 8. Полное руководство» — очень полный справочник.
  3. Брюс Эккель «Философия Java» — местами очень полезно. По ней есть викиучебник — wikijava.it-cache.net/index.php?title=Глава_1_Thinking_in_Java_4th_edition

Наконец-то краткое подведение итогов (исходя из всех трех частей статьи):

  • Выбираем один или два основных источника теории, строим учебный план, исходя из них. Присматриваемся к дополнительным источникам. Теорию узнаем из нескольких источников.
  • Чтобы научиться программировать, нужно программировать. Иначе никак. Поэтому в первую очередь обращаем внимание на практику: её нужно делать и проверять. Поэтому нужен либо интерактивный курс, либо преподаватель. На крайний случай — советчики на форумах.
  • Очень много информации есть на форумах. Её поиск занимает время, но оно того стоит. Не нужно стесняться задавать «глупые» вопросы.
  • Выбираем дополнительно книги, которые тебе понравились, заносим в закладки пару-тройку видеокурсов, документацию Java и справочные курсы.

Исходя из этого, у нас три пути:

Путь первый. Максимально эффективный.

Онлайн-курсы JavaRush + info.javarush + документация Java + форумы + книга + справочник + видео

  1. Основной источник знаний — интерактивные курсы JavaRush. Они здорово сэкономят твое время, так как в них, помимо лекций и проверяемых задач есть ссылки на хорошие источники дополнительных знаний. Плюс на курсе тебя будут учить искать информацию и составлять резюме. Ты будешь сосредоточен на главном — программировании, а не где найти источник информации. Но когда нужно искать, тебе придется искать.
  2. Регистрируемся на форумах.
  3. Покупаем/загружаем одну-две книги. Можно одну из самых простых, вторую — справочник.

Путь второй. Всё еще эффективный. Но очень дорогой.

  1. Основной источник знаний — дорогие курсы или персональный наставник. Он делает то, что JavaRush — объясняет теорию, говорит, где можно найти дополнительную информацию, выдает и проверяет задания. Только за гораздо большие деньги. И еще человеческий фактор прибавь. К слову, многие наставники рекомендуют JavaRush в качестве дополнения к их урокам ;).

Второй и третий пункт — те же, что и в первом пути.

Путь третий. Тернистый.

Если ты готов потратить очень много времени, приложить массу усилий, но совсем не готов к материальным тратам — тебе нужны бесплатные онлайн-курсы, микс из онлайн-видеокурсов и форумов. Выше — ссылка на массу полезных тебе материалов. Можешь пройти первые 10 уровней по JavaRush, скачать пару книг и поселиться на YouTube. А на форумах консультируйся насчет твоих решений.

Первую часть статьи читайте здесь.
Вторую часть статьи читайте здесь.
Четвертую часть статьи читайте здесь
  • ,

Как стать программистом (часть 2)

Первая часть статьи: определяемся с пулом технологий
Третья часть статьи: дополнительные, но важные источники информации: форумы и книги.
Четвертая часть статьи: выбери среду разработки и установи на свою рабочую машину всё необходимое ПО

как стать программистом

Итак, ты определился с технологиями и целью. Что дальше?


Выбери 2-3 основных источника знаний по Java, а также с десяток дополнительных. Но не забывай «гуглить», если что-то не ясно.

В первую очередь тебе нужно изучить Java Core — основа языка, от неё уже можно отталкиваться. Настало время подумать, как именно ты будешь учиться.

Самостоятельно или с наставником?

Наставник
Наставник — это здорово, но вряд ли кто-то будет бесплатно с тобой возиться и учить. А если платно… Время хорошего разработчика стоит немало. Плохой же тебе не нужен — чему он тебя научит? Тем не менее, если у тебя есть человек, готовый тебя консультировать, заручись его поддержкой.

Может на курсы Java пойти? Очень многие в качестве основного источника знаний видят очные курсы. Их сейчас очень много, но найти среди них достойные сложно. Если они и есть в твоем городе, то, скорее всего, или очень дорогие, или совсем бесплатные. Вторые — это курсы при компаниях. Для совсем зеленых новичков таких курсов не бывает: они рассчитаны на тех, кто прочно знает Java Core (а мы его только учить собрались), и чтобы на них попасть нужно пройти тесты. На курсах проходит весьма жесткий отсев, а самых лучших выпускников компании зачисляют в свой штат.

Теперь перемоем косточки дорогим курсам Java.

стоимость платных курсов
Если повезет и тебе попадется отличный преподаватель-практик, они имеют смысл. Однако цена в таком случае будет очень высока. И еще: сможет ли этот наставник уделить достаточно внимания лично твоему коду? Не факт.

В последние годы появилась масса доступных курсов, они обойдутся слушателю примерно в 100 долларов за месяц. Допустим, ты решил на них пойти, какой специалист-преподаватель там тебя ждет? Размышления на эту тему снова загоняют нас на DOU: иди туда и снова оцени зарплаты Java-разработчиков. Скорее всего ты понимаешь, что учить программистов должен не джуниор, а хотя бы «просто» Software Engineer. Средняя зарплата, например, у киевского специалиста этого уровня — 2000 долларов. Допустим, в группу набрали 20 человек. Это само по себе не очень хорошо, слишком большая нагрузка на преподавателя: он просто не сможет физически уделить внимание коду каждого студента.

Чаще всего учебная группа состоит из десятка учащихся. Все вместе они платят 1000 долларов в месяц. Школа, которая ведет курсы, помимо специалиста, должна оплачивать аренду помещений, оборудование, коммунальные счета. И желательно хоть что-то заработать (вряд ли вы найдете много филантропов при платных школах). В самом лучшем случае учителю достанется долларов 500. При этом он тратит 2-3 вечера в неделю на лекции и еще массу времени на проверку задач. По идее, чтобы научиться программировать, человек должен писать программы каждый день, минимум — 5 раз в неделю. Сколько кода сгенерирует за неделю один ученик? А десять? Добросовестный преподаватель должен всё это проверить и проконсультировать студента, что правильно, а что не так. Это — прорва времени.

Это мы ведем к тому, что нанимать хорошего специалиста на недорогие курсы — абсолютно нерентабельно. В самом лучшем случае, Once in a blue moon, как говорят «у них» или «когда рак на горе свистнет», как говорят у нас, ты попадешь на «фаната», которому жутко нравится не только программировать, но и преподавать. Поэтому он нашел себе такую не слишком выгодную подработку. Не денег ради, кайфу ради.

Следующий вариант — онлайн-курсы, платные или бесплатные.

online courses
Большинство платных онлайн-курсов — это те же самые «очные», только лекции проходят через интернет. Недостатки практически идентичные — не лучшие преподаватели, крайне мало времени уделяется практическим занятиям студента и проверке его кода. А вот бесплатные курсы можешь использовать в качестве дополнительных источников. Их можно найти, например, на Youtube — они представляют собой видеоуроки. Если знаешь английский, попробуй найти пару-тройку курсов на западных ресурсах, например, Coursera.

Неплохие видеоуроки Java на Youtube:
www.youtube.com/playlist?list=PLY4rE9dstrJzKUZHdGgECOjJLaZBcUdCC
Новичкам от почти новичка: www.youtube.com/channel/UCK5d3n3kfkzlArMccS0TTXA
Еще курс, немного не структурирован, но многие темы разобраны неплохо: www.youtube.com/channel/UCg1x1VDcSzviGGH995gHnjw
Когда немного освоишься в программировании, какие-то темы можно смотреть здесь: habrahabr.ru/company/golovachcourses/blog/218841/
habrahabr.ru/company/golovachcourses/blog/215275/

В этих статьях приведен план обучения (может пригодиться) и ссылки на записи видеолекций оффлайновых курсов. Несколько нудноваты, но местами полезны, информации — тонна.

Онлайн-курсы Java для начинающих

На английском языке, все рассчитаны на тех, кто ещё не программировал.
courses.caveofprogramming.com/courses/java-for-complete-beginners
www.coursera.org/learn/java-programming
www.edx.org/course/introduction-programming-java-part-1-uc3mx-it-1-1x-0

И тут одна загвоздочка…

Курсов и видеороликов много, из них можно почерпнуть очень много всего полезного. Однако при самостоятельном обучении возникает одно «но», очень принципиальное «но». Дело в том, что в программировании самое важное — программировать, то есть писать программы, а не изучать теорию. При самостоятельном обучении придется подбирать себе задачи самому, чтобы усвоить те или иные принципы. Новичку это непросто. Допустим, ты нашел источник упражнений: некоторые книги и бесплатные курсы содержат условия задач. Отлично, поехали решать!.. И тут кроется самая большая сложность: кто будет проверять правильность решения? Ты, наверное, удивишься, но даже если программа запускается и выдает правильный ответ, это вовсе не значит, что она работает правильно! Это может быть сладкой иллюзией. Что же делать? Новые технологии и всемирная паутина знают ответ на этот вопрос. И этот ответ — javarush.ru

javarush

Интерактивные курсы Java с автоматической проверкой задач



Мы разработали самый классный курс для изучения Java. И многие уже знают как он называется — JavaRush. Мы им гордимся, поскольку он из таких новичков, как ты, которые растеряно задают вопрос «что же делать, куда бежать, столько информации вокруг!» помогает делать программистов, готовых к первой работе. Самые главные «фичи» курса:

  • В нем есть продуманная структура. Поскольку его создавал практик, который отлично ориентируется в реалиях рынка, том, что нужно знать и уметь, в курсе отобрано только самое главное и в нужном порядке! Это очень важно для новичка. Для тебя, наверное, тоже, раз ты читаешь эту статью и пытаешься понять, как тебе действовать.
  • Курс на 80% состоит из практических заданий. За время обучения тебе придется решить более 1200 задач. Какие бывают задачи на JavaRush:

1. Маленькие «учебные» на закрепление пройденного в лекциях.
2. Хитрые задачи «на вырост». По уровню сложности они не отличаются от задач на закрепление, но специально помещены в курсе раньше, чем определенный кусок теории, необходимый для их решения. Это мобилизирует и заставляет человека гуглить и искать недостающий пазл теории. Всё как в настоящей работе.
3. Головоломные. Эти ребята заставляют включать голову на полную. Тебе нужно найти не теорию для решения, но само решение, алгоритм. Короче, хорошенько подумать. Это как задачи на сообразительность или задачи повышенной сложности из учебников.
4. Мини-проекты. Полезные большие задачи, разбитые на подзадачи для понимания, каким образом ведется разработка крупных проектов. Ты сам сделаешь несколько игр и полезных программ, которые можно применять в реальной жизни и дорабатывать.

  • И — самое важное — в курсе есть автоматическая проверка правильности решений! Вы можете решать задачи на странице курса или в IDE (интегрированная среда разработки, если еще не знаешь, что это такое, скоро узнаешь). Причем проверка эта происходит в считанные секунды. Это просто огромное преимущество JavaRush!
  • Курс на русском языке и лекции в нем поданы в виде текстового квеста, в котором ты будешь переходить с уровня на уровень, наращивая скиллы — скучно не будет!
  • В курсе даны ссылки на полезные дополнительные материалы, однако скилл гугления также намеренно прокачивается.
  • Вокруг JavaRush за 4 года существования образовалось огромное сообщество. В нем люди обсуждают задачи, решения, проблемы, делятся информацией.
  • Специальный сайт для решения и обсуждения задач: help.javarush.ru/
  • Основной курс состоит из 40 уровней, 10 из них — полностью бесплатны. Во время первого этапа обучения ты поймешь, подходит ли тебе JavaRush, так что тебе никто не продаст «кота в мешке», ты будешь точно знать, что покупаешь. К тому же цена всего курса очень доступна. Столько же ты заплатишь за два месяца обучения на «дешевых очных курсах». Ссылка на подписки на курс с ценами.
  • После прохождения курса (или большей его части) ты можешь записаться на стажировку — это совместная работа над настоящим серьезным проектом. Они проходят регулярно, и для этого тебе не нужно будет переезжать куда-либо. Успешное прохождение стажировки — красивая и не пустая строчка в твоем резюме со ссылкой на готовый проект.

Подробная статья о JavaRush — javarush.ru/24.html

Первую часть статьи читайте здесь
Третью часть статьи читайте здесь.
Четвертую часть статьи читайте здесь.

Интерфейсы - маркеры

Интерфейсы — маркеры — это такой шаблон проектирования с проверкой
типов во время выполнения, который позволяет связать интерфейс и класс.
Чтобы понять для чего это может быть нужно рассмотрим
пример маркирования класса Serializible маркером.

Предположим, что нам понадобилось сохранить состояние объекта в памяти, а потом
еще и иметь воззможность расшифровать то, что мы сохранили. Тогда, скажите вы, можно
перевести наш объект в набор битов. Верно.

Мы можем использоватьпростой способ записи в файл с помощью FileInputStream, но это
удобно только если объектов мало, а что если их много?
Для этого есть чудесный инструмент сериализации.
Главное правило, когда вы им пользуетесь — сериализуемый объект должен
содержать в себе все данные, а не ссылаться на другие объекты.

Смотрите на свой класс " Ага, не ссылаются поля и хорошо поставлю маркер Serializable".
А когда поставите, это будет значить, что объекты, которые вы пометили могут быть записаны
в ObjectOutputStream. У класса ObjectOutputStream есть метод writeObject0(),
а в нем находятся проверки instanceof, проверяющие можно ли записывать объект и если вся серия проверок проваливается, то выбрасывается исключение NotSerializableException, а если нет- все аккуратненько пишется в память.

Создадим класс BigObject, экземпляры которого будем сериализовывать


    package post1;
    import java.io.Serializable;

    public class BigObject implements Serializable {

        private int id;
        public void setId(final int id){
            this.id = id;
        }

        public int getId() {
           return id;
        }
    }


Класс BigObject уже помечен как Serializable. У него есть одно поле id и сопутствующие методы get/set.

package post1;
    import post1.BigObject;
    import java.io.*;
    
    public class InterfaceMarker  {

        public static void main(String[] args) throws IOException, ClassNotFoundException {
            int originalId = 12;
            BigObject objectOriginal = new BigObject();
            objectOriginal.setId(originalId);
            ByteArrayOutputStream writeBuffer = new ByteArrayOutputStream();
            ObjectOutputStream outputStream = new ObjectOutputStream(writeBuffer);
            outputStream.writeObject(objectOriginal);
            outputStream.close();

            byte[] buffer = writeBuffer.toByteArray();
            ByteArrayInputStream readBuffer = new ByteArrayInputStream(buffer);
            ObjectInputStream inputStream = new ObjectInputStream(readBuffer);
            BigObject objectCopy = (BigObject)inputStream.readObject();
            if (objectCopy.getId() == originalId)
                System.out.println( "originalId equals copiedId");
        }
    }

Запись объекта


В начале создаем объект сериализируемого класса BigObject, затем готовим под него буфер данных — место куда все бантики будем складывать ByteArrayOutputStream. Затем готовим уже упомянутый ObjectOutputStream и передаем ему буфер.Записываем наш объект в поток и закрываем его.

Чтение объекта


Подготовим буфер записи readBuffer, передадим inputStream, прочтем readObject(). Теперь объект восстановлен.

Благодаря тому, что поле `id` не являлось ссылкой, мы смогли пометить Serializable класс, который полностью содержит в себе свои данные. Вместо того, чтобы добавлять функции проверки внутри нашего класса маркеры позволяют упростить процедуру валидации классов.
  • ,

Свой проект

Всем привет!
После недавнего неудачного прохождения собеседования в одной конторе, я решил что пора начать более активно двигаться. Задача такова — создать проект, который бы дал необходимые знания, плюс который не стыдно было бы показать на собеседовании.
Идею проекта я уже придумал — своя облачная CRM система для малого бизнеса с поддержкой мобильных устройств.
Так вот, есть вопрос, что вы думаете по этому поводу? Как подойти к проектированию и разработке? Хотели бы вы принять участие в данном проекте?