Добро пожаловать в канал OTUS Java club! Говорим о Java (и не только), профессиональном развитии и новых карьерных возможностях
Вчера на rusbase вышла статья с Дмитрием Волошиным (основателем проекта OTUS), в которой Дмитрий рассказал о проекте OTUS, возможностях обучения и карьерного роста:
http://rb.ru/longread/voloshin/
http://rb.ru/longread/voloshin/
rb.ru
Дмитрий Волошин: «Мой клиент — программист из провинции, которого пилит жена»
Бывший менеджер Mail.Ru и «Ростеха» Дмитрий Волошин запустил онлайн-курсы для разработчиков. Лучшим студентам он обещает трудоустройство в самых крутых IT-компаниях страны.
А тем временем на roem! вышла отличная статья про то, как IT бизнесу побороть кадровый голод, наладить массовую, управляемую и воспроизводимую подготовку middle-специалистов и выстроить эффективную систему взаимодействия с ВУЗами:
https://roem.ru/26-04-2017/248615/vuz-voloshin/
https://roem.ru/26-04-2017/248615/vuz-voloshin/
Roem.ru
Вузы заканчивают «белые листы». Зачем ИТ-компаниям работать с высшим образованием
Как притупить кадровый голод и создать позитивный имидж компании, а также такую загадочную вещь, как HR-бренд? Рассказывает Дмитрий Волошин, основатель Otus // Роем в вашем Телеграме: https://news.1rj.ru/str/roemru
Вы же знаете, что jar файл это zip архив? То есть, его можно unzip -d target my.jar распаковать и достать все class файлы. А каждый class файл это bytecode который легко-легко можно декомпилировать и получить весь ваш проект с именами всех ваших классов и их переменных и методов. И кодом методов. То есть, совсем все можно из jar файла получить.
Если конечно он не обфусцирован. При обфускации имена всех классов можно заменить на имена из примеров по программированию: class A, наследует class B и переопределяет у него метод c().
Так конечно понять что у вас в проекте становиться значительно сложнее. А, если еще и библиотечные классы включить в jar и обфусцировать, то еще сложнее.
Кстати, обфускацию любят не только секретные службы, но и разработчики мобильных приложений. Казалось бы, а им зачем? Просто jar файл после обфускации становится меньше в размере, ведь длинных имен классов и методов в нем нет.
А чем еще может быть полезна обфускация? Приходите к нам — расскажем!
Если конечно он не обфусцирован. При обфускации имена всех классов можно заменить на имена из примеров по программированию: class A, наследует class B и переопределяет у него метод c().
Так конечно понять что у вас в проекте становиться значительно сложнее. А, если еще и библиотечные классы включить в jar и обфусцировать, то еще сложнее.
Кстати, обфускацию любят не только секретные службы, но и разработчики мобильных приложений. Казалось бы, а им зачем? Просто jar файл после обфускации становится меньше в размере, ведь длинных имен классов и методов в нем нет.
А чем еще может быть полезна обфускация? Приходите к нам — расскажем!
У нас сегодня отличные новости: в ряду наших компаний-партнеров прибыло! Помимо ABBYY, <epam>, КРОК, IBS и LUXOFT —> HeadHunter начнет охоту за головами наших лучших студентов!
Борьба за наших студентов становится все сильнее ✌️
Борьба за наших студентов становится все сильнее ✌️
Вышла отличная статья с Дмитрием Волошиным (основателем OTUS) о персональных методах выхода из кризиса.
Почему учиться никогда не поздно и почему инвестиции в себя - уместны при любой конъюнктуре рынка:
https://vc.ru/p/life-long-learning
Почему учиться никогда не поздно и почему инвестиции в себя - уместны при любой конъюнктуре рынка:
https://vc.ru/p/life-long-learning
vc.ru
«Как только возникает кризисная ситуация, я иду учиться»
Предприниматель Дмитрий Волошин рассказал о пяти видах кризисов, выход из которых — обучение.
В ряду наших компаний-партнеров прибыло! ООО «Лаборатория облачных технологий» ждут на собеседование наших лучших Java-студентов, а в будущем и Python-студентов.
+1 возможность для карьерного роста и трудоустройства в классную компанию, где можно заниматься действительно интересными задачами!
Мы очень рады :)
+1 возможность для карьерного роста и трудоустройства в классную компанию, где можно заниматься действительно интересными задачами!
Мы очень рады :)
Давно ли вы работали с числами? Странный вопрос для программиста.
С одной стороны мы только и работаем что с числами. Все наши программы с их несчетными фабриками, хэлперами, интерфейсами и менеджерами для процессора — набор чисел: прочитай, увеличь, сдвинь, сохрани. С другой — операцию a = b + c в коде можно встретить даже реже чем a « b. То есть нормальный программист не работает с числами напрямую, при том что процессор от него только числа и ждет
И от этого разрыва между программистом и числом у нас иногда (внезапно) возникают странные баги. И мы не знаем что с ними делать.
Начните с 0 и прибавляйте себе 1, если знаете ответ:
Почему нельзя сохранить 128 в byte?
Сколько байт занимает char?
Почему нельзя сконверить short в char.
Почему boolean занимает 8 бит, хотя ему достаточно 1?
Почему нельзя сложить 100_000_000f и 1f?
Почему 10f * 0.1f не равно 1f?
Набрали 6 баллов — отлично! Приходите к нам преподавать. Без шуток.
Набрали меньше — приходите и задавайте вопросы, мы с удовольствием на них ответим!
С одной стороны мы только и работаем что с числами. Все наши программы с их несчетными фабриками, хэлперами, интерфейсами и менеджерами для процессора — набор чисел: прочитай, увеличь, сдвинь, сохрани. С другой — операцию a = b + c в коде можно встретить даже реже чем a « b. То есть нормальный программист не работает с числами напрямую, при том что процессор от него только числа и ждет
И от этого разрыва между программистом и числом у нас иногда (внезапно) возникают странные баги. И мы не знаем что с ними делать.
Начните с 0 и прибавляйте себе 1, если знаете ответ:
Почему нельзя сохранить 128 в byte?
Сколько байт занимает char?
Почему нельзя сконверить short в char.
Почему boolean занимает 8 бит, хотя ему достаточно 1?
Почему нельзя сложить 100_000_000f и 1f?
Почему 10f * 0.1f не равно 1f?
Набрали 6 баллов — отлично! Приходите к нам преподавать. Без шуток.
Набрали меньше — приходите и задавайте вопросы, мы с удовольствием на них ответим!
В преддверии майских праздников вышла еще одна интересная статья Дмитрия Волошина о преимуществах проектного метода обучения перед классической схемой подачи материала. "Истинно то, что полезно" - внимание к процессам решения задач и проблем, которые максимально приближены к реальности: http://mel.fm/obrazovaniye/4520138-obucheniye-ot-dostizheny-i-proyektny-podkhod-v-obrazovanii
Мел
Почему лекции — самая бесполезная форма обучения. … и как проекты могут это исправить
Прогуливать лекции и скучные уроки с монотонными рассказами – обычная практика школьников и студентов. Иногда даже лента фейсбука бывает полезнее вялой лекции с таким же вялым преподавателем. О том, как нужно изменить подход к обучению, чтобы можно было действительно…
Для чего программисту нужны паттерны проектирования? Ответ, на первый взгляд, очевиден. Для того чтобы проектировать. И это правда.
Но, я сейчас предложу, менее очевидный ответ. Который, на мой взгляд, даже важнее, чем разработка хорошей архитектуры. Знание паттернов нужны программистам для общения.
Вот сравните например диалоги:
- Нам нужно разработать софт для АТМ. Чтобы можно было снимать деньги разного номинала и проверять баланс остатков в автомате.
- Хорошо, мы добавим в класс для каждого типа купюр, сделаем так чтобы они по цепочке обрабатывали запрос на снятие денег, передавая остаток, который не могу обработать дальше по цепочке. А чтобы посчитать остаток в автомате -- добавим специальный класс, который позволит перемещаться по цепочке и складывать остатки в каждой ячейке.
- Не понял, объясните пожалуйста.
и
- Нам нужно разработать софт для АТМ. Чтобы можно было снимать деньги разного номинала и проверять баланс остатков в автомате.
- Хорошо, мы используем Chain-of-responsibility для снятия и Iterator для остатков.
- Понятно, делайте.
А вам какой диалог понятнее?
Но, я сейчас предложу, менее очевидный ответ. Который, на мой взгляд, даже важнее, чем разработка хорошей архитектуры. Знание паттернов нужны программистам для общения.
Вот сравните например диалоги:
- Нам нужно разработать софт для АТМ. Чтобы можно было снимать деньги разного номинала и проверять баланс остатков в автомате.
- Хорошо, мы добавим в класс для каждого типа купюр, сделаем так чтобы они по цепочке обрабатывали запрос на снятие денег, передавая остаток, который не могу обработать дальше по цепочке. А чтобы посчитать остаток в автомате -- добавим специальный класс, который позволит перемещаться по цепочке и складывать остатки в каждой ячейке.
- Не понял, объясните пожалуйста.
и
- Нам нужно разработать софт для АТМ. Чтобы можно было снимать деньги разного номинала и проверять баланс остатков в автомате.
- Хорошо, мы используем Chain-of-responsibility для снятия и Iterator для остатков.
- Понятно, делайте.
А вам какой диалог понятнее?
Сегодня о нас тепло и по-братски написали в #стартапдня ✌️Коротко о нас, нашей ЦА, конкуренции с GeekBrains и трудоустройстве читайте в канале Стартап дня https://telegram.me/startupoftheday
Telegram
Стартап дня. Александр Горный.
Авторский канал о стартапах и интернет-бизнесе.
Реклама на этом канале: https://docs.google.com/presentation/d/1BFSEj7FEQZpB4K83iBXo1yqIoPnwJaVGpsyKDHKSX0s/edit
РКН: https://clck.ru/3FPm3j
Личный аккаунт: @gornal
Реклама: @Vzuhcha
ВП нет
Реклама на этом канале: https://docs.google.com/presentation/d/1BFSEj7FEQZpB4K83iBXo1yqIoPnwJaVGpsyKDHKSX0s/edit
РКН: https://clck.ru/3FPm3j
Личный аккаунт: @gornal
Реклама: @Vzuhcha
ВП нет
Как узнать что память, которую занимал объект освобождена? В некоторых языках это просто - вызвал delete и можешь быть уверен - памяти стало больше. У нас в Java все сложнее.
С одной стороны -- отлично, что нам не нужно писать delete “руками”. GC все сделает за тебя. Потерял ссылку на объект, и ничего страшного. Память будет освобождена и без ссылки. Утечки не будет.
С другой стороны, очень хочется иногда написать delete, но нет такой возможности.
И, в самом деле, как узнать, что объект удален? Можно подписаться на события GC, мы о них уже писали, но они не про конкретный объект, а про событие для всех объектов. Можно переопределить finalize() (у всех классов он есть) и обработать событие в нем. Но, если таких объектов будет много, это может сильно снизить скорость работы GC, а медленный GC это большие паузы в работе всего приложения.
К счастью есть в Java способ узнать о том что объект удален без finalize в своем потоке, а не потоке GC, удобным способом. Это phantom reference. Это тоже ссылка на объект, как и нормальная ссылка, но у нее все по-своему. Получить объект по ней нельзя. Но можно найти ее в специальном пуле ссылок для удаленных объектов.
Создали ссылку, подождали GC, проверили в пуле. Если она там есть, значит объект был удален.
А какие еще типы ссылок есть в Java? И зачем они нужны? Приходите к нам - расскажем!
С одной стороны -- отлично, что нам не нужно писать delete “руками”. GC все сделает за тебя. Потерял ссылку на объект, и ничего страшного. Память будет освобождена и без ссылки. Утечки не будет.
С другой стороны, очень хочется иногда написать delete, но нет такой возможности.
И, в самом деле, как узнать, что объект удален? Можно подписаться на события GC, мы о них уже писали, но они не про конкретный объект, а про событие для всех объектов. Можно переопределить finalize() (у всех классов он есть) и обработать событие в нем. Но, если таких объектов будет много, это может сильно снизить скорость работы GC, а медленный GC это большие паузы в работе всего приложения.
К счастью есть в Java способ узнать о том что объект удален без finalize в своем потоке, а не потоке GC, удобным способом. Это phantom reference. Это тоже ссылка на объект, как и нормальная ссылка, но у нее все по-своему. Получить объект по ней нельзя. Но можно найти ее в специальном пуле ссылок для удаленных объектов.
Создали ссылку, подождали GC, проверили в пуле. Если она там есть, значит объект был удален.
А какие еще типы ссылок есть в Java? И зачем они нужны? Приходите к нам - расскажем!
Пришло время подвести первые итоги проделанной работы! Обзорная статья по первому месяцу работы, что нового и какие планы на будущее: https://habrahabr.ru/company/otus/blog/328856/
Habr
Вторая группа обучения Java и наши новости
В апреле на образовательной платформе Otus.ru стартовал первый образовательный курс для Java-программистов, обучение на котором продлится пять месяцев. Занятия идут своим чередом в онлайн формате,...
Найм, фриланс или свой бизнес? Почему чтобы найти свой путь, стоит попробовать все? Своим опытом и взглядом на походы к трудоустройству в новой статье делится Дмитрий Волошин (основатель OTUS):
http://www.chaskor.ru/article/tri_tipa_trudoustrojstva_41945
http://www.chaskor.ru/article/tri_tipa_trudoustrojstva_41945
С радостью приглашаем всех 27 мая и 1 июня на Дни открытых дверей!
Из любой удобной точки мира - приходите к нам - формат проведения онлайн.
Проводить ДОД будет Виталий Чибриков - преподаватель на курсе Java разработки, один из основателей проекта и отличный специалист области с 12 - летним стажем разработки.
О чем будем говорить:
Расскажем почему OTUS больше чем просто образовательный проект и какие возможности получат наши студенты после прохождения обучения.
Расскажем о программе курса, практических занятиях и профессиональном сообществе разработчиков.
Расскажем о карьерных перспективах студентов и возможностях, предложенных компаниями - партнерами.
Ответим на все интересующие вопросы, поделимся новостями, просто приятно и с пользой проведем время.
Конечно, это еще не всё! Успешно прошедших вступительный тест на Дне открытых дверей ждет уникальная возможность. Спешите проверить свои знания Java и регистрируйтесь на День открытых дверей!
http://otus.ru/dod
Из любой удобной точки мира - приходите к нам - формат проведения онлайн.
Проводить ДОД будет Виталий Чибриков - преподаватель на курсе Java разработки, один из основателей проекта и отличный специалист области с 12 - летним стажем разработки.
О чем будем говорить:
Расскажем почему OTUS больше чем просто образовательный проект и какие возможности получат наши студенты после прохождения обучения.
Расскажем о программе курса, практических занятиях и профессиональном сообществе разработчиков.
Расскажем о карьерных перспективах студентов и возможностях, предложенных компаниями - партнерами.
Ответим на все интересующие вопросы, поделимся новостями, просто приятно и с пользой проведем время.
Конечно, это еще не всё! Успешно прошедших вступительный тест на Дне открытых дверей ждет уникальная возможность. Спешите проверить свои знания Java и регистрируйтесь на День открытых дверей!
http://otus.ru/dod
Согласно тесту Тьюринга, если что-то плавает как утка, крякает как утка и летает как утка, то это что-то -- утка. Но что делать, если при этом она не работает без батареек?
Если в вашем приложении объект пришел к вам по референсу на базовый класс, но ведет себя не так как вы ждете от базового класса, то у вас в приложении нарушен один из принципов SOLID -- Liskov Substitution. Ошибка частая и не сразу заметная. Ошибка порядка наследования.
Например, у вас в приложении есть квадрат и прямоугольник. Что из них базовый класс? Школьная математика нам подсказывает, что квадрат это частный случай прямоугольника. Но в проектировании это не так.
Если прямоугольнику два метода: setHeight() и setWidth() вполне подходят, то что они должны делать с квадратом? Например первый может задавать размер квадрата, а второй… ничего не делать. Или наоборот. Это не так важно. Важно что архитектура у вас при наследовании квадратом методов прямоугольника сломана. И если кто-то получит на квадрат референс базового типа, он не сможет с ним работать.
Или другой пример: есть подвижный объект и неподвижный. Кто из них базовый? Ждем ваш ответ в коментариях.
Кстати, Liskov Substitution это только одна буква в SOLID (L).
Приходите к нам, расскажем про остальные четыре.
Если в вашем приложении объект пришел к вам по референсу на базовый класс, но ведет себя не так как вы ждете от базового класса, то у вас в приложении нарушен один из принципов SOLID -- Liskov Substitution. Ошибка частая и не сразу заметная. Ошибка порядка наследования.
Например, у вас в приложении есть квадрат и прямоугольник. Что из них базовый класс? Школьная математика нам подсказывает, что квадрат это частный случай прямоугольника. Но в проектировании это не так.
Если прямоугольнику два метода: setHeight() и setWidth() вполне подходят, то что они должны делать с квадратом? Например первый может задавать размер квадрата, а второй… ничего не делать. Или наоборот. Это не так важно. Важно что архитектура у вас при наследовании квадратом методов прямоугольника сломана. И если кто-то получит на квадрат референс базового типа, он не сможет с ним работать.
Или другой пример: есть подвижный объект и неподвижный. Кто из них базовый? Ждем ваш ответ в коментариях.
Кстати, Liskov Substitution это только одна буква в SOLID (L).
Приходите к нам, расскажем про остальные четыре.
Наш главный преподаватель Java Виталий Чибриков (Vitaly Chibrikov) самоиронизирует :)
5 лет назад (когда была сделана фотография) у Виталия уже был солидный опыт преподавания и отличное чувство юмора :)
5 лет назад (когда была сделана фотография) у Виталия уже был солидный опыт преподавания и отличное чувство юмора :)
Наших компаний-партнеров стало еще больше!
Теперь и Лаборатория Касперского ждет на собеседования наших лучших студентов. Компания заинтересована в выпускниках курсов Python, C++, мобильной разработки и информационной безопасности. Запись на эти курсы откроется совсем скоро!
Теперь и Лаборатория Касперского ждет на собеседования наших лучших студентов. Компания заинтересована в выпускниках курсов Python, C++, мобильной разработки и информационной безопасности. Запись на эти курсы откроется совсем скоро!
