- Что такое «углублённые основы» в Java?
- Как основы могут быть «углублёнными»?
- Хорошо, немного усложним задачу
- Интерактивный практический курс о тонкостях и хитростях Java с глубоким разбором главных и самых важных частей языка
- Особенности курса:
- Курс рассчитан на:
- Java. План действий
- 2. JDK API
- 3. Новые возможности Java 8
- 4. SQL, базы данных, JDBC
- 5. Фреймворки
- 6. Библиотеки и фреймворки для тестирования
- 7. Сервисные библиотеки
- 8. API-клиенты
- 9. Паттерны проектирования
- 10. Дополнительные знания
Что такое «углублённые основы» в Java?
Теги: java, цикл for, ветвление if-else, создание объекта через оператор new, reflection, клонирование, protected native object clone(), класс object, objectoutputstream, java.lang.object, области видимости переменных, protected, public, private, sun.reflect.magicaccessorimpl, magic accessor
В нашей программе курса «Разработчик Java» есть такая тема. Что такое основы Java думаем, понятно. Например, цикл for или ветвление if-else или создание объекта через оператор new.
Как основы могут быть «углублёнными»?
Рассмотрим следующий базовый вопрос: как создать объект в Java? Первый и самый правильный ответ: через оператор new. Что может быть более базовым в объектно-ориентированном языке, чем
Object object = new Object();Теперь усложним вопрос: как создать объект в Java без использования new? И на этот вопрос есть два ответа: Reflection и клонирование.
Можно создать объект, если у вас есть объект класса Class этого класса:
Object instance = Class.forName("java.lang.Object").newInstance();То есть вы можете получить новый объект класса, зная только название этого класса (конечно, если объект типа Class для этого класса может быть загружен класс-лоадером).
Можно сделать класс Clonable и вызвать protected native Object clone() класса Object. В результате вы получите копию объекта, которую для вас сделает нативный метод.
Хорошо, немного усложним задачу
Как создать объект в Java, не вызывая его конструктор? А кто сказал, что нельзя так сделать? Так работает ObjectOutputStream, когда десериализует объект. Вызывает
sun.reflect.ReflectionFactory.newConstructorForSerialization()Фактически, создавая объект произвольного класса через вызов конструктора java.lang.Object.
Что ещё можно углублённо-базового рассмотреть? Вот, например, области видимости переменных: public, protected, private. Интересно, что о них можно углублённого рассказать? Посмотрите sun.reflect.MagicAccessorImpl. Да-да magic accessor!
Есть вопрос? Напишите в комментариях!
Интерактивный практический курс о тонкостях и хитростях Java с глубоким разбором главных и самых важных частей языка
На протяжении всего обучения вы будете глубоко разбирать основные и самые важные аспекты языка, чтобы вы могли решать даже самые сложные задачи в своей работе. Каждое занятие включает теоретические материалы, практические примеры и задания, чтобы вы могли сразу применить полученные знания на практике.
Особенности курса:
Интерактивный и практический подход: каждый вебинар и домашнее задание содержат множество практических заданий, которые нужно решать в интерактивном режиме. Это поможет вам непосредственно применить полученные знания и улучшить свои навыки программирования.
Подготовка к собеседованиям: курс идеально подходит для подготовки к собеседованиям по языку Java. Мы сфокусировались на ключевых темах и вопросах, которые часто задают на интервью, чтобы вы могли успешно пройти любое испытание.
Культура чистого кода: вы узнаете выдающиеся практики и принципы, которые помогут вам создавать легко читаемый, понятный и легко расширяемый код. Эти навыки станут необходимым инструментом в вашем арсенале, позволяющим вам сотрудничать с другими разработчиками, повысить эффективность разработки и снизить сложность поддержки проектов.
Полное погружение в Java: наш курс предлагает полное погружение в язык Java. Вы узнаете о нюансах и тонкостях языка, которые помогут вам легко справляться с любыми задачами. Независимо от уровня вашего опыта, вы найдете ценные знания, которые повысят вашу профессиональную компетенцию.
Подготовка к сертификации Oracle Java Programmer (OCAJP): если вы планируете работать в международной компании, наш курс даст вам необходимые знания для успешной сдачи сертификации Oracle Java Programmer (OCAJP). Этот сертификат будет дополнительным преимуществом при поиске работы и повысит вашу ценность на рынке труда.
Курс рассчитан на:
- Java-разработчиков, которые хотят структурировать свои знания и лучше подготовиться к собеседованиям;
- Программистов, которые начали переходить на Java c других языков;
- Студентов-программистов, которые хотят изучить Java или улучшить своё знание ядра и тонкостей языка;
- Желающих подготовиться к сертификации Oracle Java Programmer (OCAJP).
Java. План действий
Сегодня в Java-проектах чаще всего используют такие инструменты как Maven и Gradle. Не обязательно изучать их досконально, но будет полезно разобраться, чем они отличаются друг от друга, на чём основаны, что такое task’и (в Gradle) и фазы с целями в Maven. Будет достаточно почитать о системах и развернуть на них пару-тройку небольших проектов. Сделать это довольно просто, а с подробностями разберётесь уже в условиях реальной работы.
Системы контроля версий и сервисы онлайн-хостинга
Система контроля версий — это то, что помогает программистам работать в команде над общим проектом, не “поломав” его, синхронизировать разрозненные куски кода, сделанные разными людьми, откатывать неудачные обновления и добавлять новые. Наиболее распространены две системы контроля версий. Одна из них — распределённая и называется Git, вторая — централизованная, по имени SVN (она же — Subversion). На сегодняшний день стандартом де-факто является Git. Работать с этой системой удобнее и легче, она поддерживается всеми IDE (впрочем, как и SVN). Работу с Git можно опробовать быстро и просто, благо, в сети на эту тему — масса информации. Например, доступный на русском интерактивный учебник GitHowTo (проходится очень быстро). Начинающему разработчику очень важно освоить сервисы онлайн-хостинга для систем контроля версий. Чаще всего они базируются на Git и их называют Git-платформами (хотя некоторые из них умеют работать с разными системами контроля версий). Самая популярная из них — GitHub. Также довольно распространены BitBucket и GitLab. Эти системы помогают хранить и извлекать код, а ещё — делать то, что умеет Git, только не через командную строку, а через интерфейс. Также GitHub позволяет проверять код, предлагать решения проблем непосредственно на сайте. Там же можно найти какой-нибудь чужой открытый проект и попробовать предложить свои решения по его улучшению. По сути, GitHub — своеобразная социальная сеть для разработчиков. Так что если вы ещё этого не сделали, обязательно создайте аккаунт на GitHub и размещайте там свои проекты. Также почитайте о GitLab и BitBucket, а если будет время — можно и опробовать, у них есть бесплатные версии. К слову, все эти платформы полностью интегрированы с современными IDE.
2. JDK API
В этом разделе выделены те JDK API, которые современному Java-разработчику нужно знать достаточно уверенно. Программисту не помешает время от времени заглядывать в исходный код этих библиотек, ориентироваться в них, понимать, когда их нужно применять и почему. Побочный эффект: если вы хорошо ориентируетесь в этих API, скорее всего вам будет гораздо проще успешно пройти собеседование.
Java Collection Framework — один из важнейших API языка Java, его должен знать каждый разработчик. Он представляет собой иерархию интерфейсов и реализаций стандартных структур данных в Java, таких как список, связанный список, множество, стек, очередь, хэш-таблица и многих других. Разработчик должен хорошо разбираться в классах ArrayList, HashMap, HashSet, LinkedHashSet, TreeSet и прочих, знать об их свойствах. В частности, нужно понимать, какие затраты по времени и памяти у той или иной коллекции идут на стандартные операции (индекс, поиск, вставка, удаление) и исходя из этого правильно применять их в своих проектах. Коллекции в Java реализованы очень хорошо, но если есть необходимость разработчик может предложить собственную реализацию. Программист, который отлично разбирается в коллекциях, может расширить или переопределить логику в уже написанных классах или же реализовать всё с нуля.
Java Concurrency API
Java изначально разработана с поддержкой параллельного программирования, а начиная с версии 5.0, язык включает высокоуровневые API для параллельных потоков. Так что грамотный Java-разработчик просто обязан хорошо разбираться в многопоточности и иметь представление об основных API из пакетов java.util.concurrent.*. Как минимум, нужно знать и чётко осознавать, что такое Thread, Runnable, блокировка объектов и синхронизация. Обязательно разберитесь в концепциях deadlock, livelock, состоянии гонки и что со всем этим делать. Чтобы чувствовать себя уверенно, изучите синхронизаторы из java.util.concurrent.*, например, Semaphore, CyclicBarrier, CountDownLatch, Phaser, Exchanger, CompleteableFuture и так далее. А ещё — интерфейсы Callable и Future.
Java I/O API
Устройство класса Object
3. Новые возможности Java 8
4. SQL, базы данных, JDBC
5. Фреймворки
Среди требований к Junior Java Developer сегодня всё чаще можно встретить “знание Spring, Hibernate, Spring Boot”. Изучить эти технологии самостоятельно — задача очень непростая, но, тем не менее, это возможно, особенно на поверхностном уровне. Более глубокое понимание придёт во время работы. Итак.
Этот фреймворк обеспечивает разработку приложения согласно паттерну Model — View — Controller, применяя слабо связанные готовые компоненты. Изучите этот паттерн (о паттернах проектирования речь идёт чуть ниже) и логику работы Spring MVC. На практике его используют довольно часто.
6. Библиотеки и фреймворки для тестирования
7. Сервисные библиотеки
В Java есть огромное количество сервисных библиотек, которые помогают решить практически любые задачи, стоящие перед разработчиком. Изучить их все невозможно, да и смысла особого в этом нет. А вот ориентироваться в них — отличная идея. Здесь выделим лишь несколько из тех, которые очень часто используются на практике.
Библиотеки для логирования
В первую очередь можно упомянуть log4j и Slf4j. Эти библиотеки разработаны для сокрытия реализации рутинных операций по логированию событий, которые происходят во время работы Java-приложений.
Библиотеки для JSON
Google Guava
Guava — проект с основными библиотеками для Java, разработанными Google. Здесь можно найти новые типы коллекций (multimap, multiset и другие), неизменяемые коллекции, графы, функциональные, утилиты для параллелизма, ввода/вывода, хэширования, обработки строк и многое другое.
Apache Commons
Commons — огромный проект, содержащий множество полезных Java-утилит самого разного предназначения. Так, библиотеки Apache Commons лежат в основе Tomcat, Hibernate и ряда других крупных проектов. Библиотек в Apache Commons очень много. Упомянём Commons IO, которая упрощает выполнения операций ввода-вывода, Commons CSV для работы с csv-файлами, Commons Math для работы со сложными математическими и статистическими операциями и вычислениями, Commons CLI для анализа аргументов командной строки.
8. API-клиенты
9. Паттерны проектирования
10. Дополнительные знания
Алгоритмы и структуры данных
“Алгоритмы и структуры данных” — это название целого курса, читаемого в технических вузах. В нём раскрываются теоретические основы построения разных структур данных. А на практических занятиях с ними учатся работать — класть и извлекать данные, искать и сортировать их. Собственно, под “Алгоритмами” в таком словосочетании понимают именно сортировку и поиск. За долгие годы специалисты в области Computer Science разработали множество алгоритмов. Некоторые из них носят учебный характер, так как при относительной простоте реализации они не слишком эффективны в работе. Например, работают медленно, что может быть ощутимо на больших пулах данных. Или же потребляют много памяти. Другие алгоритмы оказались очень эффективны. Настолько, что их внесли в официальные библиотеки большинства языков программирования. Соответственно, сегодня не обязательно разрабатывать такие алгоритмы самостоятельно. Достаточно знать, где они лежат.
Основы верстки должны знать все. Эти знания получить довольно просто, и если вы вдруг ещё этого не сделали, уделите этому занятию пару дней. Заодно отдохнёте от более сложных тем.
Опросы разработчиков показывают, что даже те из них, кто не имеет абсолютно никакого отношения к фронтенд-разработке, время от времени писали скрипты на JavaScript. Знание основ этого языка можно считать правилом хорошего тона, поэтому не поленитесь, почитайте о нём и создайте десяток-другой скриптов. Лишним не будет.