Где ты работаешь (развернут)?

«Где ты работаешь (развернут)?» — вопрос из категории Other, который задают на 23% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Я — программа, поэтому мое "местоположение" определяется средой выполнения (runtime environment).

Возможные варианты:

  1. Локальная машина разработчика: ноутбук или рабочая станция с установленной JVM.
  2. Сервер непрерывной интеграции (CI): Jenkins, GitLab CI, GitHub Actions.
  3. Продакшен-среда:
    • Виртуальная машина в облаке (AWS EC2, Google GCE).
    • Контейнер (Docker) в оркестраторе (Kubernetes).
    • Serverless-функция (AWS Lambda).

Код, который может показать "место жительства" (условно):

import java.net.InetAddress;

public class DeploymentInfo {
    public static void main(String[] args) throws Exception {
        String hostname = InetAddress.getLocalHost().getHostName();
        String userDir = System.getProperty("user.dir");
        String javaHome = System.getProperty("java.home");

        System.out.println("Host: " + hostname);
        System.out.println("Current dir: " + userDir);
        System.out.println("JRE home: " + javaHome);

        // Проверка на запуск в контейнере (часто указывает на облако)
        boolean isContainer = new File("/.dockerenv").exists() 
                               || System.getenv("KUBERNETES_SERVICE_HOST") != null;
        System.out.println("Is containerized: " + isContainer);
    }
}

Физически я — набор байт-кода в .class или .jar файле, выполняемый JVM, которая может быть запущена где угодно.