ch
Feedback
Java | Вопросы собесов

Java | Вопросы собесов

前往频道在 Telegram

Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @easyoffer_adv

显示更多

📈 Telegram 频道 Java | Вопросы собесов 的分析概览

频道 Java | Вопросы собесов (@easy_java_ru) 俄语 语言赛道中的 是活跃参与者。目前社区聚集了 11 368 名订阅者,在 技术与应用 类别中位列第 10 619,并在 俄罗斯 地区排名第 56 558

📊 受众指标与增长动态

невідомо 创建以来,项目保持高速增长,吸引了 11 368 名订阅者。

根据 02 九月, 2026 的最新数据,频道保持稳定运转。过去 30 天订阅人数变化为 -29,过去 24 小时变化为 -12,整体触达仍然可观。

  • 认证状态: 未认证
  • 互动率 (ER): 平均受众互动率为 8.57%。内容发布后 24 小时内通常能获得 5.66% 的反应,占订阅者总量。
  • 帖子覆盖: 每篇帖子平均可获得 974 次浏览,首日通常累积 643 次浏览。
  • 互动与反馈: 受众积极参与,单帖平均反应数为 4
  • 主题关注点: 内容集中在 ставь, void, string, строка, static 等核心主题上。

📝 描述与内容策略

作者将该频道定位为表达主观观点的平台:
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @easyoffer_adv

凭借高频更新(最新数据采集于 03 九月, 2026),频道始终保持新鲜度与高覆盖。分析显示受众积极互动,使其成为 技术与应用 类别中的关键影响点。

11 368
订阅者
-1224 小时
-367 天
-2930 天
帖子存档
🤔 Что означает симметричность? Симметричность – это свойство, при котором если A связано с B, то B связано с A. 🚩В математике В логике и алгебре отношение \( R \) называется симметричным, если: a R b \Rightarrow b R a Но, например, отношение "a > b" не симметрично, потому что если a > b, то b > a – это неверно. 🚩В программировании (Java) В Java симметричность важна при переопределении метода equals(). Если a.equals(b) == true, то обязательно должно быть b.equals(a) == true. Ошибочный код (нарушает симметричность)
class Person {
    String name;

    Person(String name) {
        this.name = name;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj instanceof String) {  // ❌ Сравниваем с String (ошибка)
            return this.name.equals(obj);
        }
        return false;
    }
}

public class Main {
    public static void main(String[] args) {
        Person p = new Person("Alice");

        System.out.println(p.equals("Alice")); // true
        System.out.println("Alice".equals(p)); // false ❌ (нарушена симметричность)
    }
}
Правильный способ
@Override
public boolean equals(Object obj) {
    if (this == obj) return true;
    if (obj == null || getClass() != obj.getClass()) return false;
    Person person = (Person) obj;
    return name.equals(person.name);
}
Ставь 👍 и забирай 📚 Базу знаний

🔒 1219 ГБ платного контента для JAVA программистов выложили БЕСПЛАТНО Получите доступ к библиотеке знаний от FAANG School то
🔒 1219 ГБ платного контента для JAVA программистов выложили БЕСПЛАТНО Получите доступ к библиотеке знаний от FAANG School только в течение 24 часов: – Пошаговая RoadMap по Java – Redis - 5 улучшений для твоего пет-проекта – Мануал по Docker. Основные команды и концепции – Микросервисы. Вопросы с собеседований – Шпаргалка с горячими клавишами JetBrains IDE. Ускоришь работу в 10 раз – Desk setup. Подборка аксессуаров для комфортной работы – Шпаргалка по Kafka – Шпаргалка по Spring с разбором паттерна Наблюдатель – Инструкция по работе с Git – Подробный гайд, как найти работу в IT без опыта – Подборка платформ с вакансиями для java-разработчиков - Шпаргалка по основным командам SQL Свежее пополнение - гайд «Топ пет-проектов с AI». Сборник идей, который поможет создать пет-проект не только для портфолио, но и для пассивного дохода 🫢 Это возможность для джуна продвинуться по карьерной лестнице со скоростью лифта. Переходи по ссылке и забирай.

