Я б додав у фільм ще одного персонажа — обожнюю цього чувака.
🎥 Creator/presenter of Java Coding Tips, a biweekly series of Shorts on the Java YouTube channel
🇫🇷 Based in France
💻 Java Developer Advocate at Oracle
🎓 PhD in applied mathematics & computer science
👨🏫 Former university professor
☕ Active in the Java community and Paris Java User Group
☕ Also presents JEP Café, focused on Java Enhancement Proposals
Цікаво було подивитись і послухати дідів)
Розкрив для себе Brian Goetz як невидимого героя Java, такого собі сірого кардинала.
Зловив себе на думці що з появою chatgpt я почав часто цікавився природою еволюції тих чи інших фіч в Java, що було в думках їхніх архітекторів, чим вони керувались, які були trade-offs. До цього важкувато було відшукати таку інформацію, а чат копає і видає багато доволі всього цікавого. І це дійсно цікаво коли «Java is paying your bills».
Is Java dead? Is Java dead?
Робимо ставки до якої версії дійде Java коли в епоху AI всі високо-рівневі мови програмування вимруть і залишиться лише машинний код (чи асемблер) і англійська. Ну можливо ще кілька системних.
Важко навіть уявити що пережив хлопець після переривання сертифікації через відключення світла. А якби оракл не дав другого шансу безкоштовно.. Мабуть Арсеній пішов би розробляти балістику замість мирних веб апплікейшенів.
До речі, на Донбасі видобувають й біле золото також — Артемсіль) Правда зараз вже солевидобуток довелось весь переносити на Закарпаття(
Так і дооптимізуємось... незабаром будемо сидіти всі безробітні і голодні. Залиште людям можливість нормально робити баги, фіксити їх і отримувати зарплату.
Чудова стаття, як і тема для неї.
Особисто маю справу на проекті із збреженням в базу (імпортом) великої кількості бізнес даних через доволі розгалужену доменну модель з використанням batching підходу (використовуємо Spring Batch).
Близька серцю проблематика. В моєму випадку — це пошук ідеального балансу між швидкістю збереження даних та довжини транзакції виходячи з варіацій набору бізнес даних, задля мінімізації ризику ролбеків та дедлоків.
Що дійсно стає в нагоді, так це те, що MySQL пропонує суттєвий набір метаданих, які зберігаються в information та performance схемах, чи операційної іформації через стейтменти на кшталт show engine, що в сукупності дає змогу всеохоплююче дослідити стан речей та історію подій в базі.
Моя особиста думка, що тема InnoDB Locking доволі непроста для освоєння,
але дико цікава коли досліджуєш її з глибини і починаєш розуміти як це працює, які проблеми вирішує. Транзакційна модель, блокування, рівні ізоляції, консистентність даних і все таке.
А взагалі, як на мене, це вибухова суміш задоволення для інженера працювати зі стеком Java/Spring/MySQL/AWS маючи при цуьому розширене розуміння часто непростих механізмів роботи цих технологій.
декілька коментарів щодо запропонованих рішень до тестових завдань Олександра С.
//2. Знайти унікальні предмети, які вивчають студенти зі списку students
List uniqueSubjects — одне лише поєднання цих слів вже викликає сумнів в навичках опитуваного
//4. Відсортувати студентів за предметами відповідно до наведеного списку
// Варіант рішення через лямбди
помилка в логіці яка приводить до протилежного очікуваному результату
.mapToInt(o -> subjects.size() - subjects.indexOf(o)).sum()
індекс елемента визначається з кінця списку, хоча потрібно з початку
.mapToInt(o -> subjects.indexOf(o)).sum()
p.s. варіант рішення через лямбди і мапу видадуть обернені результати якщо задати вхідні дані з різними сумарними значеннями приорітетів.
// Варіант рішення через мапу
це рішення вірне однак можна покращити- разом із Java Streams в Сomparator додали набір дуже зручних вспоміжних методів.
наприклад, сomparator::comparing дозволяє уникнути дублювання визначення критерію сортування:
List sortedStudents = students.stream()
.sorted((student1, student2) -> {
int priority1 = student1.subjects.stream().mapToInt(subjectPriority::get).sum();
int priority2 = student2.subjects.stream().mapToInt(subjectPriority::get).sum();
return Integer.compare(priority1, priority2);
})
.toList();
List sortedStudents = students.stream()
.sorted(Comparator.comparing(student -> student.subjects.stream().mapToInt(subjectPriority::get).sum()))
.toList();
Скільки би ви плюсів не приписали джуну, в мене чомусь ця позиція аж ніяк не асоціюється з процесом якісного (або хоча б прийнятного) рев’ю коду.