Процесс выполнения программы, целью которого является обнаружение ошибок
Обновлено: 21.11.2024
В следующей таблице описан процесс загрузки в системах на базе x86.
<р>1. Когда система включена, BIOS запускает самодиагностику для проверки аппаратного обеспечения и памяти системы. Система начинает загружаться автоматически, если ошибок не обнаружено. При обнаружении ошибок отображаются сообщения об ошибках с описанием вариантов восстановления.В это время запускается BIOS дополнительных аппаратных устройств.
<р>2. Программа загрузки BIOS пытается прочитать первый физический сектор с загрузочного устройства. Этот первый сектор диска на загрузочном устройстве содержит главную загрузочную запись mboot, которая загружается и выполняется. Если файл mboot не найден, отображается сообщение об ошибке. <р>3. Основная загрузочная запись mboot, которая содержит информацию о диске, необходимую для поиска активного раздела и расположения программы загрузки Solaris, pboot, загружает и выполняет pboot. <р>4. Программа загрузки Solaris pboot загружает bootblk , основную программу загрузки, целью которой является загрузка дополнительной программы загрузки, расположенной в файловой системе ufs. <р>5. Если имеется более одного загрузочного раздела, bootblk считывает таблицу fdisk, чтобы найти загрузочный раздел по умолчанию, строит и отображает меню доступных разделов. У вас есть 30-секундный интервал, чтобы выбрать альтернативный раздел для загрузки. Этот шаг выполняется только в том случае, если в системе присутствует более одного загрузочного раздела. <р>6. bootblk находит и выполняет вторичную загрузочную программу boot.bin или ufsboot в корневой ( / ) файловой системе. У вас есть 5-секундный интервал, чтобы прервать автоматическую загрузку, чтобы запустить Помощник по настройке устройств Solaris. <р>7. Вторичная загрузочная программа, boot.bin или ufsboot, запускает интерпретатор команд, который выполняет сценарий /etc/bootrc, предоставляющий меню вариантов загрузки системы. Действие по умолчанию — загрузить и выполнить ядро. У вас есть 5-секундный интервал, чтобы указать параметр загрузки или запустить интерпретатор загрузки. <р>8. Ядро инициализирует себя и начинает загрузку модулей, используя вторичную загрузочную программу (boot.bin или ufsboot) для чтения файлов. Когда ядро загрузит достаточно модулей для монтирования корневой ( / ) файловой системы, ядро отключает вторичную загрузочную программу и продолжает работу, используя свои собственные ресурсы. <р>9. Ядро создает пользовательский процесс и запускает процесс /sbin/init, который запускает другие процессы, читая файл /etc/inittab. <р>10. Процесс /sbin/init запускает сценарии управления запуском ( rc ), которые выполняют ряд других сценариев. Эти сценарии ( /sbin/rc* ) проверяют и монтируют файловые системы, запускают различные процессы и выполняют задачи по обслуживанию системы.Виртуальная машина Java — это программа, целью которой является выполнение других программ. Это простая идея, которая также является одним из лучших примеров программирования кунг-фу. JVM нарушила статус-кво для своего времени и продолжает поддерживать инновации в программировании сегодня.
Для чего используется JVM
Виртуальная машина JVM выполняет две основные функции: позволяет запускать программы Java на любом устройстве или в любой операционной системе (известный как принцип "Написать один раз, запускать везде"), а также управлять памятью программы и оптимизировать ее. Когда в 1995 году была выпущена Java, все компьютерные программы были написаны для конкретной операционной системы, а программная память управлялась разработчиком программного обеспечения. Так что JVM стала откровением.
JavaWorld/IDG
Рисунок 1. Общий вид JVM
Полезно иметь техническое определение JVM, а разработчики программного обеспечения думают об этом повседневно. Давайте разберем их:
- Техническое определение. JVM — это спецификация программы, которая выполняет код и предоставляет среду выполнения для этого кода.
- Повседневное определение: JVM — это то, как мы запускаем наши Java-программы. Мы настраиваем параметры JVM, а затем полагаемся на нее для управления программными ресурсами во время выполнения.
Когда разработчики говорят о JVM, мы обычно имеем в виду процесс, работающий на машине, особенно на сервере, который представляет и контролирует использование ресурсов для приложения Java. Сравните это с спецификацией JVM, в которой описаны требования для создания программы, выполняющей эти задачи.
Кто разрабатывает и поддерживает JVM?
JVM широко развернута, интенсивно используется и поддерживается некоторыми очень умными программистами, как корпоративными, так и открытыми. Проект OpenJDK является результатом решения Sun Microsystems открыть исходный код Java. OpenJDK продолжает управлять Java под управлением Oracle, и большая часть тяжелой работы в наши дни выполняется инженерами Oracle.
Управление памятью в JVM
Самым распространенным взаимодействием с работающей JVM является проверка использования памяти в куче и стеке. Наиболее распространенной корректировкой является настройка параметров памяти JVM.
Сборка мусора
До Java вся программная память управлялась программистом. В Java память программы управляется JVM. JVM управляет памятью с помощью процесса, называемого сборкой мусора, который постоянно идентифицирует и удаляет неиспользуемую память в программах Java. Сборка мусора происходит внутри работающей JVM.
Сначала Java подвергалась многочисленной критике за то, что она не так "близка к металлу", как C++, и, следовательно, не так быстра. Особенно спорным был процесс вывоза мусора. С тех пор было предложено и использовано множество алгоритмов и подходов для сборки мусора. Благодаря последовательной разработке и оптимизации сбор мусора значительно улучшился.
Что означает «близко к металлу»?
Когда программисты говорят, что язык программирования или платформа "близки к металлу", мы имеем в виду, что разработчик может программно (путем написания кода) управлять памятью операционной системы. Теоретически программисты могут повысить производительность наших программ, оговорив, сколько ресурсов используется и когда их следует выбрасывать. В большинстве случаев делегирование управления памятью такому усовершенствованному процессу, как JVM, обеспечивает более высокую производительность и меньшее количество ошибок, чем выполнение этого самостоятельно.
JVM в трех частях
Можно сказать, что у JVM есть три аспекта: спецификация, реализация и экземпляр. Рассмотрим каждый из них.
1. Спецификация JVM
Во-первых, JVM — это спецификация программного обеспечения. Несколько зацикленно спецификация JVM подчеркивает, что детали ее реализации не определены в спецификации, чтобы обеспечить максимальный творческий подход к ее реализации:
"Чтобы правильно реализовать виртуальную машину Java, вам нужно только уметь читать формат файла класса и правильно выполнять указанные в нем операции."
Дж.С. Бах однажды так описал создание музыки:
"Все, что вам нужно сделать, это нажать нужную клавишу в нужное время".
Итак, все, что нужно сделать JVM, — это правильно запускать Java-программы. Звучит просто, может даже показаться простым со стороны, но это грандиозная задача, особенно с учетом мощности и гибкости языка Java.
JVM как виртуальная машина
JVM – это виртуальная машина, на которой переносимые файлы классов Java выполняются. Быть виртуальной машиной означает, что JVM является абстракцией лежащей в основе реальной машины, такой как сервер, на котором выполняется ваша программа. Независимо от того, какая операционная система или аппаратное обеспечение на самом деле присутствует, JVM создает предсказуемую среду для запуска программ. Однако, в отличие от настоящей виртуальной машины, JVM не создает виртуальную операционную систему. Было бы точнее описать JVM как управляемую среду выполнения или виртуальную машину процесса.
2. Реализации JVM
Реализация спецификации JVM приводит к фактической программе, которая является реализацией JVM. На самом деле существует множество реализаций JVM, как открытых, так и проприетарных. HotSpot JVM OpenJDK является эталонной реализацией и остается одной из наиболее тщательно проверенных кодовых баз в мире. HotSpot также является наиболее часто используемой JVM.
Почти все лицензированные JVM созданы как ответвления OpenJDK и HotSpot JVM, включая лицензированный JDK Oracle. Разработчики, создающие лицензионную версию OpenJDK, часто руководствуются желанием добавить улучшения производительности для конкретной ОС. Как правило, вы загружаете и устанавливаете JVM как составную часть Java Runtime Environment (JRE).
3. Экземпляр JVM
После того как спецификация JVM будет реализована и выпущена как программный продукт, вы сможете загрузить и запустить ее как программу. Эта загруженная программа является экземпляром (или созданной версией) JVM.
В большинстве случаев, когда разработчики говорят о "JVM", мы имеем в виду экземпляр JVM, работающий в среде разработки программного обеспечения или в рабочей среде. Вы можете сказать: «Эй, Ананд, сколько памяти использует JVM на этом сервере?» или "Я не могу поверить, что создал циклический вызов, и ошибка переполнения стека привела к сбою моей JVM. Какая ошибка новичка!"
Что такое спецификация программного обеспечения?
Спецификация программного обеспечения (или спецификация) – это удобочитаемый проектный документ, описывающий, как должна работать программная система. Цель спецификации — создать четкое описание и требования для разработчиков кода.
Загрузка и выполнение файлов классов в JVM
Мы говорили о роли JVM в запуске Java-приложений, но как она выполняет свои функции? Для запуска приложений Java виртуальная машина Java зависит от загрузчика классов Java и механизма выполнения Java.
Загрузчик классов Java в JVM
Все в Java является классом, и все приложения Java построены из классов. Приложение может состоять из одного класса или тысяч.Чтобы запустить приложение Java, JVM должна загрузить скомпилированные файлы .class в контекст, например на сервер, где к ним можно получить доступ. JVM зависит от своего загрузчика классов для выполнения этой функции.
Загрузчик классов Java — это часть JVM, которая загружает классы в память и делает их доступными для выполнения. Загрузчики классов используют такие методы, как отложенная загрузка и кэширование, чтобы сделать загрузку классов настолько эффективной, насколько это возможно. Тем не менее, загрузка классов не является эпической головоломкой, как, скажем, переносимое управление памятью во время выполнения, поэтому методы сравнительно просты.
Каждая виртуальная машина Java включает загрузчик классов. Спецификация JVM описывает стандартные методы для запроса и управления загрузчиком классов во время выполнения, но реализация JVM отвечает за реализацию этих возможностей. С точки зрения разработчика базовые механизмы загрузчика классов обычно представляют собой черный ящик.
Механизм исполнения в JVM
После того, как загрузчик классов выполнил свою работу по загрузке классов, JVM начинает выполнение кода в каждом классе. механизм выполнения — это компонент JVM, который обрабатывает эту функцию. Механизм выполнения необходим для работающей JVM. Фактически, для всех практических целей, это экземпляр JVM.
Выполнение кода включает в себя управление доступом к системным ресурсам. Исполнительный механизм JVM находится между работающей программой (с ее требованиями к файловым, сетевым ресурсам и памяти) и операционной системой, которая предоставляет эти ресурсы.
Как исполнительный механизм управляет системными ресурсами
Системные ресурсы можно разделить на две широкие категории: память и все остальное.
Напоминаем, что JVM отвечает за удаление неиспользуемой памяти, а сборка мусора — это механизм, который выполняет это удаление. JVM также отвечает за выделение и поддержку ссылочной структуры, которую разработчик считает само собой разумеющейся. Например, исполнительный механизм JVM отвечает за преобразование ключевого слова new в Java в специфичный для ОС запрос на выделение памяти.
Помимо памяти, исполнительный механизм управляет ресурсами для доступа к файловой системе и сетевого ввода-вывода. Поскольку JVM может взаимодействовать между операционными системами, это непростая задача. В дополнение к потребностям каждого приложения в ресурсах механизм выполнения должен реагировать на каждую среду ОС. Вот как JVM может справляться с запросами в дикой природе.
Эволюция JVM: прошлое, настоящее, будущее
В 1995 году JVM представила две революционные концепции, которые с тех пор стали стандартом для современной разработки программного обеспечения: "Напиши один раз, работай где угодно" и автоматическое управление памятью. В то время функциональная совместимость программного обеспечения была смелой концепцией, но сегодня немногие разработчики задумывались об этом дважды. Точно так же, в то время как нашим предкам-разработчикам приходилось самим управлять памятью программ, мое поколение выросло на сборке мусора.
Можно сказать, что Джеймс Гослинг и Брендан Эйх изобрели современное программирование, но в последующие десятилетия тысячи других усовершенствовали и доработали их идеи. В то время как виртуальная машина Java изначально предназначалась только для Java, сегодня она эволюционировала, чтобы поддерживать многие языки сценариев и программирования, включая Scala, Groovy и Kotlin. Заглядывая вперед, трудно представить себе будущее, в котором JVM не будет занимать видное место в ландшафте разработки.
Все о JVM
Эта статья "Что такое JVM? Введение в виртуальную машину Java" была первоначально опубликована JavaWorld .
Мэттью Тайсон – основатель Dark Horse Group, Inc. Он верит в технологии, ориентированные на людей. Когда Мэтт не играет на гитаре, он исследует отдаленные районы и философские глубинки. Он пишет для JavaWorld с 2007 года.
Предоставляет способ обработки некоторых или всех возможных ошибок, которые могут возникнуть в заданном блоке кода, при этом код все еще выполняется.
Синтаксис
Части
Термин | Определение |
---|---|
tryStatements | Необязательно. Оператор(ы), в которых может возникнуть ошибка. Может быть составным оператором. |
Catch | Необязательно. Допускается несколько блоков Catch. Если при обработке блока Try возникает исключение, каждый оператор Catch проверяется в текстовом порядке, чтобы определить, обрабатывает ли он исключение, причем исключение представляет собой сгенерированное исключение. |
исключение | Необязательно. Любое имя переменной. Начальное значение исключения — это значение сгенерированной ошибки. Используется с Catch для указания обнаруженной ошибки. Если опущено, оператор Catch перехватывает любое исключение. |
type | Необязательно. Указывает тип фильтра класса. Если значение исключения относится к типу, заданному типом, или к производному типу, идентификатор привязывается к объекту исключения. |
Когда | Необязательно .Оператор Catch с предложением When перехватывает исключения только тогда, когда выражение оценивается как True . Предложение When применяется только после проверки типа исключения, а выражение может ссылаться на идентификатор, представляющий исключение. |
выражение | Необязательно. Должен быть неявно конвертирован в Boolean . Любое выражение, описывающее универсальный фильтр. Обычно используется для фильтрации по номеру ошибки. Используется с ключевым словом When для указания обстоятельств, при которых возникает ошибка. |
catchStatements | Необязательно. Оператор(ы) для обработки ошибок, возникающих в соответствующем блоке Try. Может быть составным оператором. |
Exit Try | Необязательно. Ключевое слово, выходящее за рамки Try. Ловить. Наконец структура. Выполнение возобновляется с кода, следующего за оператором End Try. Оператор finally все равно будет выполняться. Не разрешено в блоках «Наконец». |
Наконец | Необязательно. Блок finally всегда выполняется, когда выполнение покидает любую часть Try. Оператор Catch. |
finallyStatements | Необязательно. Оператор(ы), которые выполняются после обработки всех других ошибок. |
Завершить попытку | Завершает попытку. Ловить. Наконец, структура. |
Примечания
Если вы ожидаете, что конкретное исключение может возникнуть в определенном разделе кода, поместите код в блок Try и используйте блок Catch, чтобы сохранить управление и обработать исключение, если оно возникнет.
Инструкция Try…Catch состоит из блока Try, за которым следует одно или несколько предложений Catch, определяющих обработчики различных исключений. Когда в блоке Try генерируется исключение, Visual Basic ищет инструкцию Catch, обрабатывающую исключение. Если соответствующий оператор Catch не найден, Visual Basic проверяет метод, вызвавший текущий метод, и так далее вверх по стеку вызовов. Если блок Catch не найден, Visual Basic отображает пользователю сообщение о необработанном исключении и останавливает выполнение программы.
Вы можете использовать более одного оператора Catch в операторе Try…Catch. В этом случае порядок предложений Catch имеет значение, поскольку они проверяются по порядку. Перехватывайте более конкретные исключения перед менее конкретными.
Следующие условия оператора Catch являются наименее конкретными и будут перехватывать все исключения, производные от класса Exception. Обычно вы должны использовать один из этих вариантов в качестве последнего блока Catch в Try. Ловить. Наконец, структура, после перехвата всех конкретных исключений, которые вы ожидаете. Поток управления никогда не сможет достичь блока Catch, который следует за любым из этих вариантов.
Тип — Exception , например: Catch ex As Exception
У оператора нет переменной исключения, например: Catch
Когда инструкция Try…Catch…Finally вложена в другой блок Try, Visual Basic сначала проверяет каждую инструкцию Catch в самом внутреннем блоке Try. Если соответствующий оператор Catch не найден, поиск переходит к операторам Catch внешнего блока Try…Catch…Finally.
Локальные переменные из блока Try недоступны в блоке Catch, поскольку они являются отдельными блоками. Если вы хотите использовать переменную более чем в одном блоке, объявите переменную вне файла Try. Ловить. Наконец структура.
Инструкция Try…Catch…Finally доступна в виде фрагмента кода IntelliSense. В диспетчере фрагментов кода разверните шаблоны кода — если, для каждого, попытка перехвата, свойство и т. д., а затем — обработка ошибок (исключения). Дополнительные сведения см. в разделе Фрагменты кода.
Окончательно заблокировать
Если у вас есть один или несколько операторов, которые должны быть выполнены перед выходом из структуры Try, используйте блок finally. Управление переходит к блоку finally непосредственно перед тем, как он выходит из структуры Try…Catch. Это верно, даже если исключение возникает где-либо внутри структуры Try.
Блок finally полезен для запуска любого кода, который должен выполняться даже при наличии исключения. Управление передается блоку finally независимо от того, как используется метод Try. Блокировать выходы.
Код в блоке finally выполняется, даже если ваш код встречает оператор Return в блоке Try или Catch. Управление не переходит от блока Try или Catch к соответствующему блоку finally в следующих случаях:
В блоке Try или Catch встречается оператор End.
В блоке Try или Catch возникает исключение StackOverflowException.
Недопустимо явно передавать выполнение в блок finally. Передача выполнения из блока finally недействительна, за исключением исключения.
Если оператор Try не содержит хотя бы одного блока Catch, он должен содержать блок finally.
Если вам не нужно перехватывать определенные исключения, оператор Using ведет себя как блок Try…Finally и гарантирует удаление ресурсов независимо от того, как вы выходите из блока. Это верно даже для необработанного исключения. Дополнительные сведения см. в разделе Использование инструкции.
Аргумент исключения
Аргумент исключения блока Catch является экземпляром класса Exception или класса, производного от класса Exception. Экземпляр класса Exception соответствует ошибке, возникшей в блоке Try.
Свойства объекта Exception помогают определить причину и местоположение исключения. Например, свойство StackTrace перечисляет вызванные методы, которые привели к исключению, помогая вам найти, где в коде произошла ошибка. Message возвращает сообщение, описывающее исключение. HelpLink возвращает ссылку на связанный файл справки. InnerException возвращает объект Exception, вызвавший текущее исключение, или возвращает Nothing, если исходное Exception отсутствует.
Соображения по использованию оператора Try…Catch
Используйте оператор Try…Catch только для оповещения о возникновении необычных или непредвиденных программных событий. Причины этого включают следующее:
Перехват исключений во время выполнения создает дополнительные накладные расходы и, вероятно, будет медленнее, чем предварительная проверка во избежание исключений.
Если блок Catch обрабатывается неправильно, сообщение об исключении может быть передано пользователям неправильно.
Обработка исключений усложняет программу.
Не всегда требуется оператор Try…Catch для проверки условия, которое может возникнуть. В следующем примере проверяется, существует ли файл, прежде чем пытаться его открыть. Это уменьшает потребность в перехвате исключения, выдаваемого методом OpenText.
Убедитесь, что код в блоках Catch может правильно сообщать об исключениях пользователям, будь то с помощью потокобезопасного ведения журнала или соответствующих сообщений. В противном случае исключения могут остаться неизвестными.
Асинхронные методы
Если вы пометите метод модификатором Async, вы можете использовать в методе оператор Await. Оператор с оператором Await приостанавливает выполнение метода до завершения ожидаемой задачи. Задача представляет текущую работу. Когда задача, связанная с оператором Await, завершается, выполнение возобновляется в том же методе. Дополнительные сведения см. в разделе Поток управления в асинхронных программах.
Задача, возвращенная асинхронным методом, может завершиться в состоянии сбоя, что указывает на то, что она завершена из-за необработанного исключения. Задача также может завершиться в состоянии отмены, в результате чего из выражения ожидания будет выброшено исключение OperationCanceledException. Чтобы перехватить любой тип исключения, поместите выражение Await, связанное с задачей, в блок Try и перехватите исключение в блоке Catch. Пример приведен ниже в этом разделе.
Задача может находиться в состоянии сбоя, потому что за ее сбой были ответственны несколько исключений. Например, задача может быть результатом вызова Task.WhenAll. Когда вы ожидаете такой задачи, перехваченное исключение является лишь одним из исключений, и вы не можете предсказать, какое исключение будет перехвачено. Пример приведен ниже в этом разделе.
Выражение Await не может находиться внутри блока Catch или блока finally.
Итераторы
Функция итератора или метод доступа Get выполняет пользовательскую итерацию по коллекции. Итератор использует оператор Yield для возврата каждого элемента коллекции по одному. Вы вызываете функцию итератора, используя For Each. Следующее заявление.
Инструкция Yield может находиться внутри блока Try. Блок Try, содержащий оператор Yield, может иметь блоки Catch и блок finally. См. пример в разделе "Попробуйте блоки в Visual Basic" Итераторов.
Инструкция Yield не может находиться внутри блока Catch или блока finally.
Если тело For Each (вне функции итератора) выдает исключение, блок Catch в функции итератора не выполняется, но выполняется блок finally в функции итератора. Блок Catch внутри функции итератора перехватывает только те исключения, которые возникают внутри функции итератора.
Ситуации с частичным доверием
В ситуациях с частичным доверием, например, если приложение размещено на общем сетевом ресурсе, попробуйте. Ловить. Наконец, не перехватывает исключения безопасности, возникающие до вызова метода, содержащего вызов. В следующем примере, когда вы помещаете его на общий ресурс сервера и запускаете оттуда, возникает ошибка «System.Security.SecurityException: Request Failed». Дополнительные сведения об исключениях безопасности см. в описании класса SecurityException.
В такой ситуации с частичным доверием вы должны поместить оператор Process.Start в отдельный Sub . Первоначальный вызов Sub завершится ошибкой. Это позволяет попробовать. Catch, чтобы перехватить его до запуска Sub, содержащего Process.Start, и создания исключения безопасности.
Примеры
Структура Try. Ловить. Наконец
Следующий пример иллюстрирует структуру файла Try. Ловить. Наконец заявление.
Исключение в методе, вызванном из блока Try
В следующем примере метод CreateException создает исключение NullReferenceException . Код, создающий исключение, не находится в блоке Try.Поэтому метод CreateException не обрабатывает исключение. Метод RunSample обрабатывает исключение, поскольку вызов метода CreateException находится в блоке Try.
Пример включает операторы Catch для нескольких типов исключений, упорядоченных от наиболее конкретных к наиболее общим.
Утверждение "Поймать, когда"
В следующем примере показано, как использовать оператор Catch When для фильтрации условного выражения. Если условное выражение оценивается как True , выполняется код в блоке Catch.
Вложенные инструкции Try
В следующем примере используется оператор Try…Catch, содержащийся в блоке Try. Внутренний блок Catch генерирует исключение, для свойства InnerException которого задано исходное исключение. Внешний блок Catch сообщает о своем собственном исключении и внутреннем исключении.
Обработка исключений для асинхронных методов
В следующем примере показана обработка исключений для асинхронных методов. Чтобы перехватить исключение, относящееся к асинхронной задаче, выражение Await находится в блоке Try вызывающего объекта, а исключение перехватывается в блоке Catch.
Раскомментируйте строку Throw New Exception в примере, чтобы продемонстрировать обработку исключений. Исключение перехватывается в блоке Catch, для свойства IsFaulted задачи устанавливается значение True , а для свойства Exception.InnerException задачи устанавливается значение исключения.
Раскомментируйте строку Throw New OperationCancelledException, чтобы продемонстрировать, что происходит при отмене асинхронного процесса. Исключение перехватывается в блоке Catch, а свойству IsCanceled задачи присваивается значение True . Однако при некоторых условиях, которые не относятся к этому примеру, для параметра IsFaulted устанавливается значение True, а для параметра IsCanceled — значение False .
Nvidia запустила облачную версию своей платформы Omniverse для 3D-моделирования. Компания также представила Omniverse .
Преодолейте сбои AWS, научившись создавать многорегиональную архитектуру, обеспечивающую отказоустойчивость в случае аварии.
Чтобы добиться высокой доступности и отказоустойчивости в AWS, ИТ-администраторы должны сначала понять различия между двумя моделями.
Хотя императивное программирование часто используется, декларативный подход оказался полезным перед лицом требований к сложным, .
На первый взгляд, разница между микроприложениями и микросервисами просто связана с проблемами внешнего интерфейса и серверной части. Но .
IDP могут предоставить продуктивную и безопасную среду для групп разработчиков. Рассмотрите все за и против, чтобы увидеть, является ли внутренний .
Преднамеренный саботаж пакета NPM в знак протеста против войны в Украине усугубляет и без того сложную угрозу цепочке поставок программного обеспечения.
Будь то создание автоматизированных инструментов для сертификации ОС или изучение eBPF как способа обеспечения безопасности цепочки поставок в домене .
DevOps строится на совместной работе и общении, а межличностные навыки укрепляют эту основу. Откройте для себя шесть мягких навыков, чтобы .
Насколько хорошо вы знаете обработку исключений в Java? Эти 10 сложных вопросов с несколькими вариантами ответов для проверенных и непроверенных .
Не позволяйте возникновению RuntimeException в Java привести к остановке вашего кода. Вот 10 примеров того, как избежать .
Ключом к коду без ошибок является знание наиболее распространенных типов ошибок во время выполнения в Java, а также знание того, как их .
Считаете, что готовы к сертификационному экзамену AWS Certified Solutions Architect? Проверьте свои знания, ответив на эти 12 вопросов и.
Amazon заявила, что ее система мониторинга микроавтобусов предназначена исключительно для обеспечения безопасности водителей. Но многие отраслевые эксперты обеспокоены этим.
Amazon хотела бы укрепить свое глобальное присутствие, но гигант электронной коммерции сегодня сталкивается с препятствиями и проблемами, которых у него не было.
Читайте также: