Code IT
208 subscribers
15 photos
5 files
53 links
Download Telegram
Приветствую вас всех, дамы и господа!

Были неотложные семейные дела, теперь со всем разобрался, со следующей недели начинаем с видосами
🔥8🥰1
😁61
Обещанного, как известно, 3 года ждут. Надеюсь, что получится быстрее.

На самом деле все никак не могу себя заставить что-то начать делать. Лето, отпуск, все дела
Отпуск закончился, возвращаюсь на работу и к съемкам видео.

Не переключайтесь
👍4
Устраивает ли тебя нынешняя длительность видео? ~ 10 минут
Anonymous Poll
7%
Надо короче ~ 5 минут
65%
Надо длиннее ~ 15-20
28%
Все равно
📚 Коллекции в Java (List, Set, Map)

Коллекции — мощный инструмент в Java для работы с группами объектов. Основные интерфейсы коллекций:
- List: упорядоченный список элементов, может содержать дубликаты.
- Set: коллекция уникальных элементов, не допускает дубликатов.
- Map: структура данных, которая связывает ключи с соответствующими значениями.

📝 Задание:

Напишите программу, которая принимает на вход список чисел, удаляет дубликаты и сортирует его в порядке убывания.

#задание #интервью

@code_it
🔥3
Вечером будет пример решения
Задание: Напишите программу, которая принимает на вход список чисел, удаляет дубликаты и сортирует его в порядке убывания.

Решение:
import java.util.*;

public class Main {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(3, 7, 2, 7, 4, 3, 9, 10, 2);
Set<Integer> uniqueNumbers = new HashSet<>(numbers);

List<Integer> sortedList = new ArrayList<>(uniqueNumbers);
sortedList.sort(Collections.reverseOrder());

System.out.println(sortedList);
}
}

Объяснение: Сначала дубликаты удаляются с помощью HashSet, затем оставшиеся элементы сортируются в порядке убывания с использованием Collections.reverseOrder().

#решения #интервью

@code_it
🔥7👍1
📚 Введение в ООП: Инкапсуляция и Геттеры/Сеттеры

Теория:

Объектно-Ориентированное Программирование (ООП) — это подход к разработке программного обеспечения, который основывается на создании объектов, представляющих реальные сущности. Основные принципы ООП включают инкапсуляцию, наследование, полиморфизм и абстракцию.

Инкапсуляция — это принцип скрытия внутренней реализации объекта и предоставления доступа к его данным только через специально определенные методы. В Java это реализуется с помощью модификаторов доступа (private, protected, public) и методов, называемых геттерами и сеттерами.

- Геттеры (методы доступа) позволяют получить значение поля объекта.
- Сеттеры (методы изменения) позволяют изменить значение поля объекта, контролируя процесс изменения.

Пример инкапсуляции:
public class Person {
private String name;
private int age;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
if (age > 0) {
this.age = age;
}
}
}

Здесь name и age скрыты от прямого доступа, но доступны через методы getName, setName, getAge и setAge.

📝 Задание:

Создайте класс BankAccount с приватными полями accountNumber, balance и owner. Реализуйте геттеры и сеттеры для этих полей, а также метод deposit, который будет увеличивать баланс на заданную сумму, и метод withdraw, который будет уменьшать баланс, если на счете достаточно средств.

#задание #интервью

@code_it
🔥1
📚 Введение в ООП: Инкапсуляция и Геттеры/Сеттеры
Ответ
Задание: Создайте класс BankAccount с приватными полями accountNumber, balance и owner. Реализуйте геттеры и сеттеры для этих полей, а также метод deposit, который будет увеличивать баланс на заданную сумму, и метод withdraw, который будет уменьшать баланс, если на счете достаточно средств.
Решение:
    private String accountNumber;    private double balance;
private String owner;
public String getAccountNumber() { return accountNumber;
}
public void setAccountNumber(String accountNumber) { this.accountNumber = accountNumber;
}
public double getBalance() { return balance;
}
public void setBalance(double balance) { this.balance = balance;
}
public String getOwner() { return owner;
}
public void setOwner(String owner) { this.owner = owner;
}
public void deposit(double amount) { if (amount > 0) {
balance += amount; }
}
public boolean withdraw(double amount) { if (amount > 0 && balance >= amount) {
balance -= amount; return true;
} else { return false;
} }
}

