• ,

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 система для малого бизнеса с поддержкой мобильных устройств.
Так вот, есть вопрос, что вы думаете по этому поводу? Как подойти к проектированию и разработке? Хотели бы вы принять участие в данном проекте?

Типичные ошибки начинающих программистов

Не так давно пробовал устраиваться на работу тестировщиком Java(мой текущий уровень — 19). Получил следующий фидбек:

К сожалению, есть ошибки в задании. Ниже фидбек от нашего специалиста:

Неявная логика в методах
Отсутствие иерархии, неумение сравнивать объекты по типу
Недостаточное знакомство с базовыми вещами в Java
Исользование громоздких конструкторов вида CLEANER (false, false, true, false, false, false, false)
Спагетти-код там, где можно было упростить логику

Соль в том, что моя программа выполняет все требования. которые были описаны в ТЗ. Для ее описания мне хватило тех знаний Java, которые на данный момент есть. Но не хватило чего-то другого. Как с этим бороться? Может, я делаю что-то не так? Мне стоит что-то перечитать или что-то сделать? Моя проблема, как и многих начинающих программистов, не в том, что я чего-то не знаю, а что не умею обращаться с тем, что знаю. Все задачи решал до этого, серьезных проблем не возникало.

Если кому-то интересен мой код — github.com/vozni4iy/office

Подготовка к онлайн тестированию на Java

Посоветуйте материал для подготовки к тестам на Java, желательно учебник (книга) где сначала идет теория а потом тесты для закрепления материала с ответами. Или просто сборник тестов но обязательно с ответами.

Программирование – тяжёлая работа или лёгкий способ срубить денег?

Хорошая мотивирующая (или наоборот?) статья.
Выложил, что бы побольше людей ее прочитало. Автор не против. :)


! Статья про enterprise :) Не android.

Как стать Java разработчиком?

1. Нужно ли это Мне?

Видимо, самый важный пункт. В связи с экономическим кризисом, многие люди пытаются найти способ обеспечить себя финансово. А тут появляется “IT”, в котором все получают много денег за то, что могут написать 10 строк кода. К тому же, “программирование – это легко”.

К сожалению, это не так. Как бы не пытались основатели различных курсов объяснить, что любой может стать разработчиком за 3 месяца, это не так.

В первую очередь, необходимо помнить, что разработчик программного обеспечения – это инженер. Поэтому и требования соответствующие.

Во-вторых нужно понимать, что именно представляет из себя работа программиста? Прежде всего – это перманентное решение проблем. У Вас не будет момента, когда все проблемы будут решены. Это процесс постоянный. Во-вторых – это огромное количество рутинной работы, выполнять которую по 3-4 часа в день без любви к делу, если не невожможно, то уж точно требует огромного усилия над собой.

Итак, если Вы чувствуете, что разработка программного обеспечения – это то, чем бы вы хотели заниматься более 40% времени своей жизни, то идём дальше.

2. Что именно необходимо для того, чтобы называться Java-разработчиком?

Для того, чтобы Вы с гордостью могли назвать Себя Java Developer с больше буквы “J” необходимо иметь, хотя бы, общее понимание следующих вещей:

Синтаксис языка, а именно – Java Core;
Основы Объекто-ориентированного программирования;
Основы баз данных (SQL);
JDBC;
Servlets + JSP;
ORM (например, Hibernate);
Любой популярный Web – Framework (например, Spring);
HTML, CSS, JavaScript;
VCS (GIT, SVM или подобное).
Теперь, пройдёмся по пунктам:


Java Core

Сюда входит знание и понимание иерархии классов в Java, методы класса Object и, конечно Collection Framework. Какие интерфейсы, кто и кого имплементирует и т.д.

Вот эту картинку, java-разработчик должен нарисовать в 3 утра под арт-обстрелом:



В изучении Java Core помогут такие книги, как:

Java 8. Полное руководство (Шилтд)
Философия Java (Эккель)
И конечно же, никуда не деться от

Java Platform API Specification

Здесь материала крайне много, поэтому лучше не прыгать между книгами, а взяться за одну и “долбить” её “до посинения”.

ООП

От новичка не требуется больше, чем знание и понимание трёх принципов ООП (некоторые считают, что их 4, но тут уж как попадёте и это не так существенно).

