Ответ -
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍1🔥1
Abstract Factory позволяет выбрать конкретную реализацию фабрики из семейства возможных фабрик. Создает семейство связанных объектов. Легко расширять.
Для примера, создадим нужные классы и интерфейсы
public class WindowsButton implements Button {
}
public class WindowsSelect implements Select {
}
public class WindowsTextField implements TextField {
}
public interface GUIFactory {
Button createButton();
TextField createTextField();
Select createSelect();
}На основе текущей операционной системы мы будем использовать фабрику, в нашем случае WindowsGUIFactory, для создания элементов на экране. WindowsGUIFactory возвращает элементы только для windows os. Если бы текущая ос была mac, то мы бы использовали фабрику MacGUIFactory
public class WindowsGUIFactory implements GUIFactory {
public WindowsGUIFactory() {
System.out.println("Creating gui factory for Windows OS");
}
public Button createButton() {
System.out.println("Creating Button for Windows OS");
return new WindowsButton();
}
public TextField createTextField() {
System.out.println("Creating TextField for Windows OS");
return new WindowsTextField();
}
public Select createSelect() {
System.out.println("Creating Select for Windows OS");
return new WindowsSelect();
}
}Please open Telegram to view this post
VIEW IN TELEGRAM
👍4👏3🔥1
История развития построения веб-приложений на языке программирования Java с примерами их использования на временном промежутке от появления спецификации сервлетов до сегодняшнего дня.
🔗 Ссылка на статью
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2🔥1👏1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁2🔥1
Дана строка s, состоящая из слов и пробелов. Верните длину последнего слова в строке.
Слово — это максимальная подстрока, состоящая только из символов, не являющихся пробелами.
Пример:
Input: s = "Hello World"
Output: 5
Explanation: The last word is "World" with length 5.
Сначала мы пытаемся найти последнее слово, начиная с конца строки. Итерируем строку в обратном порядке, пропуская пробелы. Когда мы встречаем первый непробельный символ, мы знаем, что нашли последний символ последнего слова.
После того как последнее слово найдено, мы подсчитываем его длину, начиная с его последнего символа. Здесь также можно использовать цикл.
Используя обратную итерацию и пропуск пробелов, определяется начало и конец последнего слова в строке для вычисления его длины.
class Solution {
public int lengthOfLastWord(String s) {
int end = s.length() - 1;
while (end >= 0 && s.charAt(end) == ' ') {
end--;
}
int start = end;
while (start >= 0 && s.charAt(start) != ' ') {
start--;
}
return end - start;
}
}Please open Telegram to view this post
VIEW IN TELEGRAM
❤4🔥2👍1
Ответ -
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍2🔥1
Проверка данных класса (bean) в java тема не новая, но актуальная и здесь я объединю различные аспекты: валидацию данных в рамках JSR-303, покажу как это сделать чисто в Java и с использованием Spring, как делать в стандартном приложении и в Web.
🔗 Ссылка на статью
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2👏2🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁3🔥1
Паттерн проектирования Builder (Строитель) используется для создания сложных объектов пошагово. Он позволяет создавать различные представления одного и того же типа объекта, избегая при этом большого количества параметров в конструкторах. Это особенно полезно, когда объект имеет много опциональных параметров или когда процесс создания объекта сложен.
public static class EmployeeBuilder {
private String name;
private String company;
private boolean hasCar;
public EmployeeBuilder setName(String name) {
this.name = name;
return this;
}
public EmployeeBuilder setCompany(String company) {
this.company = company;
return this;
}
public EmployeeBuilder setHasCar(boolean hasCar) {
this.hasCar = hasCar;
return this;
}
public Employee build() {
return new Employee(this);
}
}Далее давайте посмотрим, как же использовать паттерн Builder.
class TestBuilder {
public static void main(String[] args) {
Employee employee = new Employee.EmployeeBuilder("Maksim", "Amazon").setHasCar(true).build();
}
}Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥1👏1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🥰2😁2🔥1
Именно его докладами открываются Java-конференции по всему миру. Именно он отвечает на вопросы сообщества, делает Spring Tips на YouTube, именно его «This week in Spring» мы читаем каждую неделю и многое другое.
🔗 Ссылка на статью
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍2🔥1
Паттерн проектирования Prototype (Прототип) используется для создания новых объектов путем копирования существующих. Этот паттерн полезен, когда создание нового экземпляра объекта является более затратным по времени или ресурсам, чем его копирование. Прототип позволяет избежать сложного процесса инициализации объектов, предоставляя возможность клонировать уже существующие экземпляры.
// Интерфейс прототипа
interface Prototype {
Prototype clone();
}
// Конкретный прототип
class Book implements Prototype {
private String title;
private String author;
public Book(String title, String author) {
this.title = title;
this.author = author;
}
@Override
public Prototype clone() {
return new Book(this.title, this.author); // Клонируем объект
}
}
public class Main {
public static void main(String[] args) {
// Создаем оригинальный объект Book
Book originalBook = new Book("1984", "George Orwell");
// Клонируем оригинальный объект
Book clonedBook = (Book) originalBook.clone();
// Изменяем заголовок клонированной книги
// Это не повлияет на оригинальный объект
System.out.println("Original: " + originalBook);
System.out.println("Cloned: " + clonedBook);
}
}
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2👏2🔥1
Ответ -
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5👏3🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
🤩3❤1🔥1👏1
Leetcode. Задача 46. Permutations. (medium)
Дан массив уникальных чисел, необходимо вернуть все возможные перестановки. Ответ можно сформировать в любом порядке.
Пример:
👨💻 Алгоритм:
1⃣ Объявим функцию для рекурсии и не забудем добавить условие для выхода из нее;
2⃣ В цикле начинаем формировать возможные перестановки, добавляя в массив по одному элементу;
3⃣ Затем вызываем этот же метод, передавая получившийся массив;
4️⃣ Далее убираем добавленный элемент для добавления следующих элементов из начального массива.
😎 Решение:
🖥 Java Developer | Backend | #⃣ #задача #java
Дан массив уникальных чисел, необходимо вернуть все возможные перестановки. Ответ можно сформировать в любом порядке.
Пример:
Input: [1,2,3]
Output: [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
class Solution {
public List<List<Integer>> permute(int[] nums) {
List<List<Integer>> list = new ArrayList<>();
backtrack(list, new ArrayList<>(), nums);
return list;
}
private void backtrack(List<List<Integer>> list, List<Integer> tempList, int[] nums) {
if (tempList.size() == nums.length) {
list.add(new ArrayList<>(tempList));
} else {
for (int i = 0; i < nums.length; i++) {
if (tempList.contains(nums[i])) continue;
tempList.add(nums[i]);
backtrack(list, tempList, nums);
tempList.remove(tempList.size() - 1);
}
}
}
}Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥2🤩2
Ответ -
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍1🔥1
Паттерн проектирования Adapter (Адаптер) используется для приведения интерфейса одного класса в соответствие с интерфейсом, ожидаемым клиентом. Этот паттерн позволяет несовместимым интерфейсам работать вместе, обеспечивая возможность интеграции старых и новых компонентов.
// Целевой интерфейс
interface Target {
void request();
}
// Адаптируемый класс
class Adaptee {
public void specificRequest() {
System.out.println("Called specificRequest() from Adaptee.");
}
}
// Адаптер
class Adapter implements Target {
private Adaptee adaptee;
public Adapter(Adaptee adaptee) {
this.adaptee = adaptee;
}
@Override
public void request() {
// Перенаправляем вызов на метод адаптируемого класса
adaptee.specificRequest();
}
}
public class Main {
public static void main(String[] args) {
// Создаем адаптируемый класс
Adaptee adaptee = new Adaptee();
// Создаем адаптер, передавая адаптируемый объект
Target target = new Adapter(adaptee);
// Теперь клиент может использовать адаптер как целевой интерфейс
target.request();
}
}
Паттерн Adapter является полезным инструментом для обеспечения совместимости между различными компонентами системы. Он позволяет эффективно интегрировать устаревшие или несовместимые классы, что делает его важным паттерном в разработке программного обеспечения.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥2👏1
В наших проектах мы используем микросервисную архитектуру. При возникновении узких мест в производительности достаточно много времени тратится на мониторинг и разбор логов. При логировании таймингов отдельных операций в лог-файл, как правило, сложно понять что привело к вызову этих операций, отследить последовательность действий или смещение во времени одной операции относительно другой в разных сервисах.
🔗 Ссылка на статью
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6🔥1👏1
Please open Telegram to view this post
VIEW IN TELEGRAM
👏7😁2🔥1
Leetcode. Задача 169. Majority Element. (easy)
Дан массив nums размера n, верните элемент большинства.
Элемент большинства — это элемент, который встречается более чем ⌊n / 2⌋ раз. Можно предположить, что элемент большинства всегда существует в массиве.
Пример:
👨💻 Алгоритм:
1⃣ Использование HashMap для подсчета:
Создайте HashMap для отслеживания количества каждого элемента в массиве.
2⃣ Подсчет вхождений элементов:
Пройдите по массиву nums, увеличивая счетчик в HashMap для каждого элемента.
3⃣ Поиск элемента большинства:
Определите элемент большинства, просмотрев HashMap и найдя ключ с максимальным значением, которое должно быть больше ⌊n / 2⌋
😎 Решение:
Дан массив nums размера n, верните элемент большинства.
Элемент большинства — это элемент, который встречается более чем ⌊n / 2⌋ раз. Можно предположить, что элемент большинства всегда существует в массиве.
Пример:
Input: nums = [1,1,2,2,1]
Output: 1
Создайте HashMap для отслеживания количества каждого элемента в массиве.
Пройдите по массиву nums, увеличивая счетчик в HashMap для каждого элемента.
Определите элемент большинства, просмотрев HashMap и найдя ключ с максимальным значением, которое должно быть больше ⌊n / 2⌋
class Solution {
public int majorityElement(int[] nums) {
HashMap<Integer, Integer> hash = new HashMap<>();
int res = 0;
int majority = 0;
for (int n : nums) {
hash.put(n, 1 + hash.getOrDefault(n, 0));
if (hash.get(n) > majority) {
res = n;
majority = hash.get(n);
}
}
return res;
}
}Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥2👏1