🤔 Какой метод HTTP не является неизменяемым? Методы HTTP, такие как POST, PUT, и DELETE, не являются неизменяемыми, поскольку они изменяют состояние сервера, добавляя, обновляя или удаляя данные. В отличие от них, методы GET и HEAD считаются неизменяемыми, так как они только запрашивают данные, не влияя на сервер. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

wipe right or swipe left Что делать, если твои мэтчи в жизни не такие точные, как твой код? Спокойно, 14 февраля в 19:00 по М
wipe right or swipe left Что делать, если твои мэтчи в жизни не такие точные, как твой код? Спокойно, 14 февраля в 19:00 по МСК мы разберём, как ML анализирует speed dating и предсказывает match. 📌 Мы возьмем реальные данные со speed dating. 📌 Обучим модель, которая скажет: match или swipe left. 📌 Разберём, какие признаки реально важны (спойлер: работа в IT — не прям гарантия успеха (наши маркетологи подтверждают 😥). 💡 Приходи, если хочешь прокачать свой Python, ML и, возможно, станешь идеальной парой, как самый стильные форсы. 👉 Записаться

🤔 После какого момента GC понимает, что нужно собирать мусор? Garbage Collector (GC) в Java начинает сборку мусора, когда объекты в памяти больше не используются и не имеют активных ссылок. 🟠Основное правило: объект считается мусором, если нет на него ссылок GC понимает, что объект можно удалить, если на него больше не ссылается ни одна переменная или он стал недостижимым.
class Demo {
    int value;
}

public class Main {
    public static void main(String[] args) {
        Demo obj = new Demo(); // Создан объект в памяти (Heap)
        obj = null; // Теперь на него нет ссылки → GC его удалит
    }
}
🚩Когда GC запускается? 🟠Недостаток памяти (Low Memory) Если в куче (Heap) осталось мало свободной памяти, JVM может запустить GC. 🟠Алгоритмы JVM (GC работает автоматически) GC в Java автоматический, и его запуск зависит от алгоритма сборщика мусора. Некоторые из них: Serial GC (для маленьких программ) Parallel GC (по умолчанию в Java 8) G1 GC (по умолчанию в Java 11+) ZGC, Shenandoah GC (для высоконагруженных систем) 🚩Способы обнаружения "мусора" 🟠Счётчик ссылок (Reference Counting) Устарело, потому что не умеет работать с циклическими ссылками. 🟠Алгоритм "Reachability" (Достижимость) Основной метод, который использует GC в Java. 🟠Алгоритм достижимости (Reachability Analysis) GC начинает с корневых объектов (GC Roots) и проверяет, какие объекты достижимы. Ставь 👍 и забирай 📚 Базу знаний

🤔 Какие основные методы присутствуют в классе HttpServlet? 1. doGet(HttpServletRequest req, HttpServletResponse resp): для обработки GET-запросов. 2. doPost(HttpServletRequest req, HttpServletResponse resp): для обработки POST-запросов. 3. doPut(HttpServletRequest req, HttpServletResponse resp): для обработки PUT-запросов. 4. doDelete(HttpServletRequest req, HttpServletResponse resp): для обработки DELETE-запросов. 5. service(HttpServletRequest req, HttpServletResponse resp): для определения типа HTTP-запроса и вызова соответствующего метода. 6. init() и destroy(): для настройки сервлета и освобождения ресурсов. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое HQL? HQL (Hibernate Query Language) – это язык запросов, используемый в Hibernate (фреймворке для работы с базами данных в Java), который похож на SQL, но оперирует не таблицами и столбцами, а объектами и их свойствами. 🚩Зачем нужен HQL? Когда мы работаем с базами данных в Hibernate, мы используем объектно-реляционное отображение (ORM), где каждая таблица представляется как класс, а строки – как объекты. Однако иногда нам нужно делать запросы к базе данных, например: Получить список объектов, соответствующих определённому критерию Отфильтровать, отсортировать или объединить данные Выполнить массовое обновление или удаление Можно, конечно, использовать чистый SQL, но тогда мы потеряем преимущества ORM, такие как переносимость кода между разными базами данных. HQL решает эту проблему, позволяя писать запросы в объектных терминах, а Hibernate сам преобразует их в правильный SQL для конкретной базы данных. 🚩Как выглядит HQL? HQL очень похож на SQL, но вместо таблиц и столбцов мы используем имена классов и их полей. 🟠Пример 1: Получение списка объектов Допустим, у нас есть класс User, связанный с таблицей users:
@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    private String name;
    private int age;
    
    // Геттеры и сеттеры
}
Теперь напишем HQL-запрос, чтобы получить всех пользователей старше 18 ле
String hql = "FROM User WHERE age > 18";
List<User> users = session.createQuery(hql, User.class).getResultList();
Выборка только имен пользователей
String hql = "SELECT u.name FROM User u";
List<String> names = session.createQuery(hql, String.class).getResultList();
Запрос с параметрами (предотвращает SQL-инъекции)
String hql = "FROM User WHERE name = :name";
Query<User> query = session.createQuery(hql, User.class);
query.setParameter("name", "Иван");
List<User> users = query.getResultList();
🚩ПлюсыНезависимость от СУБД HQL автоматически адаптируется под MySQL, PostgreSQL, Oracle и другие базы. ➕Оперирование объектами вместо таблиц и столбцов мы работаем с сущностями (классами Java). ➕Безопасность использование параметров (setParameter()) предотвращает SQL-инъекции. ➕Гибкость поддержка JOIN, GROUP BY, ORDER BY и других SQL-конструкций. Ставь 👍 и забирай 📚 Базу знаний

