• В чем основные отличия mySQL от Postgre?

    batyrmastyr
    @batyrmastyr
    Из простых преимуществ постгреса - многие запросы в нём отрабатывают шустрее, можно весьма гибко прописать ограничения на данные (если в поле "а" что-то есть, то в поле "б" может быть только "с"), даже крупному магазину может хватить настроек по-умолчанию при которых база довольствуется смешным объёмом памяти.

    Из недостатков по сравнению с Mysql - нет множеств (заменяется массивом перечислений), большая строгость работы (число или перечисление нельзя взять и сравнить со строкой "5 = '5'", нужно привести их к одному типу "5 = '5'::int" или " 5::text = '5'5 ", а ваша обёртка над базой может быть не готова к такому).

    В контексте nosql баз данных например вижу преимущества в быстродействии, например, причем на порядок.

    Увы, это преимущество скорее всего окажется мифом - сейчас как раз потихоньку выпиливаем MongoDB.
    Если говорить про MongoDB, то в моих задачах он работал либо не быстрее мускуля или постгреса при поиске, либо в разы (в 2 - 50 раз) медленнее при записи. При этом Монга жрала 1,5 гига памяти, мускуль - 300 Мб, а постгрес - меньше 15 Мб (да, меньше жалких пятнадцати мегабайт).
    Ответ написан
    3 комментария
  • Что такое/чем отличаются Repository и Dao интерфейсы?

    @bromzh
    Drugs-driven development
    Вот тутор от оракла, там всё поясняют. И ещё вот, например.
    А вообще, с названиями классов в яве всегда были разногласия и путаницы. И часто DAO называют то, что им не должно являться.

    По смыслу, DAO - довольно низкоуровневая штука, работает напрямую с хранилищем. Для каждого Transfer Object'а (сущности) должна быть реализация DAO для конкретного хранилища.
    Например, есть 2 сущности: User и Post. Есть разные хранилища: 2 SQL базы данных (MySql и Postgres), файловая система, хранилище на основе xml-файлов.
    Для объекта User есть интерфейс UserDao с методами CRUD. И должны быть 4 реализации этого метода: MySqlUserDao, PostgresUserDao, FileSystemStorageUserDao, XmlFileStorageUserDao. Аналогично для второй сущности. И обычно создаётся фабрика DAO, которая будет выдавать нужную реализацию (по первой ссылке есть схемы). Ну и в силу похожести реализаций, DAO обычно делают абстрактным и типизированным.
    Таким образом, получается унифицированный интерфейс для манипуляции данными. Можно прозрачно сменить хранилище просто выбрав другую реализацию DAO (например, через внедрение зависимостей или конфигов), не меняя бизнес-логику.

    Так что обычно DAO создают там, где нет готовой реализации связи с каким-нибудь хранилищем (или эта реализация не устраивает). А те же транкзакции - это более высокий уровень, в DAO их можно не включать, чтобы не усложнять архитектуру и монолитность.

    Репозиторий же - это более общая и абстрактная штука.
    Вообще, название "репозиторий" обычно встречается в мире спринга, в JavaEE другие термины. Да и суффикс DAO в спринге используется чаще, хотя по смыслу, это не всегда то самое DAO, в толковании Sun/Oracle.
    Ответ написан
    2 комментария
  • Java, куда именно податься?

    AlPsc
    @AlPsc
    Java/high load/big data
    Во-первых, не забудьте после Шилдта прочесть книгу Джошуа Блоха "Effective Java" (в одном из соседних вопросов упоминается её русский перевод, так что он, видимо, существует) – по моему скромному мнению, это обязательное чтиво для любого Java-программиста.
    Во-вторых, если уж выбирать между Android и чем-то ещё, то надо понимать плюсы и минусы обоих путей. Напишу то, что пришло мне в голову, на полноту и истину в последней инстанции не претендую.

    Android:
    Плюсы:
    • Работы много. Очень. В том числе и удалённой.
    • Получить начальные навыки довольно легко – сейчас есть огромное количество статей, пошаговых руководств и прочих материалов, которые как позволяют учиться новому, так и быстро решать типовые задачи/проблемы.

    Минусы:
    • С точки зрения изучения Java эта среда довольно специфическая. Во-первых, используется довольно старый диалект (Java 6). (В комментариях справедливо поправили, что сейчас на Android доступна Java 7.) Во-вторых, набор библиотечных классов несколько отличается от Java SE, и это значит, что при необходимости писать приложения на "настоящей" Java просто взять и переключиться по щелчку пальцев не получится, а какая-то часть "мобильных" навыков и практик окажется бесполезной.
    • Хорошо программировать на Java значит не только знать язык, но и уметь выбирать прочие инструменты (дополнительные библиотеки и т.п.), которыми, конечно, тоже надо уметь пользоваться. В этом смысле Android тоже довольно далёк от того, к чему привыкли разработчики Java SE/EE: всякие вещи типа JDBC/Hibernate/you-name-it на Android либо отсутствуют в принципе, либо не могут быть использованы из-за ограничений среды (тот же нестандартный набор библиотечных классов). Это опять же означает, что, научившись писать на Java под Android, вы не сможете просто взять и начать разрабатывать, скажем, enterprise/backend приложения, и конкуренцию в этой области с кандидатами, у которых есть соответствующий опыт, выдержать вряд ли сможете. (Я бы ничего этого не писал, но у вопроса есть метка "карьера", так что вы сами напросились :) )
    • Большая часть компаний, занятых мобильной разработкой – сервисные, со всеми вытекающими. Лично для меня это минус, т.к. мне продуктовые компании больше по вкусу.
    Java SE/EE
    Плюсы:
    • Работы много. Очень. В том числе и удалённой.
    • Более широкие возможности применения своих навыков

    Минусы:
    • Более высокий порог вхождения
    • Несколько сложнее наработать портфолио, потому что жизненный цикл "больших" приложений зачастую всё же гораздо длиннее, чем в случае мобильной разработки, где очень большую часть работы составляют проекты для сторонних заказчиков, где изначально задана конкретная конечная цель, сразу оговариваются сроки, и т.п. (Сужу по собственному опыту работы в компании, которая занималась как раз разработкой мобильных приложений для заморских заказчиков.) Конечно, в случае с удалённой работой/сервисными компаниями это может оказаться правдой для приложений любых типов.

    Итак, выбирая Android, вы раньше сможете начать зарабатывать деньги, но "чистая" Java, на мой взгляд, даёт больше перспектив. И по сути Android-программист и Java-программист – совсем не одно и то же. Так что выбор профессионального пути зависит от того, как вы вообще видите себя в ближайшем будущем в этой профессии: хотите ли вы быстро освоиться и получить способ зарабатывать деньги, не сильно задумываясь о смене деятельности в перспективе, либо же вам интересны разные области программирования, и вам хочется многое попробовать.
    Ответ написан
    4 комментария
  • Что не так с резюме?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Мало букв в резюме. Под такое описание подпадают тысячи кандидатов. У вас расписаны стандартные навыки стандартного манки-тестера. Если реально больше знаний нет (процессы внутри команды, методологии и прочее) то хотя бы можно было бы расписать функции которые вы выполняли на других должностях и т.д.

    Слышали анекдот про HR-ов?


    Сидит опытный HR и HR-стажер. Перед ними пачка резюмешек на рассмотрение. Опытный отсчитывает половину стопки и выкидывает в мусор. Стажер в шоке:
    - Василий Степаныч, как же так то?
    - Ай... Нам не нужны неудачники.
    Ответ написан
    1 комментарий