Что учить новичку в Android: Java vs Kotlin? Мобильный разработчик
https://www.youtube.com/watch?v=C04KnNj_1IU
https://www.youtube.com/watch?v=C04KnNj_1IU
YouTube
Что учить новичку в Android: Java vs Kotlin? Мобильный разработчик [Ru, Android]
Мой курс по Kotlin Multiplatform: https://boosty.to/mobiledev/posts/942f2091-f2fd-4462-8ed4-e7f03efe645a?share=post_link
Что внутри курса по Kotlin Multiplatform: https://youtu.be/3zwKxNebi0U
Один из самых частых вопросов новичков в Android это с чего мне…
Что внутри курса по Kotlin Multiplatform: https://youtu.be/3zwKxNebi0U
Один из самых частых вопросов новичков в Android это с чего мне…
Способы хранения деревьев в реляционных базах данных c использованием ORM Hibernate
Здравствуйте! В этой статье, я постараюсь кратко рассказать о четырёх достаточно известных способах хранения деревьев с указанием преимуществ и недостатков.
Подробнее
Здравствуйте! В этой статье, я постараюсь кратко рассказать о четырёх достаточно известных способах хранения деревьев с указанием преимуществ и недостатков.
Подробнее
💥Прими участие в онлайн-хакатоне «ТФ Альянс» с призовым фондом 500 000 рублей
С 11 по 13 марта 2022 платформа токенизации проектных ИТ-команд «ТФ Альянс» проведет онлайн-хакатон для студентов и молодых IT-специалистов. Участники мероприятия поборются за призовой фонд в размере 500 тысяч рублей, а также за 3-х дневное бесплатное проживание в HackerHome в Иннополисе, городе высоких технологий.
Командам предстоит за 48 часов решить одну из трех задач на выбор с применением Data Science, Python и Blockchain:
👉 разработать робота-ассистента на основе Telegram-бота для тематической буферизации сообщений;
👉 создать систему учета метрик для оценки эффективности работы специалистов и команд в проектных задачах;
👉 разработать инструмент для обеспечения взаимосвязи блокчейнов реестра транзакций и реестра состояний.
После разработки прототипа участники продемонстрируют его работоспособность перед членами жюри в рамках финальной питч-сессии.
🕛‼️Для участия нужно подать заявку до 23:59 9 марта 2022 года на сайте.
Результаты будут объявлены 13 марта.
Хакатон приурочен к вступлению «ТФ Альянс» в сообщество Инновационного научно-технологического центра МГУ «Воробьевы горы». Компания планирует работать над инновационными проектами в сфере ИТ-услуг.
С 11 по 13 марта 2022 платформа токенизации проектных ИТ-команд «ТФ Альянс» проведет онлайн-хакатон для студентов и молодых IT-специалистов. Участники мероприятия поборются за призовой фонд в размере 500 тысяч рублей, а также за 3-х дневное бесплатное проживание в HackerHome в Иннополисе, городе высоких технологий.
Командам предстоит за 48 часов решить одну из трех задач на выбор с применением Data Science, Python и Blockchain:
👉 разработать робота-ассистента на основе Telegram-бота для тематической буферизации сообщений;
👉 создать систему учета метрик для оценки эффективности работы специалистов и команд в проектных задачах;
👉 разработать инструмент для обеспечения взаимосвязи блокчейнов реестра транзакций и реестра состояний.
После разработки прототипа участники продемонстрируют его работоспособность перед членами жюри в рамках финальной питч-сессии.
🕛‼️Для участия нужно подать заявку до 23:59 9 марта 2022 года на сайте.
Результаты будут объявлены 13 марта.
Хакатон приурочен к вступлению «ТФ Альянс» в сообщество Инновационного научно-технологического центра МГУ «Воробьевы горы». Компания планирует работать над инновационными проектами в сфере ИТ-услуг.
👍1
О чем говорит ключевое слово final?
Модификатор final может применяться к переменным, параметрам методов, полям и методам класса или самим классам.
• Класс не может иметь наследников;
• Метод не может быть переопределен в классах наследниках;
• Поле не может изменить свое значение после инициализации;
• Параметры методов не могут изменять своё значение внутри метода;
• Локальные переменные не могут быть изменены после присвоения им значения.
Модификатор final может применяться к переменным, параметрам методов, полям и методам класса или самим классам.
• Класс не может иметь наследников;
• Метод не может быть переопределен в классах наследниках;
• Поле не может изменить свое значение после инициализации;
• Параметры методов не могут изменять своё значение внутри метода;
• Локальные переменные не могут быть изменены после присвоения им значения.
👍3🤯2
Forwarded from Академия Кода
Модификация ArrayList
Для добавления элементов используется add(). В скобочках указывается элемент, который мы хотим добавить. Чтобы удалить элемент, пишем remove(). В скобочках можно писать как сам элемент, который мы хотим удалить, так и его индекс.
#java
Подписывайтесь на канал 👉@coddy_academy
Для добавления элементов используется add(). В скобочках указывается элемент, который мы хотим добавить. Чтобы удалить элемент, пишем remove(). В скобочках можно писать как сам элемент, который мы хотим удалить, так и его индекс.
#java
Подписывайтесь на канал 👉@coddy_academy
👍5👎2😁1🤯1
Как создать REST API - Spring Boot и Ballerina
https://medium.com/ballerina-techblog/how-to-create-a-rest-api-spring-boot-and-ballerina-cc85477e22c8
https://medium.com/ballerina-techblog/how-to-create-a-rest-api-spring-boot-and-ballerina-cc85477e22c8
🔥 Senior Backend Hiring Week: оффер в EPAM за 24 часа и welcome-бонус!
Мы приглашаем опытных Java-разработчиков присоединиться к команде EPAM за 24 часа. Никаких многодневных интервью - мы ценим ваше и свое время, поэтому вы пообщаетесь только с теми, кто имеет непосредственное отношение к проектам. Если мы подходим друг другу, вы получите оффер в течение суток, а еще дополнительный welcome-бонус в размере оклада.
Преимущества работы в EPAM:
📌 Вы сможете поработать с крупными международными проектами из разных отраслей: медицины, финтеха, торговли, Life Sciences, Big Data.
📌 Мы помогаем пройти сертификацию (AWS, Azure, GCP) и предлагаем программы повышения квалификации – Delivery Management School и Solution Architecture School.
📌 Карьерный рост в треке Advanced Software Engineer, если вы любите писать код и не видите себя в роли менеджера.
📌 Гибкость в выборе проектов и задач, ориентированную на интересы и цели развития каждого разработчика.
Ждем вас в EPAM!
Зарегистрироваться: epa.ms/senior-backend-hiring-week-9
Мы приглашаем опытных Java-разработчиков присоединиться к команде EPAM за 24 часа. Никаких многодневных интервью - мы ценим ваше и свое время, поэтому вы пообщаетесь только с теми, кто имеет непосредственное отношение к проектам. Если мы подходим друг другу, вы получите оффер в течение суток, а еще дополнительный welcome-бонус в размере оклада.
Преимущества работы в EPAM:
📌 Вы сможете поработать с крупными международными проектами из разных отраслей: медицины, финтеха, торговли, Life Sciences, Big Data.
📌 Мы помогаем пройти сертификацию (AWS, Azure, GCP) и предлагаем программы повышения квалификации – Delivery Management School и Solution Architecture School.
📌 Карьерный рост в треке Advanced Software Engineer, если вы любите писать код и не видите себя в роли менеджера.
📌 Гибкость в выборе проектов и задач, ориентированную на интересы и цели развития каждого разработчика.
Ждем вас в EPAM!
Зарегистрироваться: epa.ms/senior-backend-hiring-week-9
Что такое статическое и динамическое связывание?
Присоединение вызова метода к телу метода называется связыванием. Если связывание проводится компилятором (компоновщиком) перед запуском программы, то оно называется статическим или ранним связыванием (
В свою очередь, позднее связывание (
Для всех методов
Присоединение вызова метода к телу метода называется связыванием. Если связывание проводится компилятором (компоновщиком) перед запуском программы, то оно называется статическим или ранним связыванием (
early binding
).В свою очередь, позднее связывание (
late binding
) это связывание, проводимое непосредственно во время выполнения программы, в зависимости от типа объекта. Позднее связывание также называют динамическим (dynamic
) или связыванием на стадии выполнения (runtime binding
). В языках, реализующих позднее связывание, должен существовать механизм определения фактического типа объекта во время работы программы, для вызова подходящего метода. Иначе говоря, компилятор не знает тип объекта, но механизм вызова методов определяет его и вызывает соответствующее тело метода. Механизм позднего связывания зависит от конкретного языка, но нетрудно предположить, что для его реализации в объекты должна включаться какая-то дополнительная информация.Для всех методов
Java
используется механизм позднего (динамического) связывания, если только метод не был объявлен как final
(приватные методы являются final
по умолчанию).👍11
Как применить регулярное выражение в Java?
Регулярные выражения – мощный механизм работы со строками. Здесь мы не будем говорить о регулярных выражениях в целом, поговорим об их использовании в Java. Это становится возможно благодаря пакету
Работа с регулярными выражениями в Java начинается с класса Pattern. Это представление самого выражения, без привязки к целевому тексту. Создать его можно компиляцией строки, с помощью фабричного метода
Matcher – регулярное выражение, примененное к конкретному тексту. Пораждается вызовом метода
Работа с экземпляром Matcher похожа на работу с итератором. Результат метода
В объекте шаблона
Регулярные выражения – мощный механизм работы со строками. Здесь мы не будем говорить о регулярных выражениях в целом, поговорим об их использовании в Java. Это становится возможно благодаря пакету
java.util.regex
стандартной библиотеки.Работа с регулярными выражениями в Java начинается с класса Pattern. Это представление самого выражения, без привязки к целевому тексту. Создать его можно компиляцией строки, с помощью фабричного метода
Pattern.compile()
. Паттерн иммутабельный и потокобезопасный.Matcher – регулярное выражение, примененное к конкретному тексту. Пораждается вызовом метода
Pattern.matches()
. Одним паттерном можно порождать несколько разных матчеров. В отличие от паттерна, матчер мутирует. Он не безопасен для многопоточной среды. Основные операции регулярных выражений – перебор совпадений, доступ к группам, замена – реализованы именно в этом классе.Работа с экземпляром Matcher похожа на работу с итератором. Результат метода
matches()
просто скажет, соответствует ли строка шаблону. Но после его вызова матчер поменяет состояние. Теперь, из него можно получить группы, позицию совпадения в тексте, а также произвести замену. В объекте шаблона
Pattern
реализованы несколько методов-сокращений, чтобы не использовать Matcher
явно. Например, просто проверить строку на соответствие выражению можно одним методом Pattern.matches()
.👍5
Forwarded from Академия Кода
Как сделать скриншот на Java?
Вы можете испольщовать
Посмотреть пример в онлайн редакторе.
Подписывайтесь на канал 👉@coddy_academy
#java
Вы можете испольщовать
Robot().createScreenCapture()
чтобы сделать скриншот экрана на Java.Посмотреть пример в онлайн редакторе.
Подписывайтесь на канал 👉@coddy_academy
#java
👍11
Можно ли достать параметры метода рефлекшеном?
По умолчанию – нет. Рефлекшн-информация о параметрах метода представляется объектами класса
Начиная с Java 8 у компилятора (
Классический пример, когда информация об именах может понадобиться – библиотека JSON сериализации Jackson. Параметры конструктора могут трактоваться ей как поля сериализационной формы.
До появления флага
По умолчанию – нет. Рефлекшн-информация о параметрах метода представляется объектами класса
Parameter
. По умолчанию их свойство name
синтетическое: "arg0"
, "arg1"
, и так далее. Метод isNamePresent
при этом возвращает false
, что значит что действительная информация об имени недоступна. Она не попадает даже в байт-код.Начиная с Java 8 у компилятора (
javac
) появилась опция -parameters
. В скомпилированный с этой опцией класс добавляются имена аргументов методов. Parameter#getName()
тогда возвращает уже настоящее имя.Классический пример, когда информация об именах может понадобиться – библиотека JSON сериализации Jackson. Параметры конструктора могут трактоваться ей как поля сериализационной формы.
До появления флага
-parameters
Jackson использовал для этого аннотации. Каждый параметр снабжался аннотацией @JsonProperty
. Значением аннотации передавалась строка, которая повторяла имя параметра. Эти аннотации затем можно было получить, вызвав Method#getParameterAnnotations()
.👍5
Platformer Tutorial - Java
A New Beginning - Episode #01
INPUTS - Episode #02
GAME LOOP - Episode #03
HOW TO MAKE A Game Loop in Java
IMAGES - Episode #04
ANIMATIONS - Episode #05
GAME LOOP 2.0 - Episode #06
PLAYER CLASS - Episode #07
Level Creation - Episode #08
https://www.youtube.com/playlist?list=PL4rzdwizLaxYmltJQRjq18a9gsSyEQQ-0
A New Beginning - Episode #01
INPUTS - Episode #02
GAME LOOP - Episode #03
HOW TO MAKE A Game Loop in Java
IMAGES - Episode #04
ANIMATIONS - Episode #05
GAME LOOP 2.0 - Episode #06
PLAYER CLASS - Episode #07
Level Creation - Episode #08
https://www.youtube.com/playlist?list=PL4rzdwizLaxYmltJQRjq18a9gsSyEQQ-0
Forwarded from Академия Кода
Дочерние классы в массивах
В Java полиморфизм позволяет нам помещать экземпляры разных классов, которые имеют общий родительский класс, вместе в массив или
Подписывайтесь на канал 👉@coddy_academy
#java
В Java полиморфизм позволяет нам помещать экземпляры разных классов, которые имеют общий родительский класс, вместе в массив или
ArrayList
. Например, если у нас есть родительский класс Animal с дочерними классами Cat, Dog и Pig, мы можем настроить массив с экземплярами каждого животного, а затем перебрать список животных, чтобы выполнить одно и то же действие над каждым.Подписывайтесь на канал 👉@coddy_academy
#java
👍3
getClass
Возвращает класс этого экземпляра. То есть результатом вызова
Подробнее
Возвращает класс этого экземпляра. То есть результатом вызова
.getClass()
переменной типа Foo
может быть как Foo.class
, так и .class
любого из его подклассов. Компилятор страхуется от ClassCastException
в рантайме подменой возвращаемого типа метода на Class<? extends Foo>
.Подробнее
Telegraph
А знаете ли Вы, что возвращает .getClass()?
Я думаю, почти любого Java разработчика когда-то спрашивали на собеседовании: «Какие есть методы у класса Object?» Меня, по крайней мере, спрашивали неоднократно. И, если в первый раз это было неожиданностью (кажется, забыл про clone), то потом я был уверен…
👍7
Forwarded from Программирование {BookFlow}
Оптимизируем Java-приложения с помощью GraalVM
В этой статье я приведу простые и не очень простые примеры, чтобы наглядно показать преимущества и особенности GraalVM.
Подробнее
В этой статье я приведу простые и не очень простые примеры, чтобы наглядно показать преимущества и особенности GraalVM.
Подробнее
👏3👍2🤔1
Дайте определение понятию «интерфейс». Какие модификаторы по умолчанию имеют поля и методы интерфейсов?
Ключевое слово
Начиная с
Интерфейс также может содержать и поля. В этом случае они автоматически являются публичными
Ключевое слово
interface
используется для создания полностью абстрактных классов. Основное предназначение интерфейса - определять каким образом мы можем использовать класс, который его реализует. Создатель интерфейса определяет имена методов, списки аргументов и типы возвращаемых значений, но не реализует их поведение. Все методы неявно объявляются как public
.Начиная с
Java 8
в интерфейсах разрешается размещать реализацию методов по умолчанию default
и статических static
методов.Интерфейс также может содержать и поля. В этом случае они автоматически являются публичными
public
, статическими static
и неизменяемыми final
.v👍5🔥1
equals, hashCode
Эти два метода придуманы для использования в Java Collections Framework и связаны общим контрактом, для соблюдения которого переопределять их необходимо вместе. Методы обязательно нужно переопределить чтобы эффективно использовать экземпляры как ключи в HashMap или
Контракт:
1. Если объекты
2.
3. Ничто не может быть
4.
По умолчанию
Подробная инструкция по переопределению этих методов описана в Effective Java Item 9 (больше деталей о волшебном числе 31 здесь).
Эти два метода придуманы для использования в Java Collections Framework и связаны общим контрактом, для соблюдения которого переопределять их необходимо вместе. Методы обязательно нужно переопределить чтобы эффективно использовать экземпляры как ключи в HashMap или
HashSet
. HashMap
работает тем эффективнее, чем «лучше» распределение хэшей.Контракт:
1. Если объекты
equals
, у них должны быть одинаковые hashCode
(не обязательно наоборот – коллизии допустимы!)2.
equals
должен быть отношением эквивалентности3. Ничто не может быть
equals(null)
4.
equals
и hashCode
должны возвращать одни и те же значения для одного и того же объекта при каждом последующем вызове, даже если состояние объекта изменилось. Это делает реализацию для изменяемых (mutable) объектов крайне сложной. По умолчанию
equals
сравнивает на ==
. С умолчательным hashCode
дела обстоят интереснее: он зависит от реализации JVM, и может быть неожиданным. Например в OpenJDK 7 это случайное число. Подробная инструкция по переопределению этих методов описана в Effective Java Item 9 (больше деталей о волшебном числе 31 здесь).
🔥4
Изучаем Java. Методы equals() и hashCode()
В этой статье мы рассмотрим два важных метода класса Object в Java - equals() и hashCode(), разберемся, зачем они нужны и расскажем об их использовании на конкретных примерах.
Подробнее
В этой статье мы рассмотрим два важных метода класса Object в Java - equals() и hashCode(), разберемся, зачем они нужны и расскажем об их использовании на конкретных примерах.
Подробнее
👍5
Может ли статический метод быть переопределён или перегружен?
Перегружен - да. Всё работает точно так же, как и с обычными методами - 2 статических метода могут иметь одинаковое имя, если количество их параметров или типов различается.
Переопределён - нет. Выбор вызываемого статического метода происходит при раннем связывании (на этапе компиляции, а не выполнения) и выполняться всегда будет родительский метод, хотя синтаксически переопределение статического метода - это вполне корректная языковая конструкция.
В целом, к статическим полям и методам рекомендуется обращаться через имя класса, а не объект.Может ли статический метод быть переопределён или перегружен?
Перегружен - да. Всё работает точно так же, как и с обычными методами - 2 статических метода могут иметь одинаковое имя, если количество их параметров или типов различается.
Переопределён - нет. Выбор вызываемого статического метода происходит при раннем связывании (на этапе компиляции, а не выполнения) и выполняться всегда будет родительский метод, хотя синтаксически переопределение статического метода - это вполне корректная языковая конструкция.
В целом, к статическим полям и методам рекомендуется обращаться через имя класса, а не объект.
Перегружен - да. Всё работает точно так же, как и с обычными методами - 2 статических метода могут иметь одинаковое имя, если количество их параметров или типов различается.
Переопределён - нет. Выбор вызываемого статического метода происходит при раннем связывании (на этапе компиляции, а не выполнения) и выполняться всегда будет родительский метод, хотя синтаксически переопределение статического метода - это вполне корректная языковая конструкция.
В целом, к статическим полям и методам рекомендуется обращаться через имя класса, а не объект.Может ли статический метод быть переопределён или перегружен?
Перегружен - да. Всё работает точно так же, как и с обычными методами - 2 статических метода могут иметь одинаковое имя, если количество их параметров или типов различается.
Переопределён - нет. Выбор вызываемого статического метода происходит при раннем связывании (на этапе компиляции, а не выполнения) и выполняться всегда будет родительский метод, хотя синтаксически переопределение статического метода - это вполне корректная языковая конструкция.
В целом, к статическим полям и методам рекомендуется обращаться через имя класса, а не объект.