en
Feedback
OTUS: программирование и карьера в IT

OTUS: программирование и карьера в IT

Open in Telegram

Канал для быстрого карьерного роста в IT: опыт практиков, актуальные технологии и инструменты, чтобы быть впереди коллег и привлечь внимание руководителей. Иногда шутим! 🔔Включайте уведомления, чтобы не пропустить!

Show more
7 345
Subscribers
-224 hours
+47 days
+1230 days
Posts Archive
Наш главный преподаватель Java Виталий Чибриков (Vitaly Chibrikov) самоиронизирует :) 5 лет назад (когда была сделана фотография) у Виталия уже был солидный опыт преподавания и отличное чувство юмора :)

Согласно тесту Тьюринга, если что-то плавает как утка, крякает как утка и летает как утка, то это что-то -- утка. Но что делать, если при этом она не работает без батареек? Если в вашем приложении объект пришел к вам по референсу на базовый класс, но ведет себя не так как вы ждете от базового класса, то у вас в приложении нарушен один из принципов SOLID -- Liskov Substitution. Ошибка частая и не сразу заметная. Ошибка порядка наследования. Например, у вас в приложении есть квадрат и прямоугольник. Что из них базовый класс? Школьная математика нам подсказывает, что квадрат это частный случай прямоугольника. Но в проектировании это не так. Если прямоугольнику два метода: setHeight() и setWidth() вполне подходят, то что они должны делать с квадратом? Например первый может задавать размер квадрата, а второй… ничего не делать. Или наоборот. Это не так важно. Важно что архитектура у вас при наследовании квадратом методов прямоугольника сломана. И если кто-то получит на квадрат референс базового типа, он не сможет с ним работать. Или другой пример: есть подвижный объект и неподвижный. Кто из них базовый? Ждем ваш ответ в коментариях. Кстати, Liskov Substitution это только одна буква в SOLID (L). Приходите к нам, расскажем про остальные четыре.

С радостью приглашаем всех 27 мая и 1 июня на Дни открытых дверей! Из любой удобной точки мира - приходите к нам - формат проведения онлайн. Проводить ДОД будет Виталий Чибриков - преподаватель на курсе Java разработки, один из основателей проекта и отличный специалист области с 12 - летним стажем разработки. О чем будем говорить: Расскажем почему OTUS больше чем просто образовательный проект и какие возможности получат наши студенты после прохождения обучения. Расскажем о программе курса, практических занятиях и профессиональном сообществе разработчиков. Расскажем о карьерных перспективах студентов и возможностях, предложенных компаниями - партнерами. Ответим на все интересующие вопросы, поделимся новостями, просто приятно и с пользой проведем время. Конечно, это еще не всё! Успешно прошедших вступительный тест на Дне открытых дверей ждет уникальная возможность. Спешите проверить свои знания Java и регистрируйтесь на День открытых дверей! http://otus.ru/dod

Найм, фриланс или свой бизнес? Почему чтобы найти свой путь, стоит попробовать все? Своим опытом и взглядом на походы к трудоустройству в новой статье делится Дмитрий Волошин (основатель OTUS): http://www.chaskor.ru/article/tri_tipa_trudoustrojstva_41945

Пришло время подвести первые итоги проделанной работы! Обзорная статья по первому месяцу работы, что нового и какие планы на будущее: https://habrahabr.ru/company/otus/blog/328856/

Как узнать что память, которую занимал объект освобождена? В некоторых языках это просто - вызвал delete и можешь быть уверен - памяти стало больше. У нас в Java все сложнее. С одной стороны -- отлично, что нам не нужно писать delete “руками”. GC все сделает за тебя. Потерял ссылку на объект, и ничего страшного. Память будет освобождена и без ссылки. Утечки не будет. С другой стороны, очень хочется иногда написать delete, но нет такой возможности. И, в самом деле, как узнать, что объект удален? Можно подписаться на события GC, мы о них уже писали, но они не про конкретный объект, а про событие для всех объектов. Можно переопределить finalize() (у всех классов он есть) и обработать событие в нем. Но, если таких объектов будет много, это может сильно снизить скорость работы GC, а медленный GC это большие паузы в работе всего приложения. К счастью есть в Java способ узнать о том что объект удален без finalize в своем потоке, а не потоке GC, удобным способом. Это phantom reference. Это тоже ссылка на объект, как и нормальная ссылка, но у нее все по-своему. Получить объект по ней нельзя. Но можно найти ее в специальном пуле ссылок для удаленных объектов. Создали ссылку, подождали GC, проверили в пуле. Если она там есть, значит объект был удален. А какие еще типы ссылок есть в Java? И зачем они нужны? Приходите к нам - расскажем!

Сегодня о нас тепло и по-братски написали в #стартапдня ✌️Коротко о нас, нашей ЦА, конкуренции с GeekBrains и трудоустройстве читайте в канале Стартап дня https://telegram.me/startupoftheday

