Основы Kotlin — руководство
Подборка статей по Kotlin, которая будет полезна не только новичкам, но и тем, кто уже освоил основы языка. Категории:
— Основы для начинающих, статьи для разработчиков с опытом и профессионалов.
— Библиотеки для Android.
— Инструменты.
— Советы и фишки:
https://androidgeek.co/mastering-kotlin-a-comprehensive-guide-c70220318962
#kotlin
@javatg
Подборка статей по Kotlin, которая будет полезна не только новичкам, но и тем, кто уже освоил основы языка. Категории:
— Основы для начинающих, статьи для разработчиков с опытом и профессионалов.
— Библиотеки для Android.
— Инструменты.
— Советы и фишки:
https://androidgeek.co/mastering-kotlin-a-comprehensive-guide-c70220318962
#kotlin
@javatg
#вопросы_с_собеседований
Как одной строкой преобразовать HashSet в ArrayList?
Ответ на картинке.
@javatg
Как одной строкой преобразовать HashSet в ArrayList?
Ответ на картинке.
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - codenameone/CodenameOne: Cross-platform framework for building truly native mobile apps with Java or Kotlin. Write Once…
Cross-platform framework for building truly native mobile apps with Java or Kotlin. Write Once Run Anywhere support for iOS, Android, Desktop & Web. - codenameone/CodenameOne
Язык программирования Kotlin часто ассоциируется с мобильной разработкой для Android и это неудивительно, учитывая что он принят Google как официальный язык разработки, и принес множество необходимых и удобных языковых конструкций и кооперативной многозадачности, при этом сохраняя совместимость на уровне байт-кода с ранними версиями JVM.
Но применимость языка существенно выше и имеющиеся библиотеки (как созданные для Java, так и разработанные специально для Kotlin) позволяют создавать обычные приложения (например, на JavaFX или с использованием платформенных графических библиотек и Kotlin Native), а также создавать код для бэкэнда c подключениям к базам данных, кэшам, очередям сообщений и т.д.
При этом, если для мобильной разработки проблем с поддержкой многоязычных сообщений не возникает (благодаря механизму ресурсов, в том числе строк, которые могут быть переопределены для конкретной локали), то для бэкэнда это становится нетривиальной задачей. В этой статье мы обсудим несколько подходов для создания бэкэнда с поддержкой нескольких языков.
▪ Читать
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Модификаторы видимости — это ключевые слова, которыми определяется уровень доступности элементов: классов, объектов, интерфейсов, конструкторов, функций, свойств и их сеттеров.
В Kotlin имеется четыре модификатора видимости. А в Java их три: недоступен
internal
. В Kotlin видимость по умолчанию — public
, в Java — private
.▪ Читать
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Для Android-разработчиков и начинающих, кто хочет писать код на Kotlin у Android Developers есть бесплатный курс по основам. Материалы курса включают в себя и домашние задания. В зависимости от ваших знаний вы можете проходить программу, выбирая только те разделы, которые интересны вам:
https://developer.android.com/courses/kotlin-bootcamp/overview
#kotlin
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Top it channels
🖥 Linux
@linux -топ фишки, гайды, уроки по работе с Linux.
@linux_read - бесплатные книги linux
@linux chat - чат linux для обучения и помощи.
@linuxacadd - linux с нуля
🖥 SQL базы данных
@sqllib - библиотека баз данных
@sqlhub - повышение эффективности кода с грамотным использованием бд.
@chat_sql - чат изучения бд.
databooks - лучшие бесплатные книги по базам данных
🖥 Python
@pythonl - гайды по Python.
@pro_python_code – Python практика.
@python_job_interview – подготовка к Python собеседованию.
@python_testit - проверочные тесты на python
@pythonlbooks - современные книги Python
@python_djangojobs - работа для Python программистов
@python_django_work - чат обсуждения вакансий
🖥 Java
@javatg - выучить Java с senior разработчиком по профессиональной методике.
@javachats - чат для ответов на вопросы по Java
@java_library - библиотека книг Java
@android_its - Android разработка
@java_quizes - тесты Java
@Java_workit - работа Java
@progersit - шпаргалки ит
👣 Golang
@Golang_google - восхитительный язык от Google, мощный и перспективный.
@golang_interview - вопросы и ответы с собеседований по Go. Для всех уровней разработчиков.
@golangtests - интересные тесты и задачи GO
@golangl - чат изучающих Go
@GolangJobsit - отборные вакансии и работа GO
@golang_jobsgo - чат для ищущих работу.
@golang_books - полезные книги Golang
@golang_speak - обсуждение языка Go
⭐️ Нейронные сети
@data_analysis_ml - data science
@vistehno - chatgpt ведет блог, решает любые задачи и отвечает на любые ваши вопросы.
@aigen - сети для генерации картинок. видео, музыки и многого другого.
@neural – погружение в нейросети.
🖥 Machine learning
@ai_ml – погружение в нейросети, ai, Chatgpt, midjourney, машинное обучение.
@machinelearning_ru – машинное обучении на русском от новичка до профессионала.
@machinelearning_interview – подготовка к собеседованию.
@datascienceiot – бесплатные книги Machine learning
@ArtificialIntelligencedl – канал о искусственном интеллекте
@machinee_learning – чат о машинном обучении
@datascienceml_jobs - работа ds, ml
@Machinelearning_Jobs - чат работы мл
🖥 Javascript / front
@react_tg - - 40,14% разработчиков сайтов использовали React в 2022 году - это самая популярная библиотека для создания сайтов.
@javascript -канал для JS и FrontEnd разработчиков. Лучшие практики и примеры кода. Туториалы и фишки JS
@Js Tests - каверзные тесты JS
@hashdev - погружение в web разработку.
@javascriptjobjs - отборные вакансии и работа FrontEnd.
@jsspeak - чат поиска FrontEnd работы.
👷♂️ IT работа
@hr_itwork - кураторский список актуальных ит-ваканнсии
🤡It memes
@memes_prog - ит-мемы
⚙️ Rust
@rust_code - Rust избавлен от болевых точек, которые есть во многих современных яп
@rust_chats - чат rust
#️⃣ c# c++
C# - объединяет лучшие идеи современных языков программирования
@csharp_cplus чат
С++ - Универсальность. Возможно, этот главный плюс C++.
📓 Книги
@programming_books_it - большая библиотека. программиста
@datascienceiot -ds книги
@pythonlbooks - python библиотека.
@golang_books - книги Golang
@frontendbooksit - front книги
@progersit - ит-шпаргалки
@linux_read - Linux books
@java_library - Java books
🖥 Github
@github_code - лучшие проекты с github
@bigdatai - инструменты по работе с данными
🍏 🖥 Mobile dev
@mobdevelop
🖥 Android
@android_its
🖥 Devops
Devops - специалист общего профиля, которому нужны обширные знания в области разработки.
📢 English for coders
@english_forprogrammers - Английский для программистов
🔢 Math
@dsmath - математика программиста
💡 ChatGpt bot
@Chatgpturbobot - бесплатный бот ChatGpt
@linux -топ фишки, гайды, уроки по работе с Linux.
@linux_read - бесплатные книги linux
@linux chat - чат linux для обучения и помощи.
@linuxacadd - linux с нуля
@sqllib - библиотека баз данных
@sqlhub - повышение эффективности кода с грамотным использованием бд.
@chat_sql - чат изучения бд.
databooks - лучшие бесплатные книги по базам данных
@pythonl - гайды по Python.
@pro_python_code – Python практика.
@python_job_interview – подготовка к Python собеседованию.
@python_testit - проверочные тесты на python
@pythonlbooks - современные книги Python
@python_djangojobs - работа для Python программистов
@python_django_work - чат обсуждения вакансий
@javatg - выучить Java с senior разработчиком по профессиональной методике.
@javachats - чат для ответов на вопросы по Java
@java_library - библиотека книг Java
@android_its - Android разработка
@java_quizes - тесты Java
@Java_workit - работа Java
@progersit - шпаргалки ит
@Golang_google - восхитительный язык от Google, мощный и перспективный.
@golang_interview - вопросы и ответы с собеседований по Go. Для всех уровней разработчиков.
@golangtests - интересные тесты и задачи GO
@golangl - чат изучающих Go
@GolangJobsit - отборные вакансии и работа GO
@golang_jobsgo - чат для ищущих работу.
@golang_books - полезные книги Golang
@golang_speak - обсуждение языка Go
@data_analysis_ml - data science
@vistehno - chatgpt ведет блог, решает любые задачи и отвечает на любые ваши вопросы.
@aigen - сети для генерации картинок. видео, музыки и многого другого.
@neural – погружение в нейросети.
@ai_ml – погружение в нейросети, ai, Chatgpt, midjourney, машинное обучение.
@machinelearning_ru – машинное обучении на русском от новичка до профессионала.
@machinelearning_interview – подготовка к собеседованию.
@datascienceiot – бесплатные книги Machine learning
@ArtificialIntelligencedl – канал о искусственном интеллекте
@machinee_learning – чат о машинном обучении
@datascienceml_jobs - работа ds, ml
@Machinelearning_Jobs - чат работы мл
@react_tg - - 40,14% разработчиков сайтов использовали React в 2022 году - это самая популярная библиотека для создания сайтов.
@javascript -канал для JS и FrontEnd разработчиков. Лучшие практики и примеры кода. Туториалы и фишки JS
@Js Tests - каверзные тесты JS
@hashdev - погружение в web разработку.
@javascriptjobjs - отборные вакансии и работа FrontEnd.
@jsspeak - чат поиска FrontEnd работы.
👷♂️ IT работа
@hr_itwork - кураторский список актуальных ит-ваканнсии
🤡It memes
@memes_prog - ит-мемы
⚙️ Rust
@rust_code - Rust избавлен от болевых точек, которые есть во многих современных яп
@rust_chats - чат rust
#️⃣ c# c++
C# - объединяет лучшие идеи современных языков программирования
@csharp_cplus чат
С++ - Универсальность. Возможно, этот главный плюс C++.
📓 Книги
@programming_books_it - большая библиотека. программиста
@datascienceiot -ds книги
@pythonlbooks - python библиотека.
@golang_books - книги Golang
@frontendbooksit - front книги
@progersit - ит-шпаргалки
@linux_read - Linux books
@java_library - Java books
@github_code - лучшие проекты с github
@bigdatai - инструменты по работе с данными
@mobdevelop
@android_its
Devops - специалист общего профиля, которому нужны обширные знания в области разработки.
@english_forprogrammers - Английский для программистов
🔢 Math
@dsmath - математика программиста
@Chatgpturbobot - бесплатный бот ChatGpt
Please open Telegram to view this post
VIEW IN TELEGRAM
Глубокое погружение в лямбда-выражения на Java
Это руководство полностью посвящено освоению лямбда-выражений на Java. Вы узнаете всё, что вам нужно знать, от основ создания и работы до более продвинутых тем, таких как функциональные интерфейсы и ссылки на методы. Независимо от того, новичок вы или опытный разработчик, это руководство поможет вам повысить уровень вашей лямбда-игры. Итак, давайте погрузимся в мир функционального программирования с помощью Java-лямбд!
Бонус: В конце статьи есть несколько практических вопросов, которые помогут вам подготовиться к следующему собеседованию и оценить свои знания.
TL; DR: Лямбда-выражения – это мощный инструмент для Java-разработчиков, который включает парадигмы функционального программирования и предоставляет способ работы с коллекциями и потоками в Java. Освоив лямбда-выражения, вы, как разработчик, будете писать лучший код, работать эффективнее и создавать более удобные в обслуживании и масштабируемые приложения.
▪Читать
@javatg
Это руководство полностью посвящено освоению лямбда-выражений на Java. Вы узнаете всё, что вам нужно знать, от основ создания и работы до более продвинутых тем, таких как функциональные интерфейсы и ссылки на методы. Независимо от того, новичок вы или опытный разработчик, это руководство поможет вам повысить уровень вашей лямбда-игры. Итак, давайте погрузимся в мир функционального программирования с помощью Java-лямбд!
Бонус: В конце статьи есть несколько практических вопросов, которые помогут вам подготовиться к следующему собеседованию и оценить свои знания.
TL; DR: Лямбда-выражения – это мощный инструмент для Java-разработчиков, который включает парадигмы функционального программирования и предоставляет способ работы с коллекциями и потоками в Java. Освоив лямбда-выражения, вы, как разработчик, будете писать лучший код, работать эффективнее и создавать более удобные в обслуживании и масштабируемые приложения.
▪Читать
@javatg
VAVR, который много лет назад назывался JavaSlang, — это Java API, который привносит возможности функционального программирования в код, а также предоставляет отличный API для неизменяемых коллекций. В этой статье рассмотрим обычный код на Java и его эквивалент с VAVR, чтобы вы увидели, как приятно работать с этой библиотекой.
▪Читать
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Пять задач, которые приходится решать при трудоустройстве начинающим Java-разработчикам
В процессе подбора кандидатов работодатель хочет понять, насколько ему подходит тот или иной соискатель — насколько он комфортен в общении и работе, обладает необходимым опытом и, что самое важное, техническими навыками для предстоящей работы.
В этой статье я приведу примеры конкретных задач, которые могут давать на собеседованиях, и разберу, на что смотрит работодатель при их решении.
▪Читать
@javatg
В процессе подбора кандидатов работодатель хочет понять, насколько ему подходит тот или иной соискатель — насколько он комфортен в общении и работе, обладает необходимым опытом и, что самое важное, техническими навыками для предстоящей работы.
В этой статье я приведу примеры конкретных задач, которые могут давать на собеседованиях, и разберу, на что смотрит работодатель при их решении.
▪Читать
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🌕 Проверка идентификационных номеров: реализация алгоритма Луны на Java
Сначала метод выполняет проверку данных: он удаляет все пробелы, которые часто добавляются, чтобы сделать номера кредитных карт более читаемыми. Он также проверяет, что строка состоит только из цифр, без лишних символов, и обрабатывает любое возникающее исключение NumberFormatException.
Затем код перебирает каждую цифру, начиная справа, чтобы выполнить действия, описанные в разделе выше. Каждая вторая цифра умножается на 2, и в тех случаях, когда в результате получается число больше 9, эти две цифры суммируются вместе, чтобы вычислить однозначное число.
На каждой итерации цикла полученное число суммируется с переменной sum, которая используется для отслеживания общей суммы. После завершения цикла метод возвращает true, если сумма делится на 10.
Полный код можно найти на Github.
Отправляйте свою реализацию в комментарии👇
@javatg
public static boolean validateNumber(String number){
/*
Validation of user input: blank spaces are removed from the
numeric string. Also, the code ensures that the input is numeric
*/
number = number.replaceAll(" ", "");
try{
Long.parseLong(number);
} catch (NumberFormatException e){
System.out.println("Invalid input");
return false;
}
int sum = 0;
boolean alternateDigit = false;
/*
Starting from the right of the string, the code loops through each
digit and multiplies every second digit by 2.
*/
for(int i = number.length()-1; i >= 0; i--){
int digit = Integer.parseInt(number.substring(i, i+1));
if(alternateDigit){
digit *= 2;
if(digit > 9){
digit = 1 + (digit % 10);
}
}
sum += digit;
alternateDigit = !alternateDigit;
}
return (sum % 10 == 0);
}
Сначала метод выполняет проверку данных: он удаляет все пробелы, которые часто добавляются, чтобы сделать номера кредитных карт более читаемыми. Он также проверяет, что строка состоит только из цифр, без лишних символов, и обрабатывает любое возникающее исключение NumberFormatException.
Затем код перебирает каждую цифру, начиная справа, чтобы выполнить действия, описанные в разделе выше. Каждая вторая цифра умножается на 2, и в тех случаях, когда в результате получается число больше 9, эти две цифры суммируются вместе, чтобы вычислить однозначное число.
На каждой итерации цикла полученное число суммируется с переменной sum, которая используется для отслеживания общей суммы. После завершения цикла метод возвращает true, если сумма делится на 10.
Полный код можно найти на Github.
Отправляйте свою реализацию в комментарии👇
@javatg
Иногда в программах приходится создавать классы исключительно для хранения данных, а затем — функции определенных стандартов внутри этих классов.
В Kotlin все эти проблемы решаются с помощью классов данных, создаваемых с той же целью, но функции определенных стандартов в них содержатся автоматически:
data class Person(val name: String, val surname: String)
▪ Читать
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Максимальная площадь острова
Сложность: Средняя
Условие задачи: Условие задачи:
Дан двумерный массив размера m x n. "1" отвечает за сушу, "0" - за океан. Необходимо опеределить максмимальную площадь острова из островов, расположенных на карте.
Островом считается территория, образованная из "1", расположенных сверху, справа, снизу и слева относительно друг друга.
Пример:
Ввод:
grid = [[0,0,1,0,0,0,0,1,0,0,0,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,1,1,0,1,0,0,0,0,0,0,0,0],[0,1,0,0,1,1,0,0,1,0,1,0,0],[0,1,0,0,1,1,0,0,1,1,1,0,0],[0,0,0,0,0,0,0,0,0,0,1,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,0,0,0,0,0,0,1,1,0,0,0,0]]
Вывод:
6
Ввод:
grid = [[0,0,0,0,0,0,0,0]]
Вывод:
0
Решение
Временная сложность:
O(m*n)
Пространственная сложность:
O(m*n)
class Solution {
public int maxAreaOfIsland(int[][] grid) {
int maxArea = 0;
for(int i = 0; i < grid.length; i++) {
for(int j = 0; j < grid[0].length; j++) {
if(grid[i][j] == 1) {
maxArea = Math.max(maxArea, findArea(grid, i, j));
}
}
}
return maxArea;
}
private int findArea(int[][] grid, int row, int col) {
if(row < 0 || row >= grid.length || col < 0 || col >= grid[0].length || grid[row][col] == 0) {
return 0;
}
grid[row][col] = 0;
int count = 1;
count += findArea(grid, row, col-1);
count += findArea(grid, row, col+1);
count += findArea(grid, row-1, col);
count += findArea(grid, row+1, col);
return count;
}
}
Пишите свое решение в комментариях👇
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
На первый взгляд может показаться, что это очередной курс по Java, но это не так. Цель лекций — научить студентов писать качественный, понятный код с использованием лучших практик и тестирования.
Каждый урок подкреплён практикой с заданиями для проверки усвоения материала и заданиями:
https://openlearninglibrary.mit.edu/courses/course-v1:MITx+6.005.1x+3T2016/course/
#java
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Одним из достоинств Kotlin, отличающих его от других языков, в том числе Java, является подход к реализации утилитных классов. Утилиты могут быть полезными инструментами в разработке программного обеспечения, хотя и не всегда являются лучшим выбором при проектировании объектно-ориентированных систем.
Как Java-разработчику, вам будет полезно рассмотреть различные способы реализации утилитных классов в Kotlin и узнать, что делается в этом языке “под капотом”. Kotlin предлагает целый ряд различных способов, упрощающих переход от Java, начиная от сокращения стереотипного кода и заканчивая улучшением читаемости кода.
Понимание различий в реализации утилитных классов в Kotlin и Java — важный шаг в освоении такого мощного языка, как Kotlin. Будь вы опытный Java-разработчик, желающий расширить спектр своих навыков, или новичок в программировании, уделите внимание этому аспекту.
Как вам известно, создать утилитный класс в Java довольно просто. Процесс включает следующие шаги.
▪ Читать
@javatg
Please open Telegram to view this post
VIEW IN TELEGRAM
Задача. Слияние двух бинарных деревьев
Сложность: Лёгкая
Условие задачи: Даны два бинарных дерева, необходимо осуществить их наложение друг на друга и вывод результатов в новом дереве.
Примечание: Наложение представляет из себя суммирование соответствующих значений из узлов двух деревьев.
Пример:
Ввод: root1 = [1,3,2,5], root2 = [2,1,3,null,4,null,7]
Вывод:[3,4,5,5,4,null,7]
Ввод: root1 = [1], root2 = [1,2]
Вывод: [2,2]
Решение
Пишите свое мнение в комментариях👇
@javatg
Сложность: Лёгкая
Условие задачи: Даны два бинарных дерева, необходимо осуществить их наложение друг на друга и вывод результатов в новом дереве.
Примечание: Наложение представляет из себя суммирование соответствующих значений из узлов двух деревьев.
Пример:
Ввод: root1 = [1,3,2,5], root2 = [2,1,3,null,4,null,7]
Вывод:[3,4,5,5,4,null,7]
Ввод: root1 = [1], root2 = [1,2]
Вывод: [2,2]
Решение
class Solution {
public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
if (root1==null && root2==null) return null;
if (root1==null) return root2;
if (root2==null) return root1;
root1.val = root1.val+root2.val;
root1.left = mergeTrees(root1.left, root2.left);
root1.right = mergeTrees(root1.right, root2.right);
return root1;
}
}
Пишите свое мнение в комментариях👇
@javatg