Как стать автором
Обновить
62
0
devcolibri @Devcolibri

Образовательная IT-академия

Отправить сообщение

Как я заработал 1 000 000 $ без опыта и связей, а потом потратил их, чтобы сделать свой переводчик

Время на прочтение20 мин
Количество просмотров134K

Как все начиналось


Эта история началась 15 лет назад. Работая программистом в столице, я накапливал деньги и увольнялся, чтобы потом создавать собственные проекты. Для экономии средств уезжал домой, в небольшой родной город, где работал над сайтом для студентов, программой для торговли, играми для мобильных телефонов. Но из-за отсутствия опыта ведения бизнеса это не приносило дохода, и вскоре проекты закрывались. Приходилось снова ехать в столицу и устраиваться на работу. Эта история повторилась несколько раз.

Когда у меня в очередной раз закончились деньги, наступил кризис. Я не смог найти работу, ситуация стала критической. Пришло время посмотреть на все вещи трезвым взглядом. Нужно было честно признаться себе, что я не знаю, какие ниши выбрать для бизнеса. Создавать проекты, которые просто нравятся, — путь в никуда.
Читать дальше →
Всего голосов 233: ↑224 и ↓9+215
Комментарии144

Серия видеоуроков по Git для новичков

Время на прочтение1 мин
Количество просмотров114K
Скорее всего, если вас привлекло название статьи, то вы начинаете свой путь знакомства с системой контроля версий Git. В данной статье я приведу 10+ видео о пошаговом вхождении в контроль версии используя Git. Данного курса будет вполне чем достаточно для работы с такими популярными сервисами как GitHub и Bitbucket.

Однажды мой знакомый, который только начинал свой путь в ИТ кинул мне данный мемчик что слева, с вопросом "А чем плохо то?", поэтому чтобы понимать данную шутку и уметь работать с самым популярным на сегодня VCS (Version Control System) рекомендую к ознакомлению серии видеоуроков, которую я привел ниже.
Читать дальше →
Всего голосов 58: ↑49 и ↓9+40
Комментарии43

Серия видеоуроков по Kotlin

Время на прочтение1 мин
Количество просмотров41K

Приветствую тебя — Человек жаждущий знаний!
Хочу поделится с тобой своим небольшими но думаю полезным для многих знаниями по Kotlin в виде небольшой серии видео.
Читать дальше →
Всего голосов 34: ↑32 и ↓2+30
Комментарии16

Работа для программиста в США: 5 простых шагов

Время на прочтение5 мин
Количество просмотров291K
image Статья про то, что делать тем, кто хочет переехать работать в США. Я предполагаю инженерные позиции, на которые проще всего получить визы, но, возможно, статья окажется полезна и другим специалистам.

Мой опыт несколько отличается от нижеописанного (я попала на работу в США после стажировки). Но за 4 года в США пообщалась с людьми, которые попали сюда разными путями и набрала кое-какой опыт. Так что если бы я очень хотела найти работу в США сегодня, то я бы действовала примерно так, как описано ниже.

Заранее извиняюсь, если мой тон кому-то покажется наставническим — я не имею амбиций учить других жизни, просто иногда у меня получается такой стиль.
Читать дальше →
Всего голосов 166: ↑152 и ↓14+138
Комментарии138

Kotlin для начинающих

Время на прочтение1 мин
Количество просмотров62K
Уже не мало нашумел Kotlin в мире программирования, не мало профессиональных инженеров уже обратил на него внимание, но также есть и те кому он не симпатизирует.

В данном топике я бы хотел обратить внимание тех начинающих программистов которые возможно только делают свой выбор языка программирования, которому бы хотели посвятить свою жизнь так сказать.
Читать дальше →
Всего голосов 22: ↑15 и ↓7+8
Комментарии13

Hibernate Cache. Практика

Время на прочтение4 мин
Количество просмотров18K
Итак, в продолжение предыдущей статьи я попробую на реальных ситуациях рассказать о проблемах, которые возникали у меня при работе в реальных проектах.

Миграционные скрипты