Объяснение:
В этом решении мы создали класс BankAccount с тремя приватными полями: accountNumber, balance и owner. Для каждого из них были реализованы геттеры и сеттеры, которые позволяют безопасно получать и изменять значения этих полей.
Метод deposit увеличивает баланс на указанную сумму, если она больше нуля. Метод withdraw проверяет, достаточно ли средств на счете, и если их хватает, уменьшает баланс и возвращает true; в противном случае метод возвращает false, и операция не выполняется. Такой подход обеспечивает контроль над доступом к данным и соблюдает принцип инкапсуляции.

#решения #интервью

@code_it
👍21
📚Наследование и Полиморфизм в Java

Теория:

Наследование и полиморфизм — два ключевых принципа ООП.

Наследование позволяет создавать новый класс на основе существующего. Новый класс, называемый подклассом (или дочерним классом), наследует поля и методы своего суперкласса (родительского класса). Это позволяет переиспользовать код и упрощать разработку. В Java наследование реализуется с помощью ключевого слова extends.

Пример:
class Animal {
void sound() {
System.out.println("Some sound...");
}
}

class Dog extends Animal {
@Override
void sound() {
System.out.println("Bark");
}
}

В этом примере Dog наследует от Animal и переопределяет метод sound.

Полиморфизм позволяет объектам разных классов обрабатывать вызовы методов по-разному. В Java это достигается через переопределение методов. Один и тот же метод может вести себя по-разному в зависимости от объекта, который его вызывает.

Пример:
Animal myAnimal = new Dog();
myAnimal.sound(); // Выведет "Bark"

Здесь переменная myAnimal типа Animal может ссылаться на объект Dog, и метод sound вызовет реализацию из класса Dog.

📝 Задание:

Создайте классы Shape (родительский класс) с методом area() и два дочерних класса: Rectangle и Circle. В каждом дочернем классе переопределите метод area() для расчета площади прямоугольника и круга соответственно. Затем создайте массив объектов Shape, содержащий экземпляры Rectangle и Circle, и выведите площади всех фигур.


#задание #интервью

@code_it
👍2
📚 Наследование и Полиморфизм в Java
🔍 Ответ
Задание: Создайте классы Shape (родительский класс) с методом area() и два дочерних класса: Rectangle и Circle. В каждом дочернем классе переопределите метод area() для расчета площади прямоугольника и круга соответственно. Затем создайте массив объектов Shape, содержащий экземпляры Rectangle и Circle, и выведите площади всех фигур.
Решение:
abstract class Shape {    abstract double area();
}
class Rectangle extends Shape { private double width;
private double height;
public Rectangle(double width, double height) { this.width = width;
this.height = height; }
@Override
double area() { return width * height;
}}
class Circle extends Shape {
private double radius;
public Circle(double radius) { this.radius = radius;
}
@Override double area() {
return Math.PI * radius * radius; }
}
public class Main { public static void main(String[] args) {
Shape[] shapes = { new Rectangle(5, 10),
new Circle(7), new Rectangle(2, 3),
new Circle(4) };
for (Shape shape : shapes) {
System.out.println("Площадь: " + shape.area()); }
}}

Объяснение:

Здесь Shape является абстрактным классом с абстрактным методом area(), который должен быть реализован в каждом дочернем классе. Класс Rectangle переопределяет метод area() для расчета площади прямоугольника, умножая ширину на высоту. Класс Circle реализует метод area() для расчета площади круга по формуле πr².
В Main создается массив объектов Shape, каждый из которых ссылается либо на Rectangle, либо на Circle. Благодаря полиморфизму, вызов метода area() для каждого элемента массива вызывает соответствующую реализацию метода в дочернем классе.

#решение #интервью

@code_it
👍3
Видео разбор на YouTube будет доступен через 20 минут
📚 Абстрактные классы и интерфейсы в Java

Теория:

В Java абстрактные классы и интерфейсы используются для создания контрактов, которые классы должны реализовать. Это помогает проектировать гибкие и расширяемые архитектуры.

Абстрактные классы:
- Абстрактный класс — это класс, который не может быть создан напрямую. Он предназначен для наследования другими классами.
- Абстрактные классы могут содержать как абстрактные методы (без реализации), так и методы с реализацией.
- Абстрактный метод должен быть реализован в подклассе, который наследует абстрактный класс.

