Как сделать эффективными обсуждения по видеосвязи
Поговорим об использовании видеосвязи для удаленной работы. Бесплатные тарифы программ для видеоконференций и простые практики эффективных обсуждений.
https://prglb.ru/3enw4
Поговорим об использовании видеосвязи для удаленной работы. Бесплатные тарифы программ для видеоконференций и простые практики эффективных обсуждений.
https://prglb.ru/3enw4
Java Language Features, 2nd Edition (2018)
Многие опытные Java-программисты не знают всех тонкостей и интересных фишек языка, о которых автор рассказывает в данной книге. Более того, в ней содержатся интересные замечания о ядре Java и советы по написанию более эффективного рабочего кода.
Скачать книгу
Многие опытные Java-программисты не знают всех тонкостей и интересных фишек языка, о которых автор рассказывает в данной книге. Более того, в ней содержатся интересные замечания о ядре Java и советы по написанию более эффективного рабочего кода.
Скачать книгу
Telegram
Книги для программистов (reserved)
Java Language Features, 2nd Edition (2018)
Автор: Kishori Sharan
Автор: Kishori Sharan
Еще более углубленный курс по Java - Java Beans, JMX, форматирование строк и другое.
https://www.youtube.com/playlist?list=PL786bPIlqEjQifz13w4nAE9d-53HW387n
https://www.youtube.com/playlist?list=PL786bPIlqEjQifz13w4nAE9d-53HW387n
YouTube
More advanced
Share your videos with friends, family, and the world
#вопросы_с_собеседований
Несколько вопросов по многопоточности
1. Каким образом можно создать поток?
2. Чем различаются Thread и Runnable?
3. В чём заключается разница между методами start() и run()?
Несколько вопросов по многопоточности
1. Каким образом можно создать поток?
2. Чем различаются Thread и Runnable?
3. В чём заключается разница между методами start() и run()?
❓Каким образом можно создать поток?
✔️Создать потомка класса Thread и переопределить его метод run();
✔️Создать объект класса Thread, передав ему в конструкторе экземпляр класса, реализующего интерфейс Runnable. Этот интерфейс содержит метод run(), который будет выполняться в новом потоке. Поток закончит выполнение, когда завершится его метод run().
✔️Вызвать метод submit() у экземпляра класса, реализующего интерфейс ExecutorService, передав ему в качестве параметра экземпляр класса, реализующего интерфейс Runnable или Callable (содержит метод call(), в котором описывается логика выполнения).
❓Чем различаются Thread и Runnable?
Thread - это класс, некоторая надстройка над физическим потоком.
Runnable - это интерфейс, представляющий абстракцию над выполняемой задачей.
Помимо того, что Runnable помогает разрешить проблему множественного наследования, несомненный плюс от его использования состоит в том, что он позволяет логически отделить логику выполнения задачи от непосредственного управления потоком.
❓В чём заключается разница между методами start() и run()?
Несмотря на то, что start() вызывает метод run() внутри себя, это не то же самое, что просто вызов run(). Если run() вызывается как обычный метод, то он вызывается в том же потоке и никакой новый поток не запускается, как это происходит в случае, когда вы вызываете метод start().
✔️Создать потомка класса Thread и переопределить его метод run();
✔️Создать объект класса Thread, передав ему в конструкторе экземпляр класса, реализующего интерфейс Runnable. Этот интерфейс содержит метод run(), который будет выполняться в новом потоке. Поток закончит выполнение, когда завершится его метод run().
✔️Вызвать метод submit() у экземпляра класса, реализующего интерфейс ExecutorService, передав ему в качестве параметра экземпляр класса, реализующего интерфейс Runnable или Callable (содержит метод call(), в котором описывается логика выполнения).
❓Чем различаются Thread и Runnable?
Thread - это класс, некоторая надстройка над физическим потоком.
Runnable - это интерфейс, представляющий абстракцию над выполняемой задачей.
Помимо того, что Runnable помогает разрешить проблему множественного наследования, несомненный плюс от его использования состоит в том, что он позволяет логически отделить логику выполнения задачи от непосредственного управления потоком.
❓В чём заключается разница между методами start() и run()?
Несмотря на то, что start() вызывает метод run() внутри себя, это не то же самое, что просто вызов run(). Если run() вызывается как обычный метод, то он вызывается в том же потоке и никакой новый поток не запускается, как это происходит в случае, когда вы вызываете метод start().
#вопросы_с_собеседований
1. Почему в некоторых интерфейсах вообще не определяют методов?
2. Для чего в Java используются статические блоки инициализации?
1. Почему в некоторых интерфейсах вообще не определяют методов?
2. Для чего в Java используются статические блоки инициализации?
❓Почему в некоторых интерфейсах вообще не определяют методов?
❗️Это так называемые маркерные интерфейсы. Они просто указывают, что класс относится к определенному типу. Примером может послужить интерфейс Clonable, который указывает на то, что класс поддерживает механизм клонирования.
❓Для чего в Java используются статические блоки инициализации?
❗️Статические блоки инициализации используются для выполнения кода, который должен выполниться один раз при инициализации класса загрузчиком классов, в момент, предшествующий созданию объектов этого класса при помощи конструктора. Такой блок (в отличие от нестатических, принадлежащих конкретному объекту класса) принадлежит только самому классу (объекту метакласса Class).
❗️Это так называемые маркерные интерфейсы. Они просто указывают, что класс относится к определенному типу. Примером может послужить интерфейс Clonable, который указывает на то, что класс поддерживает механизм клонирования.
❓Для чего в Java используются статические блоки инициализации?
❗️Статические блоки инициализации используются для выполнения кода, который должен выполниться один раз при инициализации класса загрузчиком классов, в момент, предшествующий созданию объектов этого класса при помощи конструктора. Такой блок (в отличие от нестатических, принадлежащих конкретному объекту класса) принадлежит только самому классу (объекту метакласса Class).
Серия туториалов по Maven, фреймворку для автоматизации сборки проектов.
https://youtu.be/Fe6lrsPmseo
https://youtu.be/Fe6lrsPmseo
YouTube
Maven Tutorial #1 - Overview Part 1
Free Maven Resources
Maven Reference Manual
http://www.luv2code.com/mavenreferencemanual
Maven eBooks
http://www.luv2code.com/mavenebooks
Maven Cheat Sheet
http://www.luv2code.com/mavencheatsheet
Developing with Eclipse and Maven (bonus ebook)
http:/…
Maven Reference Manual
http://www.luv2code.com/mavenreferencemanual
Maven eBooks
http://www.luv2code.com/mavenebooks
Maven Cheat Sheet
http://www.luv2code.com/mavencheatsheet
Developing with Eclipse and Maven (bonus ebook)
http:/…
Ребята из Тинькофф Старт открывают регистрацию на онлайн-трансляцию посвященную летней программе!
26 марта в 19:00 расскажут об открытых направлениях и как подготовиться к вступительным испытаниям для каждого из них. А еще обсудят внутреннюю кухню, особенности обучения и истории ребят, которые когда-то начинали с Тинькофф Старт, а теперь строят карьеру в Тинькофф.
Для участия в трансляции зарегистрируйтесь и ищите письмо-подтверждение со ссылкой на трансляцию в указанной почте: https://prglb.ru/5wr14
Напоминаем: у ребят есть телеграм-канал, где удобно следить за всеми новостями Тинькофф Образования: @tinkoff_fintech
26 марта в 19:00 расскажут об открытых направлениях и как подготовиться к вступительным испытаниям для каждого из них. А еще обсудят внутреннюю кухню, особенности обучения и истории ребят, которые когда-то начинали с Тинькофф Старт, а теперь строят карьеру в Тинькофф.
Для участия в трансляции зарегистрируйтесь и ищите письмо-подтверждение со ссылкой на трансляцию в указанной почте: https://prglb.ru/5wr14
Напоминаем: у ребят есть телеграм-канал, где удобно следить за всеми новостями Тинькофф Образования: @tinkoff_fintech
maven-cheat-sheet.pdf
147.3 KB
Шпаргалка по Maven для начинающих
#вопросы_с_собеседований
1. Необходимо добавить 1 млн. элементов, какую структуру из фреймворка Collections вы будете использовать?
2. Как происходит удаление элементов из ArrayList? Как меняется в этом случае размер ArrayList?
1. Необходимо добавить 1 млн. элементов, какую структуру из фреймворка Collections вы будете использовать?
2. Как происходит удаление элементов из ArrayList? Как меняется в этом случае размер ArrayList?
«Ни в одном месте не проучился дольше года». Интервью с Java-разработчиком
Взяли интервью у выпускника курса Java Mentor, который мы ранее рекомендовали нашим подписчикам. В комментариях под постом вы можете задать вопросы выпускнику лично.
https://prglb.ru/3gkr7
Взяли интервью у выпускника курса Java Mentor, который мы ранее рекомендовали нашим подписчикам. В комментариях под постом вы можете задать вопросы выпускнику лично.
https://prglb.ru/3gkr7
❓Необходимо добавить 1 млн. элементов, какую структуру из фреймворка Collections вы будете использовать?
❗️Однозначный ответ можно дать только исходя из информации о том, в какую часть списка происходит добавление элементов, что потом будет происходить с элементами списка, существуют ли какие-то ограничения по памяти или скорости выполнения. см. Чем отличается ArrayList от LinkedList
❓Как происходит удаление элементов из ArrayList? Как меняется в этом случае размер ArrayList?
❗️При удалении произвольного элемента из списка, все элементы находящиеся «правее» смещаются на одну ячейку влево и реальный размер массива (его емкость, capacity) не изменяется никак. Механизм автоматического «расширения» массива существует, а вот автоматического «сжатия» нет, можно только явно выполнить «сжатие» командой trimToSize().
❗️Однозначный ответ можно дать только исходя из информации о том, в какую часть списка происходит добавление элементов, что потом будет происходить с элементами списка, существуют ли какие-то ограничения по памяти или скорости выполнения. см. Чем отличается ArrayList от LinkedList
❓Как происходит удаление элементов из ArrayList? Как меняется в этом случае размер ArrayList?
❗️При удалении произвольного элемента из списка, все элементы находящиеся «правее» смещаются на одну ячейку влево и реальный размер массива (его емкость, capacity) не изменяется никак. Механизм автоматического «расширения» массива существует, а вот автоматического «сжатия» нет, можно только явно выполнить «сжатие» командой trimToSize().
Telegram
Библиотека джависта
❓Чем отличается ArrayList от LinkedList? В каких случаях лучше использовать первый, а в каких второй?
❗️ArrayList:
✔️Доступ к произвольному элементу по индексу за константное время O(1);
✔️Доступ к элементам по значению за линейное время O(N);
✔️Вставка в…
❗️ArrayList:
✔️Доступ к произвольному элементу по индексу за константное время O(1);
✔️Доступ к элементам по значению за линейное время O(N);
✔️Вставка в…
Суперподборка: более 70 бесплатных русскоязычных онлайн-курсов по IT-специальностям
Математика, алгоритмы, языки программирования (включая Java) и другие курсы по анализу данных, вебу, мобильной разработке, тестированию. Плюс наши ключевые статьи по каждой из тем.
https://prglb.ru/3a6ih
Математика, алгоритмы, языки программирования (включая Java) и другие курсы по анализу данных, вебу, мобильной разработке, тестированию. Плюс наши ключевые статьи по каждой из тем.
https://prglb.ru/3a6ih
#вопросы_с_собеседований
Что произойдет со сборщиком мусора, если выполнение метода finalize() требует ощутимо много времени, или в процессе выполнения будет выброшено исключение?
Что произойдет со сборщиком мусора, если выполнение метода finalize() требует ощутимо много времени, или в процессе выполнения будет выброшено исключение?
Непосредственно вызов finalize() происходит в отдельном потоке Finalizer (java.lang.ref.Finalizer.FinalizerThread), который создаётся при запуске виртуальной машины (в статической секции при загрузке класса Finalizer). Методы finalize() вызываются последовательно в том порядке, в котором были добавлены в список сборщиком мусора. Соответственно, если какой-то finalize() зависнет, он подвесит поток Finalizer, но не сборщик мусора. Это в частности означает, что объекты, не имеющие метода finalize(), будут исправно удаляться, а вот имеющие будут добавляться в очередь, пока поток Finalizer не освободится, не завершится приложение или не кончится память.
То же самое применимо и выброшенным в процессе finalize() исключениям: метод runFinalizer() у потока Finalizer игнорирует все исключения выброшенные в момент выполнения finalize(). Таким образом возникновение исключительной ситуации никак не скажется на работоспособности сборщика мусора.
То же самое применимо и выброшенным в процессе finalize() исключениям: метод runFinalizer() у потока Finalizer игнорирует все исключения выброшенные в момент выполнения finalize(). Таким образом возникновение исключительной ситуации никак не скажется на работоспособности сборщика мусора.
Java: Learn Java in One Day and Learn It Well (2016)
Автор: Jamie Chan
Вы всегда хотели научиться программированию, но боитесь, что это будет слишком сложно для вас? Или, возможно, вы знаете другие языки программирования, и заинтересованы в быстром изучении языка Java? В этих случаях вам поможет данная книга. Вам не придется тратить много времени на изучение Java при помощи этой книги.
Скачать книгу
Автор: Jamie Chan
Вы всегда хотели научиться программированию, но боитесь, что это будет слишком сложно для вас? Или, возможно, вы знаете другие языки программирования, и заинтересованы в быстром изучении языка Java? В этих случаях вам поможет данная книга. Вам не придется тратить много времени на изучение Java при помощи этой книги.
Скачать книгу
Telegram
Книги для программистов (reserved)
Java: Learn Java in One Day and Learn It Well (2016)
Автор: Jamie Chan
Автор: Jamie Chan
#вопросы_с_собеседований
Что такое «локальный класс»? Каковы его особенности?
Что такое «локальный класс»? Каковы его особенности?
Local inner class (Локальный класс) - это вложенный класс, который может быть декларирован в любом блоке, в котором разрешается декларировать переменные. Как и простые внутренние классы (Member inner class) локальные классы имеют имена и могут использоваться многократно. Как и анонимные классы, они имеют окружающий их экземпляр только тогда, когда применяются в нестатическом контексте.
Локальные классы имеют следующие особенности:
✔️Видны только в пределах блока, в котором объявлены;
✔️Не могут быть объявлены как private/public/protected или static;
✔️Не могут иметь внутри себя статических объявлений методов и классов, но могут иметь финальные статические поля, проинициализированные константой;
✔️Имеют доступ к полям и методам обрамляющего класса;
✔️Могут обращаться к локальным переменным и параметрам метода, если они объявлены с модификатором final.
Локальные классы имеют следующие особенности:
✔️Видны только в пределах блока, в котором объявлены;
✔️Не могут быть объявлены как private/public/protected или static;
✔️Не могут иметь внутри себя статических объявлений методов и классов, но могут иметь финальные статические поля, проинициализированные константой;
✔️Имеют доступ к полям и методам обрамляющего класса;
✔️Могут обращаться к локальным переменным и параметрам метода, если они объявлены с модификатором final.
#вопросы_с_собеседований
1. Почему метод clone() объявлен в классе Object, а не в интерфейсе Cloneable?
2. Какой способ клонирования предпочтительней?
1. Почему метод clone() объявлен в классе Object, а не в интерфейсе Cloneable?
2. Какой способ клонирования предпочтительней?
❓ Почему метод clone() объявлен в классе Object, а не в интерфейсе Cloneable?
❗️Метод clone() объявлен в классе Object с указанием модификатора native, чтобы обеспечить доступ к стандартному механизму поверхностного копирования объектов. Одновременно он объявлен и как protected, чтобы нельзя было вызвать этот метод у не переопределивших его объектов. Непосредственно интерфейс Cloneable является маркерным (не содержит объявлений методов) и нужен только для обозначения самого факта, что данный объект готов к тому, чтобы быть клонированным. Вызов переопределённого метода clone() у не Cloneable объекта вызовет выбрасывание CloneNotSupportedException.
❓Какой способ клонирования предпочтительней?
❗️Наиболее безопасным и, следовательно, предпочтительным способом клонирования является использование специализированного конструктора копирования:
✔️Отсутствие ошибок наследования (не нужно беспокоиться, что у наследников появятся новые поля, которые не будут склонированы через метод clone());
✔️Поля для клонирования указываются явно;
✔️Возможность клонировать даже final поля.
❗️Метод clone() объявлен в классе Object с указанием модификатора native, чтобы обеспечить доступ к стандартному механизму поверхностного копирования объектов. Одновременно он объявлен и как protected, чтобы нельзя было вызвать этот метод у не переопределивших его объектов. Непосредственно интерфейс Cloneable является маркерным (не содержит объявлений методов) и нужен только для обозначения самого факта, что данный объект готов к тому, чтобы быть клонированным. Вызов переопределённого метода clone() у не Cloneable объекта вызовет выбрасывание CloneNotSupportedException.
❓Какой способ клонирования предпочтительней?
❗️Наиболее безопасным и, следовательно, предпочтительным способом клонирования является использование специализированного конструктора копирования:
✔️Отсутствие ошибок наследования (не нужно беспокоиться, что у наследников появятся новые поля, которые не будут склонированы через метод clone());
✔️Поля для клонирования указываются явно;
✔️Возможность клонировать даже final поля.