Почему так?
Почему при компиляции java кода через командную строку пропадает кириллица, а при intellij idea нет?
Скомпилировал при помощи команды через командную строку, запускаю. Нет кириллицы.
Запускаю скомпилированный код через intellij idea, есть кириллица.
Кто-нибудь знает?
Продолжение поста «Продолжение поста "Java или JavaScript?"»
Да вы задолбали. Буду дальше учить жабу, нахер жаба скрипт.
Всё, это моё окончательное решение.
Продолжение поста «Java или JavaScript?»
Раз разницы особой нету, то начну пожалуй с свой путь в программировании с жаба скрипта. Посмотрел на Хабре, hh.ru, на жаба скрипте больше вакансий, наверное будет легче найти работу.
Java или JavaScript?
Я тут немного поизучал джаву и задумался. А JavaScript легче? Что лучше подойдёт новичку? Мне продолжать учить джаву (я совсем немного изучил) или лучше переключиться на JavaScript?
В дальнейшем я планирую изучать и джаву и джаваскрипт. Нет никакой разницы с чего начинать?
ТОП-15 лучших курсов Java: обучение онлайн с нуля для начинающих, платные + бесплатные
В этой статье сравниваем ТОП-15 лучших онлайн-курсов по обучению Java программированию + рассматриваем бесплатные курсы.
Java - мощный и гибкий объектно-ориентированный язык программирования. Он обладает популярностью благодаря своей платформенной независимости, позволяя запускать программы на разных ОС. Java применяется во многих сферах, таких как веб-разработка, мобильные приложения, корпоративное программирование и игровая индустрия. Он поддерживает современные технологии и имеет обширную экосистему библиотек и фреймворков для упрощения разработки.
Информация о курсе: стоимость — в рассрочку 2 852 ₽/мес. на 24 месяца, длительность курса 4 месяца
Особенности: поисковый движок в качестве дипломного проекта, доступ к курсу навсегда.
В данной программе обучения вы освоите программирование на самом распространенном языке программирования Java, научитесь создавать веб-сайты и разработаете собственный блог, что добавит значительную ценность к вашему профессиональному портфолио. В результате завершения обучения, вы станете высококвалифицированным Java-программистом и сможете успешно трудиться в компании по разработке программного обеспечения.
Навыки после обучения:
Создание веб-приложений с использованием Java
Разработка веб-приложений на базе Spring Framework
Тестирование, оптимизация и обработка исключений в коде
Управление версиями кода с помощью системы контроля версий Git
Работа с базой данных MySQL
Взаимодействие с протоколом HTTP
Работа с хранилищами данных Redis и MongoDB
Применение принципов объектно-ориентированного программирования (ООП)
Обработка файлов и работа с сетью
Настройка многопоточности для эффективной работы приложений.
Программа обучения:
Основы языка и введение
Объектно-ориентированный синтаксис и классы
Примитивные типы данных
Работа со временем и числами
Работа с текстом и строками
Работа с коллекциями и списками
Коллекции Set и Map
Работа с алгоритмами и коллекциями
Наследование и абстрактные классы
Интерфейсы и особенности ООП
Исключения и отладка кода
Взаимодействие с файлами и сетью
Работа с базами данных (MySQL)
Многопоточное программирование
Оптимизация производительности
Протокол HTTP и веб-разработка
Базы данных NoSQL
Запросы к базам данных SQL
Управление версиями кода с Git
Информация о курсе: стоимость — 131 100 ₽ или в рассрочку 3 833 ₽/месяц на 36 месяцев, длительность курса 14 месяцев
Особенности: диплом о профессиональной переподготовке установленного образца, помощь в трудоустройстве/стажировке, 7 проектов в портфолио.
Вы изучите многофункциональный язык программирования с нуля и станете востребованным в областях разработки веб- и мобильных приложений, Big Data и многих других. В процессе изучения вы освоите JavaCore, Spring Boot, основы DevOps, SQL, Git и разработаете 8 полностью функциональных проектов, которые станут ценным дополнением к вашему портфолио.
Чему научитесь:
Разработка веб-приложений: приобретете знания о клиент-серверном взаимодействии и работе с базами данных и SQL.
Использование фреймворков: освоите шаблоны проектирования и изучите фреймворк Spring, широко используемый среди Java-программистов.
Программирование на Java: изучите основы программирования на Java, включая синтаксис языка и принципы ООП.
Мышление как программист: сможете разрабатывать быстрые алгоритмы и использовать стандартные структуры данных.
Участие в командной разработке: попрактикуетесь в работе с Git в командных проектах.
Готовиться к собеседованиям: освоите навыки формулирования карьерных целей, создания резюме и составления портфолио для успешных собеседований.
Программа обучения:
Вводные уроки по языку программирования Java
Применение концепций объектно-ориентированного подхода в программировании на Java
Использование Git - инструмента для управления версиями кода
Фундаментальные аспекты языка Java (Java Core)
Понимание и применение шаблонов проектирования в разработке программного обеспечения
Освоение многопоточного и функционального программирования в Java
Создание веб-приложений с использованием Spring и Spring MVC
Разработка, развертывание и инфраструктура приложений на Spring Boot
Обеспечение безопасности хранения данных и работы приложений на S pring
Дополнительные темы и модули для расширения знаний
Подготовка карьеры в разработке на Java
Основы английского языка для новичков в разработке программного обеспечения
Введение в информационные технологии и их применение
Изучение алгоритмов и структур данных для эффективной разработки программ.
Информация о курсе: стоимость — от 3 933 р./мес. при рассрочке на 36 месяцев, длительность курса 14 месяцев
Особенности: 5 проектов для портфолио, помощь в трудоустройстве.
Приобретите навыки в backend-разработке и программировании с использованием Java и Spring, а также основы методологии DevOps.
Программа обучения:
Курс начинается с основ Java, затем последовательно расширяет знания в программировании и позволяет освоить продвинутые навыки, необходимые разработчику.
Курс содержит следующие темы:
Введение в Java программирование + основы.
Работа с базами данных и языком SQL.
Изучение алгоритмов и структур данных.
Практическая стажировка в виртуальной среде.
Backend-разработка на Java.
Изучение Spring Framework.
Frontend для разработчиков backend.
Основы системного администрирования.
Введение в методологию DevOps.
Завершающий индивидуальный проект.
Навыки после обучения:
Решение задач различной сложности с помощью алгоритмов.
Программирование на Java и применение концепций Collections, Exceptions, Generics, а также основ Multithreading.
Разработка серверной логики и настройка взаимодействия с базами данных, включая написание SQL-запросов.
Использование фреймворков Spring и SpringBoot.
Создание REST-сервисов с разнообразными функциями.
Развёртывание и поддержка веб-сайтов на домене.
Отладка и исправление ошибок в коде (debugging).
Создание собственного движка для веб-сайтов.
Работа с системой контроля версий Git и применение Gitflow.
Знание и применение дополнительных фреймворков.
Использование инструментов DevOps.
Тестирование приложений.
Информация о курсе: стоимость — в рассрочку от 3 960 ₽/месяц на 34 месяца, длительность курса 9 месяцев
Особенности: помощь в трудоустройстве, диплом о профессиональной переподготовке.
Пройдите обучение на позицию инженера-программиста с углубленным изучением Java. В ходе обучения вы освоите базовые алгоритмы и примените их на практике, приобретете уверенное владение языком Java и сможете разрабатывать универсальные программы для различных современных платформ: от сетевых чатов и приложений до мобильных игр и других сервисов. По окончанию 9-месячного курса вы будете готовы к трудоустройству на соответствующие вакансии.
Программа обучения включает следующие темы:
Основы программирования
Введение в системы контроля версий
Практическое знакомство с системами контроля версий
Ознакомление с различными языками программирования
Знакомство с работой баз данных
Видеокурс: основы математики
Введение в язык Java и основы использования его API
Принципы объектно-ориентированного программирования (ООП)
Обработка исключений при программировании
Видеокурс: алгоритмы и структуры данных
Видеокурс: операционные системы и виртуализация (Linux)
Java Core
Java Development Kit
Java Junior
Видеокурс: Spring Framework для языка Java
Видеокурс: контейнеризация
Работа с базами данных и язык SQL
Видеокурс: глубокое погружение в системы контроля версий с Git
Завершающий проект (дипломная работа)
Информация о курсе: стоимость — При рассрочке на 36 месяцев от 4439 ₽/мес., длительность курса 11 месяцев
Особенности: помощь в трудоустройстве, 5 проектов в портфолио.
На курсе вы овладеете следующими навыками:
Освоите синтаксис языка Java.
Познакомитесь с Java Core и основами ООП.
Научитесь структурировать свой код и анализировать код других.
Изучите методы тестирования программ как вручную, так и автоматически.
Помимо этого, программа обучения включает в себя:
Знакомство с Hibernate и Spring, а также с ORM и JDBC.
Изучение методологии Devops и её применение на реальных кейсах.
Работу с базами данных и системами контроля версий.
Освоение основ работы на Linux.
По завершении курса, вы сможете выбрать специализацию в Android-разработке или Frontend. Также вы будете готовы к свободному написанию кода на Java, тестированию на Java, использованию фреймворков для языка Java и применению основ Devops в Java-разработке.
Для кого предназначен этот курс?
Разработчики Java с практическим опытом работы.
Разработчики на других языках ООП с опытом работы от трех лет.
Чего вы достигнете после прохождения курса?
Создание современных Java-приложений.
Понимание основ работы JVM (включая сборку мусора и байт-код).
Освоение приемов работы с многопоточностью.
Самостоятельное решение задач уровня Middle+.
Какие преимущества принесет этот курс?
Получение знаний о последних технологических наборах.
Проведение 88 часов практической работы.
Детальный разбор технологий изнутри.
Практика решения сложных задач с детальным код-ревью от экспертов.
Расширение возможностей использования языка Java.
Ознакомление с подходами, позволяющими писать код быстрее и чище.
Структура курса:
Язык и платформа Java
Проектирование
Работа с окружением
Spring
Многопоточность
Проектная работа
За 10 месяцев вы приобретёте следующие навыки:
Освоите использование среды разработки IDEA и изучите основные её функции.
Создадите REST API, применяя фреймворк Spring Boot.
Познакомитесь с работой с базами данных на примере PostgreSQL.
Изучите Git с самых начальных шагов до работы в команде.
Развернёте ваш сервис в Docker.
Получите опыт работы с базами данных из кода, применяя Spring Data и Hibernate.
Освоите методики тестирования вашего кода с помощью библиотек JUnit и Mockito.
Приобретёте базовое понимание алгоритмов для написания более эффективного кода.
Изучите фреймворк Apache Maven для автоматизации сборки проектов.
Кроме того, изучение Java имеет преимущества:
Подходит для новичков.
Некоторые сложные конструкции и особенности языка делают код более понятным и снижают вероятность ошибок.
Множество готовых решений в виде библиотек и фреймворков, что упрощает разработку.
Большое сообщество разработчиков, готовых помочь и поделиться опытом.
После изучения Java проще освоить другие языки программирования, так как вы освоите основные принципы программирования.
Основы программирования на языке Java NEW
Программирование на языке Java. Углубленный курс NEW
Разработка приложений с использованием SPRING NEW
Построение приложений-клиентов баз данных с использованием JDBC 4.0
Разработка веб-сервисов на Java
Технологии JavaServlets и JavaServerPages
В обучающую программу включены следующие курсы:
"Основы программирования и работы с базами данных"
"Основы решения алгоритмических задач. Уровень 1"
"Программирование на языке C (Си)"
"Java. Уровень 1. Язык программирования Java"
"Java. Уровень 2. Разработка клиент-серверных приложений"
"Разработка приложений с использованием SPRING и Spring MVC/REST"
Пройдите дипломную программу и получите высокооплачиваемую профессию!
После завершения дипломной программы ваше резюме будет включать в себя:
Отличное владение языком программирования Java и глубокое понимание работы виртуальной машины Java (JVM).
Знание и опыт работы с веб-технологиями SOAP, REST API, JSON, XML.
Знание платформы J2EE (Enterprise Java), включая EJB, JAX-WS, JAX-RS, JMS.
Опыт работы с фреймворком Spring Framework, включая Spring MVC и Spring JDBC.
Опыт работы с ORM и Hibernate.
Повышение квалификации.
Хотите усилить свое резюме? Мы рекомендуем пройти дополнительные курсы:
"Linux. Уровень 1. Основы администрирования систем Debian, CentOS, Gentoo"
"Agile - Scrum Foundation 1. Управление проектами с использованием гибких подходов"
"Agile - Scrum Foundation 2. Управление проектами с использованием гибких подходов"
"PostgreSQL: Уровень 1. Основы SQL"
"PostgreSQL: Уровень 2. Продвинутые возможности"
"Система управления версиями Git"
После прохождения дипломной программы и рекомендованных курсов, ваше резюме будет дополнено следующими навыками:
Навыки администрирования GNU/Linux и написания скриптов на языке bash.
Опыт работы в Agile-ориентированных проектах и методологии Scrum.
Умение писать SQL-запросы и разрабатывать структуру баз данных, а также опыт работы с СУБД PostgreSQL.
Навыки работы с системой контроля версий Git.
Цель данного курса состоит в обучении программированию на языке Java с абсолютного начального уровня. По завершении курса студенты будут способны успешно продолжить изучение любых высокоуровневых технологий, связанных с семейством Java, включая приложения для мобильных устройств, веб-приложения и корпоративные системы с множеством пользователей.
Программа курса включает в себя следующие темы:
Ознакомление с технологией Java и средой разработки JetBrains IDEA (нововведение 2020 года).
Введение в объектно-ориентированное программирование на Java.
Работа с типами данных, переменными и операторами.
Создание и использование объектов, классы и объекты String, классы и объекты Java API.
Использование операторов управления ходом программы.
Разработка методов, инкапсуляция, конструкторы, массивы объектов.
Изучение наследования, интерфейсов и полиморфизма.
Механизм исключений и операции ввода/вывода.
Работа с коллекциями, стримами, лямбда-выражениями (нововведение 2020 года).
По завершении курса вы получите следующие знания:
Историю и развитие технологии Java, её основные цели и области применения, ключевые понятия и компоненты, комплект разработки JDK, редакции и версии Java, а также жизненный цикл Java-программы.
Основные элементы интерфейса и возможности среды разработки IntelliJ IDEA.
Основные понятия языка Java и его синтаксис, такие как класс, объект, атрибут, операция, композиция, наследование, интерфейс, пакеты.
Базовые возможности класса String, а также классов Java API и массивов объектов.
По завершении курса вы сможете:
Установить комплект разработки JDK и среду разработки IntelliJ IDEA на операционной системе Windows.
Компилировать и запускать Java-программы из командной строки.
Эффективно работать с ресурсами в среде разработки IntelliJ IDEA.
Проектировать классы и применять механизмы наследования и полиморфизма, выражая отношения между классами с помощью нотации UML.
Использовать механизм исключений при операциях ввода-вывода.
По завершении курса вы овладеете методами разработки и отладки Java-кода в среде разработки IntelliJ IDEA.
Продолжительность обучения:
Учебная программа: 72 часа.
Продолжительность обучения: 2 месяца.
Какие навыки вы освоите:
Создание программ на языке Java
Правила и структура языка Java
Основные конструкции, такие как циклы и условия
Принципы объектно-ориентированного программирования
Работа с несколькими потоками одновременно
Проведение тестов с использованием JUnit
Изучение и применение коллекций (Collections Framework)
Применение обобщений (Generics)
Работа с потоками данных через Stream API
Освоение работы с потоками ввода-вывода
Подготовка к собеседованию в области программирования
Этот курс представляет основные принципы объектно-ориентированного программирования и разработки приложений на языке Java. По завершении курса вы получите Удостоверение о повышении квалификации.
Он охватывает следующие темы:
Синтаксис языка Java и особенности объектно-ориентированного программирования на нём.
Обработка исключений и операции ввода/вывода файлов с использованием базовых методов ввода/вывода.
Написание программ с использованием многопоточности.
Основы функционального программирования, введённые в версии Java 8.
Вы также выполняете лабораторные работы как в командной строке, так и с использованием интегрированной среды разработки NetBeans.
Курсы:
StartJava:
Основы языка Java с нуля
Написание грамотного кода
Выпускной проект
BaseJava:
Освоение Java Core
Создание большого web-приложения
Использование БД и облачных сервисов
Проверка домашних заданий дважды в день
TopJava (стажировка):
Создание сложного web-приложения
Изучение технологий для трудоустройства (Spring, Hibernate, БД и др.)
Выпускной проект
Помощь с трудоустройством
MasterJava:
Создание многомодульного Maven-проекта
Написание трех web-приложений
Использование Java EE, многопоточности и web-сервисов
Расширение кругозора
Программа обучения:
Java Core - 1.5 месяца
Подготовка к проекту (Spring + Hibernate) - 2 месяца
Java Advanced (бонусный модуль) - 0.5 месяца
Командный проект - 1 месяц
Подготовка к собеседованию - 2 месяца
Трудоустройство - 1 месяц
Программа курса "Java - разработчик" состоит из следующих частей:
Часть I: Технологии программирования (50 академических часов)
Основы технологий программирования
Работа с алгоритмами
Применение методов сортировки и поиска данных
Типизация и структуры данных
Основные парадигмы программирования
Визуальное моделирование и основы Unified Modeling Language (UML)
Использование основных диаграмм UML
Работа с GitHub
Часть II: Программирование на Java (базовый уровень) (65 академических часов)
Введение и работа с IDE. Основы типов данных
Понятия классов, объектов, модификаторов доступа и базового синтаксиса
Использование статических и нестатических блоков, полей и методов, концепции final
Работа с Git, циклами for и forEach
Применение алгоритмов и структур данных, работа с массивами
Работа со строками (String), StringBuilder и StringBuffer
Основы объектно-ориентированного программирования. Абстрактные классы и интерфейсы
Использование внутренних, вложенных и анонимных классов. Принципы SOLID
Обработка исключений. Отладка программы с помощью Debugger
Работа с коллекциями и обобщениями (Generics)
Чтение и запись файлов
Применение паттернов проектирования (Factory, Builder, Prototype и др.)
Работа с датой и временем
Использование лямбда-выражений
Основы функционального программирования
Работа с многопоточностью
Часть III: Основы разработки баз данных (35 академических часов)
Введение в базы данных
Принципы нормализации баз данных
Обеспечение целостности данных и реализация ограничений
Знакомство с PostgreSQL, основные синтаксис и операторы PL/pgSQL
Создание баз данных и файлов баз данных, проектирование и создание таблиц, управление индексами
Обработка данных, использование соединений и представлений
Использование функций, хранимых процедур и триггеров
Обзор NoSQL баз данных
Часть IV: Программирование на Java (расширенный уровень) (40 академических часов) (Проводится преподавателями-практиками из IT-индустрии)
Применение HTTP, REST и JSON, введение в Spring Initializr
Работа с Spring Boot и Maven. Структура проекта и создание контроллеров
Использование аннотаций и сервисов
Работа с Spring JPA и PostgreSQL
Применение пагинации, сортировки и фильтрации. Диалект HQL
Использование Swagger-UI, настройка конфигурационных классов и обработка исключений
Модульное тестирование с использованием JUnit, Mockito и SpringBootTest
Работа с Spring Security и JWT Token
Основы Docker и Kafka
Часть V: Работа над проектом (60 академических часов)
Бесплатные курсы
Сколько зарабатывают Java-программисты
Зарплата Java-разработчиков в России может значительно варьироваться в зависимости от ряда факторов, таких как опыт работы, уровень квалификации, регион проживания и размер компании.
Начинающий Java разработчик в России может рассчитывать на зарплату в среднем от 50 000 до 100 000 рублей в месяц.
Средняя зарплата Java-разработчика в России составляет около 100 000 - 150 000 рублей в месяц. Однако, в Москве и Санкт-Петербурге зарплаты могут быть выше и достигать 150 000 - 250 000 рублей в месяц и более.
Также стоит отметить, что зарплата Java-разработчиков может значительно возрастать с увеличением опыта работы и приобретением специализированных навыков, таких как разработка мобильных приложений или работа с большими данными.
Где используется язык программирования Java
Java - это язык программирования и платформа, которая используется для разработки различных типов приложений, включая веб-приложения, мобильные приложения, настольные приложения, игры и многое другое.
Он широко используется в индустрии ПО и имеет множество применений.
Список областей, в которых применяется Джава:
Разработка веб-приложений — Java позволяет создавать мощные и масштабируемые веб-приложения с использованием фреймворков, таких как Spring и JavaServer Faces (JSF).
Разработка мобильных приложений — для создания приложений для операционных систем Android. С помощью Android SDK и Java можно создавать разнообразные мобильные приложения, включая игры, социальные сети, приложения для бизнеса и т. д.
Разработка настольных приложений — Ява позволяет создавать кросс-платформенные настольные приложения, которые могут работать на различных операционных системах, таких как Windows, macOS и Linux.
Разработка игр — Java имеет множество библиотек и фреймворков для создания игр, таких как LibGDX и jMonkeyEngine. Он также используется для разработки игр на мобильных устройствах.
Разработка серверных приложений — Java позволяет создавать мощные серверные приложения, которые могут обрабатывать большие объемы данных и обеспечивать высокую производительность. Это делает его популярным выбором для разработки приложений электронной коммерции, систем управления базами данных и других серверных приложений.
Разработка программного обеспечения для встроенных систем — Java также используется для разработки программного обеспечения для встроенных систем, таких как системы управления зданиями, автомобильные системы и другие устройства Интернета вещей (IoT).
Это лишь некоторые из областей, в которых Java используется. Java также широко применяется в больших данных (Big Data), финансовой индустрии, телекоммуникациях и других отраслях.
Чему можно научиться на курсах Java
Программа обучения на примере одного из курсов:
Основы Java: введение в программирование на Java, структура программы, условные операторы и циклы, типы данных в Java: примитивы и объекты, одномерные и многомерные массивы.
Объектно-ориентированное программирование в Java: система типов, консольные программы, сложные типы данных, модификаторы доступа и наследование, полиморфизм, абстракции и интерфейсы, исключения и Stacktrace, Generics, коллекции List, HashSet и HashMap, TreeMap и TreeSet, Queue.
Git: локальный и удаленный репозиторий, командная работа на GitHub.
Java Core: фундаментальные основы языка, автотесты, работа с сетями (протоколы UDP, TCP/HTTP, модель OSI), чтение файлов разных форматов (txt, json, xml), разработка клиент-серверных приложений, лямбда-выражения и функциональные интерфейсы, Stream API, потоки ввода-вывода, сборка проектов с помощью Maven и Gradle, работа с файлами CSV, XML, JSON, тестирование кода и Unit-тесты, Mockito (мокирование вызовов), основы работы с сетью и протокол HTTP, основы JVM (организация памяти, сборщики мусора, VisualVM).
Шаблоны проектирования: порождающие (Builder, Singleton, Factory Method, Abstract Factory, Prototype), структурные (Proxy, Decorator, Adapter), поведенческие (Command, Iterator, Observer, Chain of Responsibility), свойства хорошего кода и принцип SOLID.
Многопоточное и функциональное программирование: параллельное программирование, синхронизация, переменные многопоточной программы, коллекции для параллельной работы, клиент-серверное взаимодействие (Blocking и Non-Blocking IO), функциональное программирование, методология разработки (TDD, DDD).
Web, Spring & Spring MVC: HTTP и современный Web, формы и форматы передачи данных, JavaScript, AJAX, REST, JSON, CORS, Servlets Containers, Dependency Lookup, Dependency Injection, IoC, Application Context, Spring Web MVC.
Spring Boot, deployment и инфраструктура: Spring Boot, назначение и внутреннее устройство, REST, виртуализация и основы работы, разворачивание Spring Boot приложений, основы работы с Docker, TestContainers, Kubernetes, облака.
Spring — хранение данных и организация безопасности: с использованием реляционных баз данных, JPA, Spring Data JPA, SQL (включая основы, DDL, DML, вложенные подзапросы, JOIN'ы, агрегирующие запросы), JDBC API, JdbcTemplate, NamedParametersJdbcTemplate, ORM и Hibernate (включая жизненный цикл сущностей, встраивание, связи), Spring JPA Repositories, JPQL, безопасность в веб-приложениях с помощью Spring Security, аутентификация и авторизация.
Карьера в Java-разработке: формулировка карьерных целей, создание резюме и портфолио, подготовка к собеседованиям, поиск работы с пошаговым планом, анализ рынка труда, статистика и измерение эффективности, индивидуальная карьерная консультация с HR-экспертом.
Английский язык для начинающих разработчиков.
Алгоритмы и структуры данных: проектирование быстрых алгоритмов, использование стандартных структур данных, развитие мышления программиста, включая введение в алгоритмическую сложность, бинарный поиск, динамическое программирование, «жадность», сортировки, динамический массив, списки, деки, пирамиды, деревья поиска, хеширование, графы и орграфы.
Освоенные навыки: Git, IntelliJ IDEA, Gradle, Spring Framework, Docker, JUnit 5, SQL, Java, GitHub, MongoDB.
Программа обучения может сильно отличаться, в зависимости от выбранного курса.
Какие навыки нужны и что используют Java-программисты в работе (программы, инструменты, принципы)
Вот некоторые навыки и инструменты, которые могут быть полезны и/или обязательны при работе с Java:
Основы языка: знание основных конструкций и синтаксиса Java, таких как переменные, условные операторы, циклы, методы и классы.
Объектно-ориентированное программирование (ООП): понимание принципов ООП, таких как наследование, полиморфизм, инкапсуляция и абстракция, их применение для организации кода и создания гибкой архитектуры приложения.
Фреймворки и библиотеки: изучение популярных фреймворков и библиотек, которые помогают ускорить и упростить разработку приложений на Java, таких как Spring, Hibernate, JavaFX, Apache Commons и другие.
Работа с базами данных: знание языка SQL и понимание работы с реляционными базами данных, такими как MySQL или PostgreSQL. Использование JDBC или ORM-фреймворков для взаимодействия с базами данных в Java-приложениях.
Многопоточность: понимание концепций многопоточного программирования, синхронизация потоков, использование объектов Thread и Runnable.
Автоматическое тестирование: знание фреймворков и инструментов для автоматизации тестирования, таких как JUnit, TestNG, Mockito и Selenium WebDriver. Они помогают создавать надежные и поддерживаемые тесты для Java-приложений.
Управление зависимостями и сборка проектов: использование инструментов для управления зависимостями, например Maven или Gradle, для эффективного управления внешними библиотеками и сборки проектов.
Интегрированная среда разработки (IDE): использование популярных IDE, таких как Eclipse, IntelliJ IDEA или NetBeans, для комфортной разработки, отладки и управления Java-проектами.
Принципы хорошего программирования: понимание принципов SOLID, паттернов проектирования, чистого кода и практик разработки, которые помогают создавать поддерживаемые, гибкие и расширяемые Java-приложения.
Web-разработка: изучение Java-технологий для разработки веб-приложений, таких как Java Servlets, JavaServer Pages (JSP), Spring MVC, JSF и другие.
Мобильная разработка: использование фреймворков, таких как Android SDK, для разработки мобильных приложений на платформе Android с использованием Java.
Работа с архитектурой RESTful и разработка веб-сервисов с использованием Java и фреймворков, таких как Spring Boot.
Java Development Kit (JDK): набор инструментов, необходимых для разработки и выполнения Java-приложений.
Java Virtual Machine (JVM): виртуальная машина, которая выполняет Java-код.
Java API (Application Programming Interface): набор классов и интерфейсов, предоставляемых Java для разработки приложений.
Это только некоторые из навыков и инструментов, которые можно использовать в разработке с использованием Java.
Делаем из битого планшета одноплатник: подключаем Android-устройства к дешевым микроконтроллерам через UART
В наше время, из-за санкций одноплатники стали стоить каких-то «конских» денег. Даже б/у RaspberryPi Zero стоит 2-3 тысячи рублей на барахолках, что, мягко скажем, не совсем лояльная цена для «самого дешевого одноплатного компьютера в мире». Конечно, Orange Pi Zero всё ещё можно купить в пределах 1.500-2.000 рублей, но как по мне и эта цена не слишком лояльна за те характеристики, который предлагает такой одноплатник. С другой стороны, Android-планшеты 10-летней давности продаются на барахолках по 100-300 рублей, что выглядит гораздо привлекательнее, причём на некоторые устройства практически без костылей можно установить полноценный дистрибутив Linux! Вероятно, многие читатели скажут мол «автор бомж» и будут правы: ведь в рамках этой статьи, я хочу рассказать о том, как использовать полурабочий древний планшет в качестве полноценного одноплатника путём подключения его к микроконтроллеру и выводу GPIO! Сегодня мы с вами: узнаем, как подключить микроконтроллер к шине UART в планшете и научимся работать с последовательной шиной в Android прямо из Java и нативных программ. Интересна моя концепция антикризисного одноплатника? Тогда добро пожаловать под кат!
❯ Зачем это нужно?
Пожалуй, нельзя сказать, что подобная концепция пристраивания старых планшетов — вопрос исключительно цены. 2-3 тысячи рублей не такие уж и большие деньги и при желании можно купить хотя-бы Б/У, но всё таки полноценный одноплатник с нормальной GPIO-гребенкой. Однако здесь стоит вопрос не столько дешевизны, сколько E-Waste: зачем выкидывать в помойку потенциально рабочие планшеты с живым процессором, если их можно пристроить куда-то ещё?
На самом деле, планшеты с ROOT-доступом уже из коробки могут выполнять весьма полезные задачи, как, например, хостинг http-сервера для домашней страницы, работать как панель с часиками и погодой, или, например, работать в качестве HMI-панели для оформления заказов в шаурмечной. Кроме того, многие планшеты на базе смартфонных чипсетов (MediaTek, Spreadtrum) имеют полноценный Bluetooth-модуль, что позволяет «подружить» планшет с микроконтроллером через радиоканал, что значительно расширяет возможный спектр применений.
Преимуществ у такого подхода много: у «пожилого» планшета уже есть большой, достаточно качественный (хороший TN, либо даже IPS) дисплей с тачскрином, который поддерживает мультитач, GPU для вывода 3D-графики, 3.5мм для вывода звука + встроенные динамики, а также весьма неплохое, по сравнению с дешевыми одноплатниками, железо. Звучит весьма вкусно для цены в 300 рублей: собрать хоть немного похожую конфигурацию на базе RPi выйдет в 10-15 тысяч рублей (учитывая дороговизну MIPI-матриц с тачскринами + цену самой «малинки» и обвязки для аудиотракта).
Но при всех перечисленных достоинствах, атрибутом любого полноценного одноплатника является наличие GPIO — и даже здесь мы сможем с вами выкрутится! Первый способ, о котором я чуть выше вскользь рассказал, позволяет реализовать общение с МК и «ногодрыг» через BT-радиоканал, но минусы такого подхода очевидны (МК с BT дороже, радиоканал потребляет дополнительную энергию, некоторые могут посчитать BT небезопасным). Однако есть и второй подход, который заключается в использовании диагностических пятачков UART на плате устройства для наших личных целей!
С таким подходом можно использовать как «голый» Linux, используя концепцию, которую я представил в этой статье, так и взаимодействовать из Java-приложений для Android (что даёт уже, как минимум, удобный GUI-фреймворк). Сегодняшняя статья будет «без воды», только чистая конкретика, поэтому давайте перейдем к реализации!
❯ Подготовка
Как я уже говорил выше — в рамках данной статьи мы рассмотрим использование UART в планшете для наших собственных целей. UART — это двунаправленная полнодуплексная цифровая шина, которая позволяет обеспечить стабильную передачу данных при относительно невысокой скорости, измеряемой вбодах. То есть, быстро стримить картинку с её помощью вы не сможете, но сможете, например, получить состояние входов МК, прочитать что-то на шине I2C, используя мост UART -> I2C или, например, прочитать показания датчиков, которые МК предварительно опросил.
Сама по себе концепция очень простая: многие китайские производители планшетов и смартфонов не только разводят UART в виде отдельного пятачка на плате, но и подписывают его, задействуя UART-канал как вывод для логов ядра, а иногда и предоставляя доступ к рутовой консоли! В свою очередь, из юзерспейса мы можем получить доступ к UART с помощью устройства/dev/ttyS<x>на подавляющем числе чипсетов и/dev/ttyMT<x>на MediaTek. Однако учтите, что в некоторых случаях придется патчить загрузчик, дабы редиректнуть логи ядра в /dev/null.
Однако наличие UART на плате — не всегда признак того, что он сконфигурирован в системе верно. Например, на смартфонах с чипсетами SC6820 нормально завести UART я так и не смог, а на некоторых устройствах на базе MT657x нужно патчить загрузчик, дабы он «увидел» нужный канал UART! В моём случае, героем статьи стал планшет Prestigio, у которого отказал тачскрин, но был доступен UART:
Конкретно в моём случае, после установки последней официальной прошивки планшет перестал слать логи на UART и устройство /dev/ttyMT3 оказалось доступным для наших операций, в вашем же случае может потребоваться настройка devicetree, или просто патчинг загрузчика, дабы редиректнуть консоль на другой вывод UART. Кроме того, необходимо обязательно получить root-доступ хотя-бы к adb shell, поскольку доступ к /dev/tty устройствам возможен только от имени суперпользователя. Как же проверить UART на возможность чтения/записи? Сначала нам необходимо взять ESP32 или любой UART-USB преобразователь, припаять сигнальные линии RX/TX и использовать любую программу для работы с последовательным портом, например Putty. Заходим в adb shell, и пишем что-нибудь в консоль:
Вуаля! Всё работает :)
Работает? Замечательно, значит мы сможем использовать планшет вместе с микроконтроллером! Переходим к практической реализации нашего приложения!
❯ Используем из Java
Я специально решил выделить для Java-подхода отдельный раздел, поскольку просто взять и открыть /dev/ttyMT3 с помощью FileInputStream не выйдет. Дело в том, что даже несмотря на наличие root-доступа, по факту ни одно Android-приложение его не имеет (за исключением подписанных системных в папке /system/app/) и для всех операций, требующих повышенных привилегий, либо распаковывают и запускают внешнюю нативную программу из под суперпользователя, либо с помощью специального костыля с запуском sh-программ читают/пишут нужные блочные устройства сами. Связано это с тем, что все Android-приложения работают в хост-процессе app_process, который форкается (отпочковывается) от «главного» процесса, который запущен из под «простого» пользователя, который не находится в группе system.
Здесь концепция также очень простая: su имеет аргумент -c, который позволяет запустить команду от имени root-пользователя и возвращает объект процесса, дабы мы потом могли перехватить stdout:
Таким образом, для чтения текстовых данных из UART'а нам достаточно лишь периодически «слушать» stdout команды cat и обрабатывать данные:
Костыль, но со вкусом :) Если вас не устраивает такой подход или ваше приложение значительно более комплексное, вы можете использовать UART и из под нативных программ.
❯ Используем из C
Работа с последовательными портами в Linux не отличается от работы с любыми другими файлами и устройствами: вызовов open, read, write и close обычно хватает и лишь иногда к ним в довесок нужен ioctl.
int fd = open("/dev/ttyMT3", O_RDWR);
int result = write(fd, command, strlen(command));
Для работы с терминалом необходимо использовать модуль termio который предоставляет все необходимые структуры для настройки режима работы терминала, в т.ч и бодрейт. Дело в том, что изначально последовательное устройство настроено на режим работы в качестве терминала, т.е драйвер отдаст данные только после того, как устройство на UART пошлёт \n, или превысит размер внутреннего буфера для сообщения. Если вам нужно работать с бинарными данными и получать их «на лету» — необходимо настроить последовательный порт в «binary» режим:
tcgetattr(modemFd, &tio);
tio.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON);
tio.c_oflag &= ~(OPOST);
tio.c_cflag |= (CS8);
tio.c_lflag &= ~(ECHO | ICANON | IEXTEN | ISIG);
tcsetattr(modemFd, TCSAFLUSH, &tio);
Если же вам достаточно текстового терминального режима, то можно продолжить как есть и использовать fgets, fscanf и прочие удобные функции из libc! О том, как собрать нативную программу для смартфона и как вообще выбросить Android из него, читайте в моей отдельной статье.
❯ Заключение
Вот таким образом можно использовать проводную шину в планшете для собственных нужд! Как видите, совершенно ничего сложного и используя эти наработки, я реализовал уже не один проект! Надеюсь, материал вам был интересен и полезен :) Пишите своё мнение, можно ли использовать дешевые планшеты по 300 рублей в качестве одноплатников?
Статья была подготовлена при поддержке TimeWeb Cloud. Подписывайтесь на меня и @Timeweb.Cloud, дабы не пропускать новые статьи каждую неделю! Ну а больше подробностей о будущем контенте, как обычно, в первом комменте! Также у меня есть свой Telegram-канал, куда я выкладываю свои мысли, советы по ремонту и моддингу различных гаджетов, а также вовремя публикую ссылки на новые статьи!