Пожалуй, одной из наиболее частых проблем при работе с кешем в моем приложении является необходимость накатывать миграционные скрипты на работающий сервер. Ведь если эти скрипты запускаются не через фабрику сессий работающего сервера, то кеш этой фабрики никак не узнает об изменениях, которые делаются в базу. Следовательно, получаем проблему несовместимости данных. Для решения этой проблемы есть несколько путей:
  1. Рестарт сервера — самый простой и, обычно, самый не приемлемый способ;
  2. Очистка кеша через определенные механизмы — пожалуй самый оптимальный по простоте и надежности метод. Этот метод можно вынести, например в JMX, на веб страничку или другой интерфейс и вызывать при необходимости. Гибкость метода в том, что пишется это один раз, а используется сколько угодно и где угодно. В случае, если Ваш провайдер кеша — EHCache и класс провайдер — SingletonEhCacheProvider, то Ваш код может выглядеть так:
    public String dumpKeys() {
        String regions[] = CacheManager.getInstance().getCacheNames();
        StringBuilder allkeys = new StringBuilder();
        String newLine = System.getProperty("line.separator");
        for (String region : regions) {
            Ehcache cache = CacheManager.getInstance().getEhcache(region);
            allkeys.append(toSomeReadableString(cache.getKeys()));
            allkeys.append(newLine);
        }
        return allkeys.toString();
    }
    

    Естественно что этот код должен выполняться в том же процессе что и хибернейт, статистику которого Вы хотите отследить. Подробней можно прочитать тут. Того же можно добиться используя фабрику сессий.
  3. Запуск миграционных скриптов, используя фабрику сессий работающего сервера. Это похоже на второй метод, с той лишь разницей, что мы не очищаем кеш, а пропускаем все миграционные скрипты через существующую фабрику. Таким образом все необходимые кеши обновляться сами. Этот метод рационально использовать в случае если кеш большой и дешевле его обновлять нежели создавать по новой;

Читать дальше →
Всего голосов 21: ↑20 и ↓1+19
Комментарии12

Hibernate cache

Время на прочтение6 мин
Количество просмотров178K
Довольно часто в java приложениях с целью снижения нагрузки на БД используют кеш. Не много людей реально понимают как работает кеш под капотом, добавить просто аннотацию не всегда достаточно, нужно понимать как работает система. Поэтому этой статье я попытаюсь раскрыть тему про то, как работает кеш популярного ORM фреймворка. Итак, для начала немного теории.

Прежде всего Hibernate cache — это 3 уровня кеширования:
  • Кеш первого уровня (First-level cache);
  • Кеш второго уровня (Second-level cache);
  • Кеш запросов (Query cache);

Кеш первого уровня

Кеш первого уровня всегда привязан к объекту сессии. Hibernate всегда по умолчанию использует этот кеш и его нельзя отключить. Давайте сразу рассмотрим следующий код:
SharedDoc persistedDoc = (SharedDoc) session.load(SharedDoc.class, docId);
System.out.println(persistedDoc.getName());
user1.setDoc(persistedDoc);

persistedDoc = (SharedDoc) session.load(SharedDoc.class, docId);
System.out.println(persistedDoc.getName());
user2.setDoc(persistedDoc);

Возможно, Вы ожидаете, что будет выполнено 2 запроса в БД? Это не так. В этом примере будет выполнен 1 запрос в базу, несмотря на то, что делается 2 вызова load(), так как эти вызовы происходят в контексте одной сессии. Во время второй попытки загрузить план с тем же идентификатором будет использован кеш сессии.
Один важный момент — при использовании метода load() Hibernate не выгружает из БД данные до тех пор пока они не потребуются. Иными словами — в момент, когда осуществляется первый вызов load, мы получаем прокси объект или сами данные в случае, если данные уже были в кеше сессии. Поэтому в коде присутствует getName() чтобы 100% вытянуть данные из БД. Тут также открывается прекрасная возможность для потенциальной оптимизации. В случае прокси объекта мы можем связать два объекта не делая запрос в базу, в отличии от метода get(). При использовании методов save(), update(), saveOrUpdate(), load(), get(), list(), iterate(), scroll() всегда будет задействован кеш первого уровня. Собственно, тут нечего больше добавить.
Читать дальше →
Всего голосов 26: ↑26 и ↓0+26
Комментарии28

Новый класс Optional в Java 8, не панацея от NullPointerException

Время на прочтение4 мин
Количество просмотров151K
В релизе Java 8 появился новый класс Optional призванный помочь разработчикам в обработке NullPointerException.

С NullPointerException встречались многие и во многих случаях, это очень неприятное исключение заставляет дебажить код, дабы понять, в каком месте, кто-то из твоих предшественников(а возможно и ты), не поставили пресловутую проверку на null.

А что если вообще запретить назначать тем или иным полям класса значения равные null? Java естественно не запрещает нам делать этого, но с Optional это становится немного удобнее и нагляднее.

Итак, приступим к описанию основных возможностей этого нововведения.
Читать дальше →
Всего голосов 29: ↑27 и ↓2+25
Комментарии38

Информация

В рейтинге
Не участвует
Откуда
Россия
Зарегистрирован
Активность