Умение на практическом примере объяснить каждый из них.

Основы баз данных и SQL

MySQL 5.0 (Виктор Гольцман)

Эта книга легко и доступно объясняет базовые понятия с илюстрацей примеров и пошаговыми инструкциями.

JDBC

Кроме понимания того, что такое база данных, необходимо понимать, как Ваше Java приложение с ней взаимодейтсвует.

JDBC 4.1 Specification наиболее полно раскрывает все особенности работы JDBC.

Servlets + JSP

В книгах по Шилтда и Эккель Servlet-ы описываются “вскольз”, для более глубокого понимания, что же это такое необходимо изучить что-то по-серьёзнее.

Java Servlet Specification
и
JavaServer Pages Specification
Эти две спецификации дают исчерпывающее понимание тих технологий.

Как JDBC, так и Servlets используются разработчиками в повседневной работе только в редких случаях. Но они лежат в основе всех популярных Framework-ов и понимание того, как эти framework-и утроены “внутри” поможет Вам избежать очень многих глупых ошибок, которые допускают те, кто изучал только framework-и.

Hibernate

Книга, которая является гордостью мира Java – это Java Persistence with Hibernate.

Многие разработчики, которые используют другие технологии (в частности C#), читают эту книгу для того, чтобы глубже понять что такое ORM и какие проблемы оно решает.

Если Вы умеете созлать отношения one-to-one, one-to-many и many-to-one и написать простой запрос на HQL – ваших знаний хватит для уровня новичка.

Web – Framework (например, Spring)

После того, как освоено всё, что есть выше можно уже замахнуться на Spring. Для начала написать простое CRUD приложение, а потом узнать, что такое Spring Pet Clinic. Теперь Ваших знаний будет достаточно для того, чтобы с пониманием происходящего создавать более-менее пристойное приложение, которое ходит в базу данных, что-то там делает и т.д. и т.п.

Поздравляю, теперь Вы можете написать то, что можно уже и “потрогать” и показать.

Через 5-6 месяцев, Вы захотите удалить этот код и сделать так, чтобы никто не знал, что именно Вы его автор, но пока это хорошо :)

HTML, CSS, JavaScript

Здесь всё просто и не интересно. Обычная вёрстка, которая для back-end разработчика не представляет особго интереса. Это хлеб front-end-щиков.

Но базовое понимание всего этого быть должно.

HTML Academy

HTML Book

Основы JavaScript

Этого Вам хватит с головой.

VCS

Любой проект, в котором работает больше 0 разработчиков не делается без СКВ (системы контроля версий). GIT – наиболее удобная и часто применяемая, конкурирует с ней SVN. Будете знать одну из них – и будет Вам счастье.

По итогу модно сказать, что порого входа в Java крайне высок. Количество необходимых знаний для того, чтобы устроиться на работу или начать писать более-менее солидные приложения просто огромно. Но на выходе получаете просто невероятные перспективы.

Важно понимать, что спрос на новичков крайне низкий, несмотря на все попытки показать, что программистов не хватает. Не хватает высококвалифицированных разработчиков с опытом работы от 3-х лет, а новичков с избытком.

Для того, чтобы зацепиться и “войти в IT” Вам поможет адский труд в течение от 6 месяцев до 1 года. Но если это Ваше и Вы готовы для этого вложить такое количество усилий, то дерзайте.

Удачи Вам!

От себя хотел бы добавить, что реально для изучения java core ничего лучше javarush, по-крайней мере в рунете — нет. ИМХО.

Всем удачи еще раз.


Статья: proselyte.net/how-to-become-java-developer/
Автор: proselyte.net/faq/

Задачи окружающего мира решаемые Java

Прим. автора поста: Перевод местами сделан не совсем гладко. В попытке сгладить шероховатости, были сделаны вольные дополнения, которые нисколько не портят смысл статьи. Оригинал статьи вот здесь
Целевая аудитория статьи — люди, которые колеблются пуститься в плавание в мире Java.


Редакция dzone.com побеседовала с 11 профессионалами в бизнесе, плотно работающих большую часть, если не больше, свой карьеры в экосистеме Java. Спросили их о задачах в реальном мире, которые решаются Java.