Пример:
abstract class Animal {
abstract void sound();

void sleep() {
System.out.println("Animal is sleeping");
}
}

Интерфейсы:
- Интерфейс — это контракт, который класс может реализовать. В интерфейсе все методы по умолчанию являются абстрактными (до Java 8).
- Класс может реализовывать несколько интерфейсов, что позволяет реализовать множественное наследование.
- С Java 8 интерфейсы могут содержать методы с реализацией по умолчанию и статические методы.

Пример:
interface Movable {
void move();
}

Ключевое различие между абстрактным классом и интерфейсом состоит в том, что абстрактный класс предназначен для отношений "is-a" (например, Dog — это Animal), а интерфейс для отношений "can-do" (например, Car может двигаться, следовательно, реализует Movable).

📝 Задание:

Создайте абстрактный класс Vehicle с абстрактным методом move(). Затем создайте интерфейс Fuelable с методом refuel(). Реализуйте два класса — Car и Bicycle. Car должен наследовать Vehicle и реализовывать интерфейс Fuelable, а Bicycle — просто наследовать Vehicle. В классе Main создайте объекты Car и Bicycle, вызовите для них методы move() и refuel() (если применимо).

#задание #интервью

@code_it
🔥3
📚 Абстрактные классы и интерфейсы в Java

🔍 Ответ

Задание: Создайте абстрактный класс Vehicle с абстрактным методом move(). Затем создайте интерфейс Fuelable с методом refuel(). Реализуйте два класса — Car и Bicycle. Car должен наследовать Vehicle и реализовывать интерфейс Fuelable, а Bicycle — просто наследовать Vehicle. В классе Main создайте объекты Car и Bicycle, вызовите для них методы move() и refuel() (если применимо).

Решение:
abstract class Vehicle {
abstract void move();
}

interface Fuelable {
void refuel();
}

class Car extends Vehicle implements Fuelable {
@Override
void move() {
System.out.println("Машина едет");
}

@Override
public void refuel() {
System.out.println("Заправляем машину");
}
}

class Bicycle extends Vehicle {
@Override
void move() {
System.out.println("Велосипед едет");
}
}

public class Main {
public static void main(String[] args) {
Vehicle car = new Car();
Vehicle bicycle = new Bicycle();

car.move();
if (car instanceof Fuelable) {
((Fuelable) car).refuel();
}

bicycle.move();
if (bicycle instanceof Fuelable) {
((Fuelable) bicycle).refuel();
}
}
}

Объяснение:

В этом решении абстрактный класс Vehicle определяет метод move(), который реализуется в классах Car и Bicycle. Интерфейс Fuelable содержит метод refuel(), который реализован только в классе Car, так как велосипеды не нуждаются в заправке.

В методе main создаются объекты Car и Bicycle, после чего вызываются их методы move() и, если объект реализует интерфейс Fuelable, — метод refuel().

#решения #интервью

@code_it
📚 Исключения и их обработка в Java

Теория:

В процессе выполнения программы могут возникать ошибки, которые приводят к ее аварийному завершению. Для обработки таких ситуаций в Java используются исключения (Exceptions). Исключения позволяют отделить код обработки ошибок от основного кода программы, что делает её более чистой и понятной.

Исключения — это объекты, которые создаются при возникновении ошибки и могут быть перехвачены и обработаны программой.

Основные типы исключений:
- Checked Exception — проверяемые исключения, которые должны быть либо обработаны, либо объявлены в сигнатуре метода через throws. Пример: IOException.
- Unchecked Exception — непроверяемые исключения, которые происходят во время выполнения программы и не требуют обязательной обработки. Пример: NullPointerException, ArrayIndexOutOfBoundsException.

Для обработки исключений используется конструкция try-catch-finally:

try {
// Код, который может вызвать исключение
} catch (ExceptionType e) {
// Обработка исключения
} finally {
// Код, который выполнится в любом случае
}

В блоке finally обычно размещается код, который должен выполниться независимо от того, возникло исключение или нет (например, закрытие ресурсов).

📝 Задание:

Напишите программу, которая запрашивает у пользователя ввод целого числа и выводит его удвоенное значение. Если пользователь вводит не число, программа должна корректно обработать исключение и вывести сообщение об ошибке. Обязательно используйте блоки try, catch и finally.


#задание #интервью

@code_it
👍3