Для чего программисту нужны паттерны проектирования? Ответ, на первый взгляд, очевиден. Для того чтобы проектировать. И это правда. Но, я сейчас предложу, менее очевидный ответ. Который, на мой взгляд, даже важнее, чем разработка хорошей архитектуры. Знание паттернов нужны программистам для общения. Вот сравните например диалоги: - Нам нужно разработать софт для АТМ. Чтобы можно было снимать деньги разного номинала и проверять баланс остатков в автомате. - Хорошо, мы добавим в класс для каждого типа купюр, сделаем так чтобы они по цепочке обрабатывали запрос на снятие денег, передавая остаток, который не могу обработать дальше по цепочке. А чтобы посчитать остаток в автомате -- добавим специальный класс, который позволит перемещаться по цепочке и складывать остатки в каждой ячейке. - Не понял, объясните пожалуйста. и - Нам нужно разработать софт для АТМ. Чтобы можно было снимать деньги разного номинала и проверять баланс остатков в автомате. - Хорошо, мы используем Chain-of-responsibility для снятия и Iterator для остатков. - Понятно, делайте. А вам какой диалог понятнее?

В преддверии майских праздников вышла еще одна интересная статья Дмитрия Волошина о преимуществах проектного метода обучения перед классической схемой подачи материала. "Истинно то, что полезно" - внимание к процессам решения задач и проблем, которые максимально приближены к реальности: http://mel.fm/obrazovaniye/4520138-obucheniye-ot-dostizheny-i-proyektny-podkhod-v-obrazovanii

Давно ли вы работали с числами? Странный вопрос для программиста. С одной стороны мы только и работаем что с числами. Все наши программы с их несчетными фабриками, хэлперами, интерфейсами и менеджерами для процессора — набор чисел: прочитай, увеличь, сдвинь, сохрани. С другой — операцию a = b + c в коде можно встретить даже реже чем a « b. То есть нормальный программист не работает с числами напрямую, при том что процессор от него только числа и ждет И от этого разрыва между программистом и числом у нас иногда (внезапно) возникают странные баги. И мы не знаем что с ними делать. Начните с 0 и прибавляйте себе 1, если знаете ответ: Почему нельзя сохранить 128 в byte? Сколько байт занимает char? Почему нельзя сконверить short в char. Почему boolean занимает 8 бит, хотя ему достаточно 1? Почему нельзя сложить 100_000_000f и 1f? Почему 10f * 0.1f не равно 1f? Набрали 6 баллов — отлично! Приходите к нам преподавать. Без шуток. Набрали меньше — приходите и задавайте вопросы, мы с удовольствием на них ответим!

В ряду наших компаний-партнеров прибыло! ООО «Лаборатория облачных технологий» ждут на собеседование наших лучших Java-студентов, а в будущем и Python-студентов. +1 возможность для карьерного роста и трудоустройства в классную компанию, где можно заниматься действительно интересными задачами! Мы очень рады :)

Вышла отличная статья с Дмитрием Волошиным (основателем OTUS) о персональных методах выхода из кризиса. Почему учиться никогда не поздно и почему инвестиции в себя - уместны при любой конъюнктуре рынка: https://vc.ru/p/life-long-learning

У нас сегодня отличные новости: в ряду наших компаний-партнеров прибыло! Помимо ABBYY, , КРОК, IBS и LUXOFT —> HeadHunter начнет охоту за головами наших лучших студентов! Борьба за наших студентов становится все сильнее ✌️

Вы же знаете, что jar файл это zip архив? То есть, его можно unzip -d target my.jar распаковать и достать все class файлы. А каждый class файл это bytecode который легко-легко можно декомпилировать и получить весь ваш проект с именами всех ваших классов и их переменных и методов. И кодом методов. То есть, совсем все можно из jar файла получить. Если конечно он не обфусцирован. При обфускации имена всех классов можно заменить на имена из примеров по программированию: class A, наследует class B и переопределяет у него метод c(). Так конечно понять что у вас в проекте становиться значительно сложнее. А, если еще и библиотечные классы включить в jar и обфусцировать, то еще сложнее. Кстати, обфускацию любят не только секретные службы, но и разработчики мобильных приложений. Казалось бы, а им зачем? Просто jar файл после обфускации становится меньше в размере, ведь длинных имен классов и методов в нем нет. А чем еще может быть полезна обфускация? Приходите к нам — расскажем!

А тем временем на roem! вышла отличная статья про то, как IT бизнесу побороть кадровый голод, наладить массовую, управляемую и воспроизводимую подготовку middle-специалистов и выстроить эффективную систему взаимодействия с ВУЗами: https://roem.ru/26-04-2017/248615/vuz-voloshin/

Вчера на rusbase вышла статья с Дмитрием Волошиным (основателем проекта OTUS), в которой Дмитрий рассказал о проекте OTUS, возможностях обучения и карьерного роста: http://rb.ru/longread/voloshin/

Добро пожаловать в канал OTUS Java club! Говорим о Java (и не только), профессиональном развитии и новых карьерных возможностях