🏗️ Ненужная сложность: почему мы неправильно проектируем программное обеспечение
В этой статье расскажем про причины неправильного проектирования ПО и предложим средства для устранения анти-шаблона ненужной сложности.
🔗 Основной сайт
🔗 Зеркало
В этой статье расскажем про причины неправильного проектирования ПО и предложим средства для устранения анти-шаблона ненужной сложности.
🔗 Основной сайт
🔗 Зеркало
👨💻🗺️ Кому в IT жить хорошо: Indeed опубликовал список из 19 наиболее востребованных спецов за рубежом в 2023 году
Рассказываем, кем нужно быть и какой стек начать изучать, чтобы жить в Кремниевой долине и зарабатывать от $150 000.
🔗 Основной сайт
🔗 Зеркало
Рассказываем, кем нужно быть и какой стек начать изучать, чтобы жить в Кремниевой долине и зарабатывать от $150 000.
🔗 Основной сайт
🔗 Зеркало
Java Bean
JavaBeans - это стандартный подход к созданию переносимых и повторно используемых компонентов. Они представляют собой классы, которые следуют определенным соглашениям и обеспечивают удобный способ управления состоянием и поведением объектов.
Основные характеристики JavaBeans:
1. Класс должен быть публичным и иметь открытый конструктор без аргументов.
2. Приватные поля класса должны быть доступны с помощью геттеров и сеттеров (
3. Класс должен быть сериализуемым, то есть должен реализовывать интерфейс
JavaBeans - это стандартный подход к созданию переносимых и повторно используемых компонентов. Они представляют собой классы, которые следуют определенным соглашениям и обеспечивают удобный способ управления состоянием и поведением объектов.
Основные характеристики JavaBeans:
1. Класс должен быть публичным и иметь открытый конструктор без аргументов.
2. Приватные поля класса должны быть доступны с помощью геттеров и сеттеров (
getter
и setter
методы).3. Класс должен быть сериализуемым, то есть должен реализовывать интерфейс
Serializable
.JavaBeans
также могут иметь дополнительные свойства, такие как события и методы уведомления, которые позволяют другим компонентам реагировать на изменения состояния.Как разбить строку на подстроки по заданному разделителю?
Мы можем использовать метод split(String regex) для разделения строки на массив символов, используя в качестве разделителя регулярное выражение.
Метод split(String regex, int numOfStrings) является перегруженным методом для разделения строки на заданное количество строк. Мы можем использовать обратную черту для использования специальных символов регулярных выражений в качестве обычных символов.
#вопросы_с_собеседований
Мы можем использовать метод split(String regex) для разделения строки на массив символов, используя в качестве разделителя регулярное выражение.
Метод split(String regex, int numOfStrings) является перегруженным методом для разделения строки на заданное количество строк. Мы можем использовать обратную черту для использования специальных символов регулярных выражений в качестве обычных символов.
#вопросы_с_собеседований
Скомпилируется ли код с картинки?
Да, код будет скомпилирован, потому что он следует спецификации функционального интерфейса, определяющей только один абстрактный метод. Второй метод, count, является методом по умолчанию, который не увеличивает количество абстрактных методов.
#вопросы_с_собеседований
Да, код будет скомпилирован, потому что он следует спецификации функционального интерфейса, определяющей только один абстрактный метод. Второй метод, count, является методом по умолчанию, который не увеличивает количество абстрактных методов.
#вопросы_с_собеседований
Как не допустить сериализацию?
Чтобы не допустить автоматическую сериализацию можно переопределить private методы для создания исключительной ситуации NotSerializableException.
Любая попытка записать или прочитать этот объект теперь приведет к возникновению исключительной ситуации.
#код
Чтобы не допустить автоматическую сериализацию можно переопределить private методы для создания исключительной ситуации NotSerializableException.
Любая попытка записать или прочитать этот объект теперь приведет к возникновению исключительной ситуации.
#код
✍️ «Библиотека программиста» находится в поиске переводчика технических статей
Обязанности
• Перевод технических статей, документации и руководств с английского на русский язык.
• Редактирование и корректура переведенных текстов для обеспечения высокого качества и своевременной доставки переводов.
Что значит редактирование? Просто так взять DeepL и слово в слово перевести статью не получится?
• Не получится. Как правило, 10–40% текста — «вода». Переводчик должен убрать все лишнее и оставить главное, чтобы читатель не тратил время на чтение «забавной истории из жизни моего питомца, который внес неоценимый вклад в написание данного материала».
Мы предлагаем
• Удаленку.
• Официальное трудоустройство.
• Своевременную оплату за выполненную работу.
➡️ Заполнить анкету ⬅️
Я хорошо программирую, но пишу «так себе». Что делать?
Если вы хорошо программируете, но навыки письма немного отстают, пройдите наш бесплатный курс на Степике «Статьи для IT: как объяснять и распространять значимые идеи».
Обязанности
• Перевод технических статей, документации и руководств с английского на русский язык.
• Редактирование и корректура переведенных текстов для обеспечения высокого качества и своевременной доставки переводов.
Что значит редактирование? Просто так взять DeepL и слово в слово перевести статью не получится?
• Не получится. Как правило, 10–40% текста — «вода». Переводчик должен убрать все лишнее и оставить главное, чтобы читатель не тратил время на чтение «забавной истории из жизни моего питомца, который внес неоценимый вклад в написание данного материала».
Мы предлагаем
• Удаленку.
• Официальное трудоустройство.
• Своевременную оплату за выполненную работу.
➡️ Заполнить анкету ⬅️
Я хорошо программирую, но пишу «так себе». Что делать?
Если вы хорошо программируете, но навыки письма немного отстают, пройдите наш бесплатный курс на Степике «Статьи для IT: как объяснять и распространять значимые идеи».
FileOutputStream vs. FileWriter
Запись файлов на Java осуществляется двумя способами: FileOutputStream и FileWriter. Какой именно метод выбрать, зависит от конкретной задачи.
FileOutputStream предназначен для записи потоков необработанных байтов. Это делает его идеальным решением для работы, например, с изображениями.
У FileWriter другое призвание: работа с потоками символов. Так что если вы пишете текстовые файлы, выбирайте этот метод.
Запись файлов на Java осуществляется двумя способами: FileOutputStream и FileWriter. Какой именно метод выбрать, зависит от конкретной задачи.
FileOutputStream предназначен для записи потоков необработанных байтов. Это делает его идеальным решением для работы, например, с изображениями.
У FileWriter другое призвание: работа с потоками символов. Так что если вы пишете текстовые файлы, выбирайте этот метод.
Какие существуют особенности использования вложенных классов: статических и внутренних? В чем заключается разница между ними?
☕️ Вложенные классы могут обращаться ко всем членам обрамляющего класса, в том числе и приватным.
☕️ Для создания объекта статического вложенного класса объект внешнего класса не требуется.
☕️ Из объекта статического вложенного класса нельзя обращаться к не статическим членам обрамляющего класса напрямую, а только через ссылку на экземпляр внешнего класса.
☕️ Обычные вложенные классы не могут содержать статических методов, блоков инициализации и классов. Статические вложенные классы - могут.
☕️ В объекте обычного вложенного класса хранится ссылка на объект внешнего класса. Внутри статической такой ссылки нет. Доступ к экземпляру обрамляющего класса осуществляется через указание .this после его имени. Например: Outer.this.
#вопросы_с_собеседований
☕️ Вложенные классы могут обращаться ко всем членам обрамляющего класса, в том числе и приватным.
☕️ Для создания объекта статического вложенного класса объект внешнего класса не требуется.
☕️ Из объекта статического вложенного класса нельзя обращаться к не статическим членам обрамляющего класса напрямую, а только через ссылку на экземпляр внешнего класса.
☕️ Обычные вложенные классы не могут содержать статических методов, блоков инициализации и классов. Статические вложенные классы - могут.
☕️ В объекте обычного вложенного класса хранится ссылка на объект внешнего класса. Внутри статической такой ссылки нет. Доступ к экземпляру обрамляющего класса осуществляется через указание .this после его имени. Например: Outer.this.
#вопросы_с_собеседований
Объединение двух массивов
Наиболее лаконичный способ объединить элементы двух массивов – это воспользоваться классом ArrayUtils из Commons Lang.
Подробнее можно ознакомиться здесь.
Наиболее лаконичный способ объединить элементы двух массивов – это воспользоваться классом ArrayUtils из Commons Lang.
Подробнее можно ознакомиться здесь.
Какой формат обучающих материалов предпочитаете? Статьи, видео, гайды, задачи, или личное наставничество?
#интерактив
#интерактив
Программа по сравнению элементов массива и букв строки
Для сравнения элементов массива и букв строки в Java можно использовать следующую программу.
Программа создает массив из символов {'a', 'c', 'd', 'f', 'g'} и строку "abcdefg". В цикле происходит сравнение элементов массива и букв строки с помощью метода charAt(). Если элемент массива равен букве строки, то выводится сообщение об этом.
Затем массив сортируется по возрастанию методом sort() из класса Arrays. Отсортированный массив выводится на экран.
#код
Для сравнения элементов массива и букв строки в Java можно использовать следующую программу.
Программа создает массив из символов {'a', 'c', 'd', 'f', 'g'} и строку "abcdefg". В цикле происходит сравнение элементов массива и букв строки с помощью метода charAt(). Если элемент массива равен букве строки, то выводится сообщение об этом.
Затем массив сортируется по возрастанию методом sort() из класса Arrays. Отсортированный массив выводится на экран.
#код
Набор инструментов для развертывания и обучения моделей глубокого обучения с помощью JVM.
Language: Java
💥Stars: 12980
📝Forks: 4952
https://github.com/deeplearning4j/deeplearning4j
Language: Java
💥Stars: 12980
📝Forks: 4952
https://github.com/deeplearning4j/deeplearning4j
GitHub
GitHub - deeplearning4j/deeplearning4j: Suite of tools for deploying and training deep learning models using the JVM. Highlights…
Suite of tools for deploying and training deep learning models using the JVM. Highlights include model import for keras, tensorflow, and onnx/pytorch, a modular and tiny c++ library for running mat...
Узнаем самый средний элемент коллекции
В этом примере используется List numbers, который содержит числа. С помощью Collections.sort() список чисел сортируется в порядке возрастания. Затем вычисляется индекс середины списка. Если размер списка четный, то найдутся два средних элемента, их среднее значение вычисляется и выводится на экран. Если размер списка нечетный, то выводится только один средний элемент.
Пример вывода (для списка чисел [1, 2, 3, 4, 5, 6, 7, 8]):
Средние элементы: 4, 5
Среднее значение: 4.5
В этом примере используется List numbers, который содержит числа. С помощью Collections.sort() список чисел сортируется в порядке возрастания. Затем вычисляется индекс середины списка. Если размер списка четный, то найдутся два средних элемента, их среднее значение вычисляется и выводится на экран. Если размер списка нечетный, то выводится только один средний элемент.
Пример вывода (для списка чисел [1, 2, 3, 4, 5, 6, 7, 8]):
Средние элементы: 4, 5
Среднее значение: 4.5
Инкапсуляция
Инкапсуляция в Java является механизмом обёртывания данных (переменных) и кода, работающего с данными (методами), в одно целое. В инкапсуляции переменные класса будут скрыты от других классов и доступ к ним может быть получен только с помощью метода их текущего класса. По-другому это называется скрытием данных.
Для достижения инкапсуляции в Java:
☕️ Объявите переменные класса как private.
☕️ Предоставьте public к методам установки и получения (сеттеру и геттеру) для изменения и просмотра значений переменных.
Преимущества инкапсуляции:
☕️ Поля класса можно сделать только для чтения или только для записи.
☕️ Класс может иметь полный контроль над тем, что хранится в его полях.
Инкапсуляция в Java является механизмом обёртывания данных (переменных) и кода, работающего с данными (методами), в одно целое. В инкапсуляции переменные класса будут скрыты от других классов и доступ к ним может быть получен только с помощью метода их текущего класса. По-другому это называется скрытием данных.
Для достижения инкапсуляции в Java:
☕️ Объявите переменные класса как private.
☕️ Предоставьте public к методам установки и получения (сеттеру и геттеру) для изменения и просмотра значений переменных.
Преимущества инкапсуляции:
☕️ Поля класса можно сделать только для чтения или только для записи.
☕️ Класс может иметь полный контроль над тем, что хранится в его полях.
👩💻 Как можно создать потоки в Java?
Автор перечисляет и показывает пять способов создать и запустить потоки в Java.
Смотреть видео
Автор перечисляет и показывает пять способов создать и запустить потоки в Java.
Смотреть видео
Что такое «анонимные классы»? Где они применяются?
Это вложенный локальный класс без имени, который разрешено декларировать в любом месте обрамляющего класса, разрешающем размещение выражений. Создание экземпляра анонимного класса происходит одновременно с его объявлением. В зависимости от местоположения анонимный класс ведет себя как статический либо как нестатический вложенный класс - в нестатическом контексте появляется окружающий его экземпляр.
Анонимные классы имеют несколько ограничений:
• Их использование разрешено только в одном месте программы - месте его создания;
• Применение возможно только в том случае, если после порождения экземпляра нет необходимости на него ссылаться;
• Реализует лишь методы своего интерфейса или суперкласса, т.е. не может объявлять каких-либо новых методов, так как для доступа к ним нет поименованного типа.
Анонимные классы обычно применяются для:
• создания объекта функции (function object), например, реализация интерфейса Comparator;
• создания объекта процесса (process object), такого как экземпляры классов Thread, Runnable и подобных;
• в статическом методе генерации;
• инициализации открытого статического поля final, которое соответствует сложному перечислению типов, когда для каждого экземпляра в перечислении требуется отдельный подкласс.
#вопросы_с_собеседований
Это вложенный локальный класс без имени, который разрешено декларировать в любом месте обрамляющего класса, разрешающем размещение выражений. Создание экземпляра анонимного класса происходит одновременно с его объявлением. В зависимости от местоположения анонимный класс ведет себя как статический либо как нестатический вложенный класс - в нестатическом контексте появляется окружающий его экземпляр.
Анонимные классы имеют несколько ограничений:
• Их использование разрешено только в одном месте программы - месте его создания;
• Применение возможно только в том случае, если после порождения экземпляра нет необходимости на него ссылаться;
• Реализует лишь методы своего интерфейса или суперкласса, т.е. не может объявлять каких-либо новых методов, так как для доступа к ним нет поименованного типа.
Анонимные классы обычно применяются для:
• создания объекта функции (function object), например, реализация интерфейса Comparator;
• создания объекта процесса (process object), такого как экземпляры классов Thread, Runnable и подобных;
• в статическом методе генерации;
• инициализации открытого статического поля final, которое соответствует сложному перечислению типов, когда для каждого экземпляра в перечислении требуется отдельный подкласс.
#вопросы_с_собеседований
Напишите минимальный неблокирующий стек (всего два метода — push() и pop()) с использованием Semaphore.
Ответ на картинке.
#код
Ответ на картинке.
#код