Что такое ExecutorCompletionService? 🤓
Ответ:
ExecutorCompletionService оборачивает Executor и позволяет получать результаты задач по мере их завершения.
Пример:
ExecutorService executor = Executors.newFixedThreadPool(2);
CompletionService<String> service = new ExecutorCompletionService<>(executor);
service.submit(() -> "Task1");
System.out.println(service.take().get()); // Task1
Полезен для асинхронных задач с разным временем выполнения.
#собеседование
Ответ:
Пример:
ExecutorService executor = Executors.newFixedThreadPool(2);
CompletionService<String> service = new ExecutorCompletionService<>(executor);
service.submit(() -> "Task1");
System.out.println(service.take().get()); // Task1
Полезен для асинхронных задач с разным временем выполнения.
#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Лесли Джон Комри (15 августа 1893 г. – 11 декабря 1950 г.) — Астроном и пионер механической/механографической автоматизации вычислений; один из ранних организаторов коммерческих вычислительных услуг и автоматизации таблиц — предтеча компьютерной обработки данных.
Пьер Буге́р (также Буге; фр. Pierre Bouguer; 16 февраля 1698, Круазик (Croisic), Франция — 15 августа 1758, Париж) — французский физик, математик и астроном, основатель фотометрии. Известен трудами по теории корабля, геодезии, гидрографии и другим отраслям знания. Имя Бугера внесено в список 72 величайших учёных Франции, размещённый на первом этаже Эйфелевой башни.
1877 — американский изобретатель Томас Эдисон в письме президенту телеграфной компании Питтсбурга предложил в качестве приветствия при общении по телефону использовать слово «hello» (в России оно трансформировалось в «алло»). В этот же день Эдисон произвёл первую запись звука на свой фонограф — песню «Mary Had a Little Lamb» («У Мэри был барашек»).
1977 — радиотелескоп Big Ear (Огайо, США) зафиксировал "Wow! signal" — один из самых известных возможно внеземных радиоимпульсов.
1998 — компания Apple начала поставки iMac G3, модели, которая кардинально изменила дизайн и восприятие компьютеров в массовом сознании.
15 августа (дата отмечается как Computer Science Day) — день, посвящённый дате запуска первого массового электронного компьютера ENIAC.
#Biography #Birth_Date #Events #15Августа
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Основы ООП в Java
Глава 1. Классы и объекты
Состояние и поведение: поля и методы
Объектно-ориентированное программирование — это подход, где программа строится вокруг объектов, которые представляют реальные сущности (например, машину, человека или счет в банке).
Java — это чисто объектно-ориентированный язык, где всё (кроме примитивных типов) является объектом. ООП помогает писать масштабируемый код, который легко расширять и поддерживать.
Классы и объекты: Основные понятия
Класс: Это шаблон или "чертеж" для создания объектов. Класс определяет, какие данные (состояние) и действия (поведение) будут у объектов.
Объект: Это экземпляр класса — конкретная реализация шаблона. Например, класс Car может описывать автомобили в общем, а объект — конкретный автомобиль, такой как "красный Ford с номером ABC123".
Пример: Представьте класс Person (Человек). Он может иметь состояние (имя, возраст) и поведение (ходить, говорить). Объекты этого класса — конкретные люди, такие как "Алексей, 35 лет".
Состояние: Поля (Fields)
Состояние объекта определяется полями — переменными внутри класса, которые хранят данные. Поля описывают характеристики объекта.
Объявление полей: Поля объявляются в теле класса, вне методов. Они могут быть примитивными типами (int, double) или ссылочными (String, другие классы).
Модификаторы доступа: Чтобы защитить данные, используйте модификаторы:
private: Доступны только внутри класса (рекомендуется для полей).
public: Доступны везде (избегайте для полей, чтобы сохранить инкапсуляцию).
protected: Доступны в классе и подклассах.
Без модификатора (default): Доступны в пакете.
Пример класса с полями:
Поведение: Методы (Methods)
Поведение объекта определяется методами — функциями внутри класса, которые выполняют действия с данными или изменяют состояние.
Объявление методов: Методы имеют сигнатуру: модификатор, тип возвращаемого значения, имя, параметры в скобках, тело в фигурных скобках.
Типы методов:
Конструкторы: Специальные методы для инициализации объектов. Имя совпадает с именем класса, нет типа возвращаемого значения.
Обычные методы: Выполняют действия, могут возвращать значение или нет (void).
Геттеры и сеттеры: Методы для чтения (get) и записи (set) полей, чтобы обеспечить контролируемый доступ.
Пример с методами:
#Java #для_новичков #beginner #class #object
Глава 1. Классы и объекты
Состояние и поведение: поля и методы
Объектно-ориентированное программирование — это подход, где программа строится вокруг объектов, которые представляют реальные сущности (например, машину, человека или счет в банке).
Java — это чисто объектно-ориентированный язык, где всё (кроме примитивных типов) является объектом. ООП помогает писать масштабируемый код, который легко расширять и поддерживать.
Классы и объекты: Основные понятия
Класс: Это шаблон или "чертеж" для создания объектов. Класс определяет, какие данные (состояние) и действия (поведение) будут у объектов.
Объект: Это экземпляр класса — конкретная реализация шаблона. Например, класс Car может описывать автомобили в общем, а объект — конкретный автомобиль, такой как "красный Ford с номером ABC123".
Пример: Представьте класс Person (Человек). Он может иметь состояние (имя, возраст) и поведение (ходить, говорить). Объекты этого класса — конкретные люди, такие как "Алексей, 35 лет".
Состояние: Поля (Fields)
Состояние объекта определяется полями — переменными внутри класса, которые хранят данные. Поля описывают характеристики объекта.
Объявление полей: Поля объявляются в теле класса, вне методов. Они могут быть примитивными типами (int, double) или ссылочными (String, другие классы).
Модификаторы доступа: Чтобы защитить данные, используйте модификаторы:
private: Доступны только внутри класса (рекомендуется для полей).
public: Доступны везде (избегайте для полей, чтобы сохранить инкапсуляцию).
protected: Доступны в классе и подклассах.
Без модификатора (default): Доступны в пакете.
Пример класса с полями:
public class Person {
// Поля (состояние)
private String name; // Имя человека
private int age; // Возраст человека
}
Здесь name и age — поля, хранящие состояние объекта.
Они private, чтобы внешний код не мог напрямую изменять их (инкапсуляция).
Поведение: Методы (Methods)
Поведение объекта определяется методами — функциями внутри класса, которые выполняют действия с данными или изменяют состояние.
Объявление методов: Методы имеют сигнатуру: модификатор, тип возвращаемого значения, имя, параметры в скобках, тело в фигурных скобках.
Типы методов:
Конструкторы: Специальные методы для инициализации объектов. Имя совпадает с именем класса, нет типа возвращаемого значения.
Обычные методы: Выполняют действия, могут возвращать значение или нет (void).
Геттеры и сеттеры: Методы для чтения (get) и записи (set) полей, чтобы обеспечить контролируемый доступ.
Пример с методами:
public class Person {
private String name;
private int age;
// Конструктор (инициализирует состояние)
public Person(String name, int age) {
this.name = name; // this — ссылка на текущий объект
this.age = age;
}
// Метод (поведение): Вывод информации
public void introduce() {
System.out.println("Привет, меня зовут " + name + ", мне " + age + " лет.");
}
// Геттер для возраста
public int getAge() {
return age;
}
// Сеттер для возраста (с проверкой)
public void setAge(int age) {
if (age > 0) {
this.age = age;
} else {
System.out.println("Возраст не может быть отрицательным!");
}
}
}
Конструктор: Person(String name, int age) устанавливает начальное состояние.
Метод introduce(): Выводит информацию (поведение).
Геттер getAge(): Возвращает значение поля.
Сеттер setAge(int age): Изменяет поле с проверкой (инкапсуляция).
#Java #для_новичков #beginner #class #object
👍4
Создание и использование объектов
Объекты создаются с помощью оператора new.
Пример в методе main:
Как создать это в IntelliJ IDEA
Создайте класс:
В проекте щелкните правой кнопкой на src → New → Java Class.
Назовите Person и добавьте код выше.
Создайте класс Main:
Аналогично создайте Main с методом main.
Запустите:
Правой кнопкой на Main.java → Run 'Main.main()'.
Полезные советы для новичков
Используйте this: Для отличия полей класса от параметров методов (например, this.name = name;).
Конструкторы по умолчанию: Если конструктор не указан, Java создает пустой конструктор public Person() {}.
Множественные конструкторы: Можно иметь несколько конструкторов (перегрузка), перегрузка, но об этом в следующем уроке.
Практика инкапсуляции: Всегда делайте поля private и предоставляйте доступ через геттеры/сеттеры.
Проверки в сеттерах: Добавляйте логику, чтобы избежать некорректных данных.
#Java #для_новичков #beginner #class #object
Объекты создаются с помощью оператора new.
Пример в методе main:
public class Main {
public static void main(String[] args) {
// Создание объекта
Person person1 = new Person("Алексей", 35);
// Вызов метода
person1.introduce(); // Вывод: Привет, меня зовут Алексей, мне 35 лет.
// Использование геттера и сеттера
System.out.println("Текущий возраст: " + person1.getAge());
person1.setAge(36);
System.out.println("Новый возраст: " + person1.getAge());
}
}
new Person("Алексей", 35): Создает объект и вызывает конструктор.
person1.introduce(): Вызывает метод объекта.
Как создать это в IntelliJ IDEA
Создайте класс:
В проекте щелкните правой кнопкой на src → New → Java Class.
Назовите Person и добавьте код выше.
Создайте класс Main:
Аналогично создайте Main с методом main.
Запустите:
Правой кнопкой на Main.java → Run 'Main.main()'.
Полезные советы для новичков
Используйте this: Для отличия полей класса от параметров методов (например, this.name = name;).
Конструкторы по умолчанию: Если конструктор не указан, Java создает пустой конструктор public Person() {}.
Множественные конструкторы: Можно иметь несколько конструкторов (перегрузка), перегрузка, но об этом в следующем уроке.
Практика инкапсуляции: Всегда делайте поля private и предоставляйте доступ через геттеры/сеттеры.
Проверки в сеттерах: Добавляйте логику, чтобы избежать некорректных данных.
#Java #для_новичков #beginner #class #object
👍3
Что важнее по Вашему у программиста: софт или хард скилл?
Anonymous Poll
11%
Хард самый важный, софты не нужны. 💪
37%
Харды основное, но маленько софтов необходимо. 👌
34%
Оба одинаковы равны. 🤷♀️
11%
Софты немного важнее хардов - ИМХО ☺️
6%
Софты самое важное! Харды нафиг 😂
👍1
Что выведет код?
#Tasks
class Parent150825 {
Parent150825() {
print();
}
void print() {
System.out.println("Parent");
}
}
class Child150825 extends Parent150825 {
int value = 10;
@Override
void print() {
System.out.println(value);
}
}
public class Task150825 {
public static void main(String[] args) {
new Child150825();
}
}
#Tasks
👍4
🤯2😱1
Что такое LockSupport? 🤓
Ответ:
LockSupport предоставляет низкоуровневые методы (park, unpark) для приостановки и возобновления потоков. Используется в реализации Lock. Пример:
Thread t = new Thread(() -> {
LockSupport.park();
System.out.println("Unparked");
});
t.start();
LockSupport.unpark(t);
Более гибкий, чем wait/notify.
#собеседование
Ответ:
Thread t = new Thread(() -> {
LockSupport.park();
System.out.println("Unparked");
});
t.start();
LockSupport.unpark(t);
Более гибкий, чем wait/notify.
#собеседование
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Христос Харилаос Пападимитриу (греч. Χρήστος Χαριλάος Παπαδημητρίου; род. 1949, Афины) — один из ведущих теоретиков в компьютерных науках; важные работы по теории алгоритмов, сложности вычислений и теория игр, автор фундаментальных учебников и исследований. Член Национальных Академии наук (2009) и Инженерной академии США, профессор Калифорнийского университета в Беркли.
1890 — Электромеханическая обработка переписи США: Бюро переписи объявляет результаты, подсчитанные машинами Германа Холлерита — рубеж для истории вычислений и табуляторов.
1993 — Иан Мёрдок основал сообщество «Debian», занимающееся созданием и распространением свободного дистрибутива Debian GNU/Linux.
2006 — в русской Википедии появилась юбилейная, 100-тысячная статья.
#Biography #Birth_Date #Events #16Августа
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
С 09.08 по 15.08
Предыдущий пост(с 02.08 по 08.08)
Воскресный мотивационный пост:
Молчаливые разработчики ломают проект быстрее, чем баги.
Выбранная голосованием тема:
Введение в Nginx
Запись встреч/видео:
Модульные тесты через TDD в Spring. Tестирование REST API
Обучающие статьи:
while / do-while в Java - 3000й пост в канале💪
Break, continue, метки (label) в Java
ООП. Классы и объекты
Apache Kafka. Введение и архитектура
Apache Kafka. Producer — гарантии, производительность, транзакции
Полезные статьи и видео:
Уязвимости XXE в разрезе Java
Ошибки Java по ГОСТу: обзор и примеры
Для понимания разницы донесения информации - ВСЯ АЙТИШНАЯ ДР*ЧЬ: как здесь все работают на самом деле
Как и всегда, задачи можно найти под тегом - #Tasks, вопросы с собеседований - #собеседование
#memory
Предыдущий пост(с 02.08 по 08.08)
Воскресный мотивационный пост:
Молчаливые разработчики ломают проект быстрее, чем баги.
Выбранная голосованием тема:
Введение в Nginx
Запись встреч/видео:
Модульные тесты через TDD в Spring. Tестирование REST API
Обучающие статьи:
while / do-while в Java - 3000й пост в канале
Break, continue, метки (label) в Java
ООП. Классы и объекты
Apache Kafka. Введение и архитектура
Apache Kafka. Producer — гарантии, производительность, транзакции
Полезные статьи и видео:
Уязвимости XXE в разрезе Java
Ошибки Java по ГОСТу: обзор и примеры
Для понимания разницы донесения информации - ВСЯ АЙТИШНАЯ ДР*ЧЬ: как здесь все работают на самом деле
Как и всегда, задачи можно найти под тегом - #Tasks, вопросы с собеседований - #собеседование
#memory
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Java for Beginner
Вновь создаем встречу, обсуждаем Java, заходите, поговорим.
Всем спасибо кто пришел🫡
Классно поговорили и обменялись мнениями👍
Думаю надо повторить🤝
Классно поговорили и обменялись мнениями👍
Думаю надо повторить🤝
👍6
Ло́уренс Джо́зеф «Ла́рри» Э́ллисон (англ. Lawrence Joseph «Larry» Ellison; род. 17 августа 1944 года, Бронкс, Нью-Йорк, США) — сооснователь и долгосрочный руководитель Oracle Corporation; ключевая фигура в развитии коммерческих СУБД и корпоративного программного обеспечения.
1958 — Pioneer 0 (Thor-Able) — первая американская попытка отправить аппарат к Луне; запуск 17 августа, авария на взлёте.
1970 — программа «Венера»: запуск аппарата Венера-7, первого успешно передавшего данные с поверхности другой планеты — Венеры.
1982 — Германия/Япония: на заводе Philips (Ганновер) начинают серийно прессовать первые компакт-диски (CD); коммерческий старт CD-эры — осень 1982.
#Biography #Birth_Date #Events #17Августа
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Если твой баг стоит миллионы: кто виноват и кто заплатит?
Ты написал код. Код ушёл в прод.
Через час — у компании минус 10 миллионов рублей из-за сбоя в платёжке.
Тебя вызывает тимлид. Потом HR. Потом юрист.
А в голове вертится одна мысль: если я сяду, где я возьму столько денег?
😉 Давайте сегодня развеем страхи любого начинающего разработчика
🤓 Где закон встречает программиста
В России у программиста есть три юридических ловушки:
Гражданский кодекс РФ
ст. 1064 ГК РФ — "Общая ответственность за причинение вреда".
ст. 15 ГК РФ — "Компенсация убытков".
Если из-за твоего кода компания реально потеряла деньги, теоретически она может взыскать ущерб.
Трудовой кодекс РФ
ст. 232–233, 238 ТК РФ — обязанность работника, как стороны трудового договора, нести материальную ответственность, но только в пределах своего заработка, если иное не доказано.
Уголовный кодекс РФ (крайне редкий, но встречающийся кейс)
ст. 272 УК РФ — неправомерный доступ к компьютерной информации.
ст. 273 УК РФ — создание и распространение вредоносных программ.
❗️ Вот что важно - это наличие виновности❗️
😔 Что такое "виновность"
В трудовом праве РФ "виновность" это наличие твоих неправомерных действий (или бездействия) и наличие причинно-следственной связи с ущербом. Виновность полностью может установить только суд/специальная комиссия/уполномоченные лица.
При любом раскладе все решения можно обжаловать в вышестоящем суде.
🫰 Когда ты реально можешь заплатить?
🔴 Ущерб доказан и он прямой (сломанный сервер, утраченные данные, деньги реально ушли).
🔴 Ты действовал с нарушением правил, инструкций или проявил грубую небрежность.
🔴 Есть приказ о привлечении к ответственности (работодатель должен провести служебное расследование и зафиксировать все сопутствующие моменты).
🔴 Есть документально подтвержденное, законное, оформленное подтверждение ущерба.
🔴 Суд/комиссия установила, что вина в причиненном ущербе - твоя.
🔜 Все пять условий должны быть соблюдены одновременно, чтобы работодатель мог взыскать с тебя сумму ущерба.
Важно: по ст. 241 ТК РФ твой максимум ответственности это средняя месячная зарплата.
А вот полную сумму ущерба взыщут только в спецслучаях (ст. 243 ТК РФ):
- умышленный вред,
- кража,
- разглашение тайны,
- алкоголь/наркотики,
- договор о полной мат. ответственности,
- причинение ущерба не при исполнении работником трудовых обязанностей.
Пример: ты по невнимательности, пьяный, уронил серверный блок, отчего удалилась продовая БД. Твой напарник, по инструкции обязан был делать бэкап — и не сделал. Полный ущерб причиненный компании выплатите пополам🤣 .
✌️ Когда ты НЕ платишь?
🔵 Ошибка нормальная рабочая, без умысла, в рабочем процессе или при выполнения задания.
🔵 Работодатель сам не создал условий (например, не было ревью, тестирования, или тебя заставили задеплоить в прод ночью) и т.д. Но важно это с твоей стороны это доказать!
🔵 Ущерб — это "упущенная выгода" (например, "мы могли заработать, но баг помешал" — это не взыскивается по ТК РФ).
🔵 Крайняя необходимость и необходимая оборона (если ты разбил монитор об голову грабителя — это не взыскивается по ТК РФ).
Пример: тебя попросили срочно вкатить фиксы без тестов, всё упало, компания потеряла клиентов. Тут вина на организации процесса, а не на тебе.
🤫 Вот мои советы, чтобы избежать проблем:
Документируйте всё
Ведите переписку с руководством и коллегами через корпоративные каналы (почта, мессенджеры) по рискованным задачам и условиям, которые могут привести к ущербу.
Следуйте инструкциям и правилам
Изучите и всегда следуйте внутренним правилам компании (политикам, регламентам, инструкциям). Не выполняйте задачи, которые не входят в вашу должностную инструкцию, без письменного распоряжения.
Проверяйте условия работы
Внимательно изучите свой трудовой договор. Проверяйте рабочее оборудование, если вам его предоставили.
Соблюдайте стандарты разработки
Регулярно проводите тестирование и ревью кода, ведите подробную документацию по проекту, если этого нет.
Понравилась статья - поделись с другом, позови его на канал и будет тебе моя благодарность 🤝
😎
#motivation
Ты написал код. Код ушёл в прод.
Через час — у компании минус 10 миллионов рублей из-за сбоя в платёжке.
Тебя вызывает тимлид. Потом HR. Потом юрист.
А в голове вертится одна мысль: если я сяду, где я возьму столько денег?
В России у программиста есть три юридических ловушки:
Гражданский кодекс РФ
ст. 1064 ГК РФ — "Общая ответственность за причинение вреда".
ст. 15 ГК РФ — "Компенсация убытков".
Если из-за твоего кода компания реально потеряла деньги, теоретически она может взыскать ущерб.
Трудовой кодекс РФ
ст. 232–233, 238 ТК РФ — обязанность работника, как стороны трудового договора, нести материальную ответственность, но только в пределах своего заработка, если иное не доказано.
Уголовный кодекс РФ (крайне редкий, но встречающийся кейс)
ст. 272 УК РФ — неправомерный доступ к компьютерной информации.
ст. 273 УК РФ — создание и распространение вредоносных программ.
В трудовом праве РФ "виновность" это наличие твоих неправомерных действий (или бездействия) и наличие причинно-следственной связи с ущербом. Виновность полностью может установить только суд/специальная комиссия/уполномоченные лица.
При любом раскладе все решения можно обжаловать в вышестоящем суде.
Важно: по ст. 241 ТК РФ твой максимум ответственности это средняя месячная зарплата.
А вот полную сумму ущерба взыщут только в спецслучаях (ст. 243 ТК РФ):
- умышленный вред,
- кража,
- разглашение тайны,
- алкоголь/наркотики,
- договор о полной мат. ответственности,
- причинение ущерба не при исполнении работником трудовых обязанностей.
Пример: ты по невнимательности, пьяный, уронил серверный блок, отчего удалилась продовая БД. Твой напарник, по инструкции обязан был делать бэкап — и не сделал. Полный ущерб причиненный компании выплатите пополам
Пример: тебя попросили срочно вкатить фиксы без тестов, всё упало, компания потеряла клиентов. Тут вина на организации процесса, а не на тебе.
Документируйте всё
Ведите переписку с руководством и коллегами через корпоративные каналы (почта, мессенджеры) по рискованным задачам и условиям, которые могут привести к ущербу.
Следуйте инструкциям и правилам
Изучите и всегда следуйте внутренним правилам компании (политикам, регламентам, инструкциям). Не выполняйте задачи, которые не входят в вашу должностную инструкцию, без письменного распоряжения.
Проверяйте условия работы
Внимательно изучите свой трудовой договор. Проверяйте рабочее оборудование, если вам его предоставили.
Соблюдайте стандарты разработки
Регулярно проводите тестирование и ревью кода, ведите подробную документацию по проекту, если этого нет.
#motivation
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8