Уже завтра собеседование на Middle Java с разработчиком из Oracle 5 февраля (уже завтра!) в 19:00 по мск приходи онлайн на от
Уже завтра собеседование на Middle Java с разработчиком из Oracle 5 февраля (уже завтра!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Java-разработчика. Как это будет: 1. Алексей Ушаровский ведущий Java-разработчик c опытом работы в Oracle и Сбере будет задавать реальные вопросы и задачи разработчику-добровольцу 2. Алексей будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью 3. В конце можно будет задать любой вопрос Алексею Что узнаешь на прямом эфире от ШОРТКАТ: • Чего ждут от кандидатов на Middle позиции в Java-разработке • Какие вопросы задают на интервью и зачем • Как подготовиться к собесу, чтобы получить оффер Это бесплатно? Бесплатно Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_sh_bot Реклама. ООО "ШОРТКАТ", ИНН: 9731139396, erid: 2Vtzqufy8Pn

🤔 Почему HttpServlet класс объявлен как абстрактный? Класс HttpServlet объявлен абстрактным, потому что он предоставляет базовый функционал для обработки HTTP-запросов, но сам по себе не предназначен для непосредственного использования. Разработчики должны переопределять его методы, такие как doGet или doPost, чтобы реализовать специфичное поведение для своего приложения. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

⚡ Когда говорят, что Java слишком простой язык, на сцену выходит канал Java Learning Здесь легко научиться: ▪️ Разрабатывать
Когда говорят, что Java слишком простой язык, на сцену выходит канал Java Learning Здесь легко научиться: ▪️ Разрабатывать высоконагруженные серверные приложения ▪️ Управлять сложными базами данных ▪️ Организовывать эффективную многопоточную обработку данных ▪️ Проходить технические собеседования в ведущие IT-компании Самый необычный канал про Java, подписывайся@Java_per_month

🤔 Что такое Java Server Pages JSP? Java Server Pages (JSP) — это технология для создания динамических веб-страниц с использованием Java. JSP позволяет смешивать HTML с Java-кодом для генерации динамического контента на сервере. 🚩Плюсы:Интеграция с Java: Вставка Java-кода в HTML-страницы. ➕Теги JSP: Скриплеты: <% ... %> Выражения: <%= ... %> Директивы: <%@ ... %> Декларации: <%! ... %> JavaBeans: Поддержка использования JavaBeans для разделения логики и представления. ➕Пользовательские теги: Расширение функциональности через собственные теги. Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое инкапсуляция? Это принцип ООП, который скрывает реализацию объекта и предоставляет доступ только к необходимой информации через методы. Она обеспечивает контроль доступа к данным и защиту от некорректного использования. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Докажи CAP теорему CAP-теорема (Consistency, Availability, Partition Tolerance) утверждает, что в распределенной системе невозможно одновременно обеспечить три свойства: 🟠Consistency (Согласованность) все узлы видят одни и те же данные в один момент времени. 🟠Availability (Доступность) каждый запрос получает ответ, даже если некоторые узлы вышли из строя. 🟠Partition Tolerance (Устойчивость к разделению сети) система продолжает работать, даже если сеть разделилась на изолированные части. 🚩Доказательство Рассмотрим сценарий с распределенной системой, состоящей из двух узлов (A и B), которые могут обмениваться данными. 🟠Предположим, что произошел сетевой раздел (Partition Tolerance, P) узлы A и B больше не могут обмениваться данными. Теперь у нас есть выбор 🟠Обеспечить согласованность (C) это значит, что данные на A и B должны оставаться идентичными. Однако, так как они не могут обмениваться данными, запросы к B не могут быть обработаны до восстановления связи (нарушается доступность). 🟠Обеспечить доступность (A) это значит, что оба узла должны продолжать отвечать на запросы. Однако, так как они не могут синхронизироваться, данные на A и B могут отличаться (нарушается согласованность). Так как разделение сети (P) может произойти в реальных условиях, система вынуждена выбирать между C и A. Таким образом, невозможно одновременно обеспечить все три свойства (C, A, P). Ставь 👍 и забирай 📚 Базу знаний

🤔 Чем отличается операция map от flatMap? - map: преобразует элементы одного потока данных в другой, сохраняя структуру (например, возвращая поток потоков). - flatMap: преобразует элементы и объединяет результаты в один поток, устраняя вложенность. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Используешь в работе Lambda-выражения? Да, лямбда-выражения являются важной частью современной разработки на Java, и я активно их использую в своей работе. Лямбда-выражения помогают писать более лаконичный и выразительный код, особенно при работе с коллекциями и потоками данных. Вот несколько распространенных случаев использования лямбда-выражений в Java: 🟠Итерация по коллекциям Использование лямбда-выражений с методом forEach позволяет компактно и удобно итерировать по элементам коллекций.
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
names.forEach(name -> System.out.println(name));
🟠Фильтрация и преобразование коллекций С использованием Stream API и лямбда-выражений можно легко фильтровать, сортировать и преобразовывать коллекции.
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
List<String> filteredNames = names.stream()
    .filter(name -> name.startsWith("A"))
    .collect(Collectors.toList());

filteredNames.forEach(System.out::println); // Вывод: Alice
🟠Сортировка коллекций Лямбда-выражения упрощают сортировку коллекций с использованием метода sort.
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
names.sort((name1, name2) -> name1.compareTo(name2));
names.forEach(System.out::println);
🟠Использование функциональных интерфейсов Лямбда-выражения широко используются с функциональными интерфейсами, такими как Predicate, Function, Consumer и Supplier.
// Predicate
Predicate<String> startsWithA = s -> s.startsWith("A");
boolean result = startsWithA.test("Alice"); // true

// Function
Function<String, Integer> lengthFunction = s -> s.length();
int length = lengthFunction.apply("Hello"); // 5

// Consumer
Consumer<String> printConsumer = s -> System.out.println(s);
printConsumer.accept("Hello, World!"); // Вывод: Hello, World!

// Supplier
Supplier<String> stringSupplier = () -> "Hello, Supplier!";
String suppliedString = stringSupplier.get();
System.out.println(suppliedString); // Вывод: Hello, Supplier!
🟠Параллельные вычисления Лямбда-выражения с использованием параллельных потоков позволяют легко выполнять параллельные вычисления.
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.parallelStream()
    .mapToInt(Integer::intValue)
    .sum();

System.out.println("Sum: " + sum); // Вывод: Sum: 15
🚩Пример использования в реальном проекте Предположим, у нас есть список сотрудников, и мы хотим отфильтровать и отсортировать их по имени.
import java.util.*;
import java.util.stream.Collectors;

class Employee {
    private String name;
    private int age;

    public Employee(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    @Override
    public String toString() {
        return "Employee{name='" + name + "', age=" + age + '}';
    }
}

public class LambdaExample {
    public static void main(String[] args) {
        List<Employee> employees = Arrays.asList(
            new Employee("Alice", 30),
            new Employee("Bob", 25),
            new Employee("Charlie", 35),
            new Employee("David", 28)
        );

        // Фильтрация и сортировка сотрудников по имени
        List<Employee> filteredAndSorted = employees.stream()
            .filter(e -> e.getAge() > 27)
            .sorted(Comparator.comparing(Employee::getName))
            .collect(Collectors.toList());

        filteredAndSorted.forEach(System.out::println);
    }
}
Ставь 👍 и забирай 📚 Базу знаний

🤔 В чём разница между JDK и JRE? - JDK (Java Development Kit): включает инструменты для разработки Java-приложений (компилятор javac, отладчики). - JRE (Java Runtime Environment): включает только среду выполнения для запуска Java-программ (JVM и стандартные библиотеки). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что знаешь про модели памяти в Java? Модель памяти Java (Java Memory Model, JMM) определяет, как взаимодействуют потоки через память и как изменения, сделанные одним потоком, становятся видимыми для других потоков. Модель памяти Java является фундаментальной частью многопоточной среды в Java, обеспечивающей корректность и предсказуемость поведения многопоточных программ. 🚩Основные аспекты 🟠Взаимодействие потоков и памяти: JMM определяет, как потоки взаимодействуют с переменными (данными), хранящимися в общей памяти. Каждая переменная в Java хранится в основной памяти (main memory), и потоки могут иметь локальные копии этих переменных в своих рабочих кешах. 🟠Чтение и запись переменных Когда поток читает переменную, он может читать ее из своей локальной копии или из основной памяти. Когда поток записывает переменную, он может записывать ее в свою локальную копию или непосредственно в основную память. 🚩Гарантии JMM 🟠Последовательная согласованность (Sequential Consistency) Последовательная согласованность гарантирует, что действия всех потоков будут выполняться в том порядке, в котором они были написаны в коде, если нет явных указаний на обратное. 🟠Видимость (Visibility) Видимость означает, что изменения, сделанные одним потоком, становятся видимыми для других потоков. В JMM видимость изменений обеспечивается с помощью синхронизации. 🟠Произвольный порядок выполнения (Out-of-Order Execution) JMM допускает оптимизации, такие как переупорядочивание инструкций, чтобы улучшить производительность, но гарантирует, что видимость и порядок выполнения будут сохраняться, как описано в спецификации.
public class VisibilityExample {
    private static boolean flag = false;
    private static int counter = 0;

    public static void main(String[] args) throws InterruptedException {
        Thread writer = new Thread(() -> {
            counter = 42;
            flag = true;
        });

        Thread reader = new Thread(() -> {
            while (!flag) {
                // Ждем пока флаг не станет true
            }
            System.out.println("Counter: " + counter);
        });

        writer.start();
        reader.start();

        writer.join();
        reader.join();
    }
}
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое Hibernate? Это ORM-фреймворк для работы с базами данных. Он позволяет сопоставлять объекты Java с таблицами базы данных, упрощая операции CRUD без необходимости написания SQL-кода вручную. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Как ты можешь описать абстракцию? Это принцип объектно-ориентированного программирования (ООП), который скрывает детали реализации объекта и показывает только его наиболее важные характеристики. Она позволяет сосредоточиться на сущности объекта, игнорируя его внутреннюю сложность. 🚩Абстракция В Java абстракция достигается через: Абстрактные классы Интерфейсы 🟠Абстрактные классы Абстрактный класс — это класс, который не может быть создан напрямую, но может содержать: Абстрактные методы (без реализации, только сигнатуры); Обычные методы (с реализацией). Используется, если вы хотите описать общее поведение для группы классов, но часть поведения оставить на усмотрение конкретных подклассов.
abstract class Animal {
    // Абстрактный метод — реализуется в подклассах
    abstract void makeSound();

    // Обычный метод
    void eat() {
        System.out.println("This animal eats food.");
    }
}

class Dog extends Animal {
    @Override
    void makeSound() {
        System.out.println("Woof!");
    }
}

class Cat extends Animal {
    @Override
    void makeSound() {
        System.out.println("Meow!");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal dog = new Dog();
        dog.makeSound(); // Woof!
        dog.eat();       // This animal eats food.

        Animal cat = new Cat();
        cat.makeSound(); // Meow!
    }
}
🟠Интерфейсы Интерфейс — это чистый контракт, который определяет набор методов, которые класс должен реализовать. В отличие от абстрактного класса: Интерфейс не может содержать полей (кроме static final). Класс может реализовать несколько интерфейсов (множественное наследование).
interface Vehicle {
    void start(); // метод без реализации
    void stop();
}

class Car implements Vehicle {
    @Override
    public void start() {
        System.out.println("Car is starting.");
    }

    @Override
    public void stop() {
        System.out.println("Car is stopping.");
    }
}

class Bike implements Vehicle {
    @Override
    public void start() {
        System.out.println("Bike is starting.");
    }

    @Override
    public void stop() {
        System.out.println("Bike is stopping.");
    }
}

public class Main {
    public static void main(String[] args) {
        Vehicle car = new Car();
        car.start(); // Car is starting.
        car.stop();  // Car is stopping.

        Vehicle bike = new Bike();
        bike.start(); // Bike is starting.
        bike.stop();  // Bike is stopping.
    }
}
🚩Почему важна абстракция? 🟠Скрытие сложностей Программистам не нужно знать все детали реализации объекта. Они работают только с его интерфейсом. 🟠Упрощение понимания Код становится понятным и модульным, так как мы сосредоточиваемся на важной логике. 🟠Повторное использование Абстракция позволяет использовать один и тот же код для разных объектов. 🟠Гибкость и поддержка Если нужно изменить реализацию, это не затронет остальную часть программы (если она работает через абстрактный контракт). Ставь 👍 и забирай 📚 Базу знаний

👋 Меня зовут Николай, я - техлид в крупном банке На текущий момент провел более 100 собеседований разработчиков уровня middle+, при этом сам регулярно прохожу собеседования и получаю офферы в крупнейшие компании: Яндекс, Альфу, Сбер и др. Благодаря этому я накопил большой опыт в прохождении собеседований, знаю какие вопросы задают и как правильно на них отвечать, чтобы получить заветный оффер Занимаюсь менторингом действующих разработчиков Java, кто хочет повысить свою зарплату, а также тех, кто имеет опыт самостоятельного обучения и хочет найти первую работу Java разработчиком (совсем без знаний будет трудно) На менторинге показываю каким образом ведется разработка реального проекта, расставляю приоритеты в обучении, готовлю к собеседованиям, даю домашнее задание и провожу ревью, отвечаю на любые вопросы. По окончании курса мы с вами напишем 3 микросервиса и 1 библиотеку (spring boot starter), которые могут вам встретится в реальной работе и станут частью вашего резюме Все ученики первого потока успешно трудоустроились, три человека получили оффер более 200 тысяч рублей в месяц Второй поток в самом разгаре, обучаются как ребята смежных IT специальностей (аналитики, специалисты сопровождения, разработчики других ЯП), так и действующие Java разработчики с несколькими годами опыта Всего обучение прошли или проходят 25 учеников Курс содержит 35 часов лекций и 15 часов живого разбора вопросов. Кроме того вы получите доступ к вопросам, которые задавали мне и моим ученикам на реальных собеседованиях Третий поток начинается 8 февраля, если хотите участвовать - заполните анкету и я с вами свяжусь Также я веду блог пишу статьи на habr