Не вполне ясно, что значит «урезать» в терминологии jvm. Изначально память аллокируется в соответствии с флагами Xms и Xmx. Соответственно, сначала процесс может «откусить» Xms памяти и расширится со временем до Xmx. Однако, однажды выделенная память под jvm «разаллокироваться» уже не может, соответственно она зарезервирована под jvm и неюзабельна для других процессов.
Есть ньюанс — java не возвращает уже зааллокированную память обратно. То есть, если у вас хип хоть раз раздулся до некой величины, то даже после прогона gc освобожденная память не будет отдана ОС.
Полностью пример не дам. Код под NDA, а выдумывать нет времени.
Например в RoleDao есть метод: public List<Role> getRolesByNames(Collection<String> names)
В реализации некий SQL запрос соответствующий названию метода. Наличие этого метода декларирует то, что у нас есть способ получения ролей по именам.
Этот метод в дальнейшем вызывается сервисом и может быть частью более сложной транзакции, которая полностью контролируется сервисами. DAO не светятся дальше сервисного слоя и вышележащие слои (например слой веб морды) уже обращаются только к сервисам.
Свечение EntityManager'ом наружу значит «дальше DAO слоя». Сервисы уже напрямую про него не знают и используют аннотацию @Transactional (или xml конфигурацию) чтобы определять границы транзакции (хотя опосредованно, конечно entityManager есть, но он контролируется конфигурацией TransactionManager в Spring и в коде нигде не светится). SQL запросов на уровне сервисного слоя уже нет.
Ну не совсем. DAO может содержать запросы, которые выходят за пределы CRUD и специфичны для конкретной сущности. Дополнительно DAO является некой декларацией способов взаимодействия с данными, что можно легко потерять, если светить EntityManager'ом наружу.
В принципе, да. В случае возникновения проблемы с бесплатной версией крайне высокая вероятность, что способ решения уже найден сообществом. Но если нужны гарантии посеръезнее, то вам нужна поддержка.
Достаточно просто. Запускаете новый ELB и добавляете в него 2 существующих инстанса. После чего настраиваете маппинг портов (например 80 на ELB в 80 на инстансе) и health check. В health check надо указать урл по которому ELB будет периодически опрашивать инстансы и проверять живы ли они.
Тестовое задание — посмотреть на код и то, как задача решена. После него уже можно беседовать и уточнять какие-нибудь условия. Это позволит увидеть, как кандидат думает.
Тут, конечно, вам решать на основе своих задач, но в моем мире скилл написания кода без среды не очень востребован. Мы для оценки языковых навыков даем тестовое задание перед интервью.