#Spring
Начнем срывать покровы с самых базовых понятий Spring. Бин (bean) — это не что иное, как самый обычный объект. Разница лишь в том, что бинами принято называть те объекты, которые управляются Spring-ом и живут внутри его DI-контейнера. Бином является почти все в Spring — сервисы, контроллеры, репозитории, по сути все приложение состоит из набора бинов. Их можно регистрировать, получать в качестве зависимостей, проксировать, мокать и т.п.
Начнем срывать покровы с самых базовых понятий Spring. Бин (bean) — это не что иное, как самый обычный объект. Разница лишь в том, что бинами принято называть те объекты, которые управляются Spring-ом и живут внутри его DI-контейнера. Бином является почти все в Spring — сервисы, контроллеры, репозитории, по сути все приложение состоит из набора бинов. Их можно регистрировать, получать в качестве зависимостей, проксировать, мокать и т.п.
#practice
Сайты для тренировок на задачках перед собеседованием
LeetCode
Один из самых популярных сайтов для подготовки к техническим собеседованиям — leetcode.com. ... Он предназначен для тренировки, чтобы "набить руку" или вспомнить, как проходить собеседования после перерыва, когда базовые знания уже есть, но существуют проблемы со скоростью, тестированием или с выбором алгоритма.
https://leetcode.com/problemset/all/
CodeWars
Сodewars программирование — это сплошной фан. Зарабатывайте очки, повышайте свой рейтинг, создавайте кланы. Ресурс предлагает огромную подборку задач на более чем 20 языках программирования. На codewars вы сможете обсудить задачи с другими игроками, а также посмотреть альтернативные решения.
https://www.codewars.com/dashboard
Сайты для тренировок на задачках перед собеседованием
LeetCode
Один из самых популярных сайтов для подготовки к техническим собеседованиям — leetcode.com. ... Он предназначен для тренировки, чтобы "набить руку" или вспомнить, как проходить собеседования после перерыва, когда базовые знания уже есть, но существуют проблемы со скоростью, тестированием или с выбором алгоритма.
https://leetcode.com/problemset/all/
CodeWars
Сodewars программирование — это сплошной фан. Зарабатывайте очки, повышайте свой рейтинг, создавайте кланы. Ресурс предлагает огромную подборку задач на более чем 20 языках программирования. На codewars вы сможете обсудить задачи с другими игроками, а также посмотреть альтернативные решения.
https://www.codewars.com/dashboard
LeetCode
LeetCode - The World's Leading Online Programming Learning Platform
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
Сложность поиска элемента по индексу для Arraylist (get)
Anonymous Quiz
15%
O(n-1)
31%
O(n)
48%
O(1)
6%
O(2n)
#java
Класс Object и его методы
Все классы, даже те, которые мы добавляем в свой проект, являются неявно производными от класса Object. Поэтому все типы и классы могут реализовать те методы, которые определены в классе Object. Рассмотрим эти методы.
Метод toString
служит для получения представления данного объекта в виде строки. При попытке вывести строковое представления какого-нибудь объекта, как правило, будет выводиться полное имя класса.
Метод hashCode
позволяет задать некоторое числовое значение, которое будет соответствовать данному объекту или его хэш-код. По данному числу, например, можно сравнивать объекты.
Метод getClass
позволяет получить тип данного объекта.
Метод equals
сравнивает два объекта на равенство
Класс Object и его методы
Все классы, даже те, которые мы добавляем в свой проект, являются неявно производными от класса Object. Поэтому все типы и классы могут реализовать те методы, которые определены в классе Object. Рассмотрим эти методы.
Метод toString
служит для получения представления данного объекта в виде строки. При попытке вывести строковое представления какого-нибудь объекта, как правило, будет выводиться полное имя класса.
Метод hashCode
позволяет задать некоторое числовое значение, которое будет соответствовать данному объекту или его хэш-код. По данному числу, например, можно сравнивать объекты.
Метод getClass
позволяет получить тип данного объекта.
Метод equals
сравнивает два объекта на равенство
Что выведется на экран?
'you are doing well' [2:999]
'you are doing well' [2:999]
Anonymous Quiz
18%
'you are doing well'
8%
' '
59%
Index error.
16%
'u are doing well'
#java #definition
Что такое JSP?
Java Server Pages представляет технологию, которая позволяет создавать динамические веб-страницы. Изначально JSP (вместе с сервлетами) на заре развития Java EE являлись доминирующим подходом к веб-разработке на языке Java. И хотя в настоящее время они уступило свое место другой технологии - JSF, тем не менее JSP продолжают широко использоваться.
По сути Java Server Page или JSP представляет собой html-код с вкраплениями кода Java. В то же время станицы jsp - это не стандартные html-страницы. Когда приходит запрос к определенной странице JSP, то сервер обрабатывает ее, генерирует из нее код html и отправляет его клиенту. В итоге пользователь после обращения к странице JSP видит в своем браузере обычную html-страницу.
Что такое JSP?
Java Server Pages представляет технологию, которая позволяет создавать динамические веб-страницы. Изначально JSP (вместе с сервлетами) на заре развития Java EE являлись доминирующим подходом к веб-разработке на языке Java. И хотя в настоящее время они уступило свое место другой технологии - JSF, тем не менее JSP продолжают широко использоваться.
По сути Java Server Page или JSP представляет собой html-код с вкраплениями кода Java. В то же время станицы jsp - это не стандартные html-страницы. Когда приходит запрос к определенной странице JSP, то сервер обрабатывает ее, генерирует из нее код html и отправляет его клиенту. В итоге пользователь после обращения к странице JSP видит в своем браузере обычную html-страницу.
Результатом выполнения программы будет
Anonymous Quiz
5%
"String"
11%
String
19%
false
46%
Ошибка компиляции
19%
true
#UI
Как практиковать UI разработку?
1) Редизайн готовых идей. Всегда можно изменить сайт, иконку или логотип уже известного проекта. Вы безусловно набьете себе руку, но и можете сделать свои ошибки привычкой, если не будете брать реальные таски.
2) Фриланс. Всегда можно взять задание с настоящего заказа для тренировки, но если у вас уже есть какие-то навыки и уверенность в себе, можете попробовать выполнить такой заказ всерьез. Также берите тестовые задания в рекрутеров.
e. g: https://ain.ua/2015/12/31/19-frilans-ploshhadok-dlya-dizajnerov-i-programmistov/
3) Большинство рекрутеров делают тестовые задания по уже готовым паттернам. Вам остается только анализировать сайты где эти паттерны форсируются.
e. g: https://jangol.org.ua/blog/2020/04/10/kak-sdelat-testovoe-zadanie-ux-ui-dizajneru-primery-i-10-sovetov/
Как практиковать UI разработку?
1) Редизайн готовых идей. Всегда можно изменить сайт, иконку или логотип уже известного проекта. Вы безусловно набьете себе руку, но и можете сделать свои ошибки привычкой, если не будете брать реальные таски.
2) Фриланс. Всегда можно взять задание с настоящего заказа для тренировки, но если у вас уже есть какие-то навыки и уверенность в себе, можете попробовать выполнить такой заказ всерьез. Также берите тестовые задания в рекрутеров.
e. g: https://ain.ua/2015/12/31/19-frilans-ploshhadok-dlya-dizajnerov-i-programmistov/
3) Большинство рекрутеров делают тестовые задания по уже готовым паттернам. Вам остается только анализировать сайты где эти паттерны форсируются.
e. g: https://jangol.org.ua/blog/2020/04/10/kak-sdelat-testovoe-zadanie-ux-ui-dizajneru-primery-i-10-sovetov/
AIN.UA
19 фриланс-площадок для дизайнеров и программистов
#Algorithms
Binary search algorithm
In computer science, binary search, also known as half-interval search, logarithmic search, or binary chop, is a search algorithm that finds the position of a target value within a sorted array. Binary search compares the target value to the middle element of the array. If they are not equal, the half in which the target cannot lie is eliminated and the search continues on the remaining half, again taking the middle element to compare to the target value, and repeating this until the target value is found. If the search ends with the remaining half being empty, the target is not in the array.
Binary search algorithm
In computer science, binary search, also known as half-interval search, logarithmic search, or binary chop, is a search algorithm that finds the position of a target value within a sorted array. Binary search compares the target value to the middle element of the array. If they are not equal, the half in which the target cannot lie is eliminated and the search continues on the remaining half, again taking the middle element to compare to the target value, and repeating this until the target value is found. If the search ends with the remaining half being empty, the target is not in the array.
#java
Классы-оболочки
Классы-оболочки Java являются Объектным представлением восьми примитивных типов в Java. Все классы-оболочки в Java являются неизменными и final. Начиная с Java 5 автоупаковка и распаковка позволяет легко конвертировать примитивные типы в их соответствующие классы-оболочки и наоборот.
Разработчиками языка Java было принято очень умное решение отделить примитивные типы и классы-оболочки, указав при этом следующее:
1) Используйте классы-обертки, когда работаете с коллекциями.
2) Используйте примитивные типы для того, чтобы ваши программы были максимально просты.
Классы-оболочки
Классы-оболочки Java являются Объектным представлением восьми примитивных типов в Java. Все классы-оболочки в Java являются неизменными и final. Начиная с Java 5 автоупаковка и распаковка позволяет легко конвертировать примитивные типы в их соответствующие классы-оболочки и наоборот.
Разработчиками языка Java было принято очень умное решение отделить примитивные типы и классы-оболочки, указав при этом следующее:
1) Используйте классы-обертки, когда работаете с коллекциями.
2) Используйте примитивные типы для того, чтобы ваши программы были максимально просты.
Результатом выполнения программы будет
Anonymous Quiz
26%
Compile-time error
11%
Hello
53%
Hello World
10%
Hello Hello World
#java
Коллекции [1/3]
Queue: наследует интерфейс Collection и представляет функционал для структур данных в виде очереди
Deque: наследует интерфейс Queue и представляет функционал для двунаправленных очередей
List: наследует интерфейс Collection и представляет функциональность простых списков
Set: также расширяет интерфейс Collection и используется для хранения множеств уникальных объектов
SortedSet: расширяет интерфейс Set для создания сортированных коллекций
NavigableSet: расширяет интерфейс SortedSet для создания коллекций, в которых можно осуществлять поиск по соответствию
Map: предназначен для созданий структур данных в виде словаря, где каждый элемент имеет определенный ключ и значение. В отличие от других интерфейсов коллекций не наследуется от интерфейса Collection
Коллекции [1/3]
Коллекции образуют стройную и логичную систему. Во-первых, в основе всех коллекций лежит применение того или иного интерфейса, который определяет базовый функционал. Среди этих интерфейсов можно выделить следующие:Collection: базовый интерфейс для всех коллекций и других интерфейсов коллекций
Queue: наследует интерфейс Collection и представляет функционал для структур данных в виде очереди
Deque: наследует интерфейс Queue и представляет функционал для двунаправленных очередей
List: наследует интерфейс Collection и представляет функциональность простых списков
Set: также расширяет интерфейс Collection и используется для хранения множеств уникальных объектов
SortedSet: расширяет интерфейс Set для создания сортированных коллекций
NavigableSet: расширяет интерфейс SortedSet для создания коллекций, в которых можно осуществлять поиск по соответствию
Map: предназначен для созданий структур данных в виде словаря, где каждый элемент имеет определенный ключ и значение. В отличие от других интерфейсов коллекций не наследуется от интерфейса Collection
#java
Коллекции [2/3]
AbstractList: расширяет класс AbstractCollection и применяет интерфейс List, предназначен для создания коллекций в виде списков
AbstractSet: расширяет класс AbstractCollection и применяет интерфейс Set для создания коллекций в виде множеств
AbstractQueue: расширяет класс AbstractCollection и применяет интерфейс Queue, предназначен для создания коллекций в виде очередей и стеков
AbstractSequentialList: также расширяет класс AbstractList и реализует интерфейс List. Используется для создания связанных списков
AbstractMap: применяет интерфейс Map, предназначен для создания наборов по типу словаря с объектами в виде пары "ключ-значение"
Коллекции [2/3]
Интерфейсы из 1/3 частично реализуются абстрактными классами:AbstractCollection: базовый абстрактный класс для других коллекций, который применяет интерфейс Collection
AbstractList: расширяет класс AbstractCollection и применяет интерфейс List, предназначен для создания коллекций в виде списков
AbstractSet: расширяет класс AbstractCollection и применяет интерфейс Set для создания коллекций в виде множеств
AbstractQueue: расширяет класс AbstractCollection и применяет интерфейс Queue, предназначен для создания коллекций в виде очередей и стеков
AbstractSequentialList: также расширяет класс AbstractList и реализует интерфейс List. Используется для создания связанных списков
AbstractMap: применяет интерфейс Map, предназначен для создания наборов по типу словаря с объектами в виде пары "ключ-значение"
#java
Коллекции [3/3]
LinkedList: представляет связанный список
ArrayDeque: класс двунаправленной очереди, в которой мы можем произвести вставку и удаление как в начале коллекции, так и в ее конце
HashSet: набор объектов или хеш-множество, где каждый элемент имеет ключ - уникальный хеш-код
TreeSet: набор отсортированных объектов в виде дерева
LinkedHashSet: связанное хеш-множество
PriorityQueue: очередь приоритетов
HashMap: структура данных в виде словаря, в котором каждый объект имеет уникальный ключ и некоторое значение
TreeMap: структура данных в виде дерева, где каждый элемент имеет уникальный ключ и некоторое значение
Коллекции [3/3]
С помощью применения вышеописанных интерфейсов и абстрактных классов в Java реализуется широкая палитра классов коллекций - списки, множества, очереди, отображения и другие, среди которых можно выделить следующие:ArrayList: простой список объектов
LinkedList: представляет связанный список
ArrayDeque: класс двунаправленной очереди, в которой мы можем произвести вставку и удаление как в начале коллекции, так и в ее конце
HashSet: набор объектов или хеш-множество, где каждый элемент имеет ключ - уникальный хеш-код
TreeSet: набор отсортированных объектов в виде дерева
LinkedHashSet: связанное хеш-множество
PriorityQueue: очередь приоритетов
HashMap: структура данных в виде словаря, в котором каждый объект имеет уникальный ключ и некоторое значение
TreeMap: структура данных в виде дерева, где каждый элемент имеет уникальный ключ и некоторое значение
Схематично всю систему коллекций вкратце можно представить следующим образом:
Результатом выполнения программы будет
Anonymous Quiz
8%
Выведется 10
32%
Выведется 20
38%
Compile Time Error
22%
Runtime error, так как Foo.x is final.
#linux
Разработчик 7-Zip выпустил официальный билд для Linux спустя 22 года после выхода Windows-версии
Первая версия 7-Zip увидела свет 18 июля 1999 года, за относительно короткое время архиватор смог стать очень популярным. Относительный недостаток 7-Zip — наличие лишь версии для Windows (официальный клиент). Но сейчас, спустя всего 22 года, появился и вариант для Linux, официальный билд от разработчиков.
Версия 21.01 доступна как для Linux, так и для Windows. На сайте разработчика есть варианты для разных систем, включая 32-bit, 64-bit, x86 и ARM.
Linux-версия получила не меньше функций и возможностей, чем Windows-релиз. Единственное: пока — с 7-Zip можно работать лишь в командной строке, графического интерфейса нет. Возможно, его выпустят еще через пару десятков лет, кто знает.
Разработчик 7-Zip выпустил официальный билд для Linux спустя 22 года после выхода Windows-версии
Первая версия 7-Zip увидела свет 18 июля 1999 года, за относительно короткое время архиватор смог стать очень популярным. Относительный недостаток 7-Zip — наличие лишь версии для Windows (официальный клиент). Но сейчас, спустя всего 22 года, появился и вариант для Linux, официальный билд от разработчиков.
Версия 21.01 доступна как для Linux, так и для Windows. На сайте разработчика есть варианты для разных систем, включая 32-bit, 64-bit, x86 и ARM.
Linux-версия получила не меньше функций и возможностей, чем Windows-релиз. Единственное: пока — с 7-Zip можно работать лишь в командной строке, графического интерфейса нет. Возможно, его выпустят еще через пару десятков лет, кто знает.
#OOP
Overriding vs Overloading
Overriding implements Runtime Polymorphism whereas Overloading implements Compile time polymorphism.
The method Overriding occurs between superclass and subclass. Overloading occurs between the methods in the same class.
Overriding methods have the same signature i.e. same name and method arguments. Overloaded method names are the same but the parameters are different.
With Overloading, the method to call is determined at the compile-time. With overriding, the method call is determined at the runtime based on the object type.
If overriding breaks, it can cause serious issues in our program because the effect will be visible at runtime. Whereas if overloading breaks, the compile-time error will come and it’s easy to fix.
Overriding vs Overloading
Overriding implements Runtime Polymorphism whereas Overloading implements Compile time polymorphism.
The method Overriding occurs between superclass and subclass. Overloading occurs between the methods in the same class.
Overriding methods have the same signature i.e. same name and method arguments. Overloaded method names are the same but the parameters are different.
With Overloading, the method to call is determined at the compile-time. With overriding, the method call is determined at the runtime based on the object type.
If overriding breaks, it can cause serious issues in our program because the effect will be visible at runtime. Whereas if overloading breaks, the compile-time error will come and it’s easy to fix.