Атаки на веб-безопасность, о которых вы должны знать

Узнайте об атаках на веб-безопасность и о том, как их предотвратить. В этой статье я подробно расскажу о 5 атаках, которые должен знать каждый веб-разработчик.

Как разработчики, мы знаем подводные камни Интернета — шлюзы, которые злоумышленники могут использовать для кражи личных данных, выкачивания денег и вообще сеять хаос. Но если мы собираемся создавать водонепроницаемые приложения, мы должны постоянно обновлять нашу базу знаний и готовиться к любому возможному нападению.

В этом посте мы собираемся обсудить пять наиболее распространенных форм атак. Мы обсудим другие примеры в следующих статьях, но эти «большие пятерки» должны стать основой вашего режима безопасности.

Что такое атака на веб-безопасность?

Атаки на веб-безопасность (или безопасность веб-приложений) — это действия, выполняемые для использования слабых мест и уязвимостей приложения.

Обычно в атаке участвуют две стороны: злоумышленник (преступник) и жертва (пользователь).

Злоумышленник (преступник)

Атакующий.png

Рис. 1. Представление злоумышленника в этой статье

Это люди, которые нацеливаются на систему, пользователя или учетную запись, чтобы получить доступ в незаконных целях. Получив доступ, они крадут данные, деньги, учетные данные и другие важные активы. Злоумышленником может быть человек, программа или бот в любой части мира.

Жертва (Пользователь)

Жертва.png

Рисунок 2: Представление жертвы/пользователя в этой статье

Это человек, на которого злоумышленник оказывает негативное воздействие. Любой может стать жертвой злонамеренной онлайн-активности, если не примет необходимых мер предосторожности; некоторые жертвы не особенно разбираются в Интернете, но другие обладают значительным объемом знаний. Жертвы подвергаются атакам злоумышленников из-за уязвимостей приложений, которые они используют ежедневно.

Пять основных типов атак на веб-безопасность

В этой статье мы сосредоточимся конкретно на следующих атаках:

  • Межсайтовый скриптинг (XSS)
  • Фишинг
  • кликджекинг
  • Подделка межсайтовых запросов (CSRF)
  • Обход пути (или каталога)

Есть и другие атаки, которые следует учитывать, такие как SQL Injection, Brute Force, DoS, DDoS и многие другие... но мы сохраним их для будущих статей.

1. Межсайтовый скриптинг (XSS)

В межсайтовом скриптинге (XSS) злоумышленники внедряют вредоносный скрипт в легитимную ссылку на веб-сайт и отправляют его жертве. Злоумышленник идентифицирует веб-сайт как цель для атаки после оценки его слабости и уязвимости. Жертва обычно получает ссылку, встроенную в сообщение электронной почты.

Многие браузеры не могут обнаружить вредоносный код. Поэтому, когда жертва переходит по ссылке, браузер делает вывод, что ссылка пришла из надежного источника, загружает сайт и выполняет вредоносный скрипт. После выполнения скрипт может собирать конфиденциальную информацию, токены и файлы cookie, хранящиеся в браузере, и отправлять их злоумышленнику. Затем злоумышленник использует эту украденную информацию без ведома жертвы.

На рисунке ниже показано взаимодействие между злоумышленником и жертвой во время XSSатаки.

XSS.png

Рисунок 3: Представление XSS-атаки

Мы разделяем XSS на три основные категории:

  • Хранимая XSS-атака: при хранимой XSS-атаке вредоносные сценарии постоянно хранятся на сервере цели, в их базах данных и хранилищах файлов. Ее также называют постоянной XSS-атакой и обычно считают наиболее опасным типом XSS-атаки. Эта атака обычно выполняется с использованием раздела комментариев на странице/форуме, журналов или любого другого носителя, который принимает вводимые пользователем данные и сохраняется во внутреннем хранилище.
  • Отраженная XSS-атака: отраженная XSS-атака не сохраняет вредоносный скрипт в хранилище. Сценарий выполняется на стороне клиента, когда пользователя обманом заставляют щелкнуть ссылку, содержащую его.
  • Атака XSS на основе DOM: как и в случае с Reflected XSS Attack, злоумышленник использует целевой URL-адрес с вредоносным скриптом. Сценарий выполняет и изменяет объектную модель документа (DOM) браузера.

Вот несколько примеров внедрения скриптов на основе различных событий:

  • <body onload=alert(1)>- Срабатывает при загрузке элемента.
  • <style>@keyframes x{}</style><xss style="animation-name:x" onwebkitanimationstart="alert(1)"></xss>- Срабатывает, когда начинается анимация CSS.

Как предотвратить XSS

Как и при любом другом типе атаки на систему безопасности, злоумышленник может внедрить вредоносный скрипт только тогда, когда веб-сайт или приложение уязвимы. Поэтому лучший способ предотвратить нападение — принять необходимые меры предосторожности. Выполняя следующие действия, вы значительно продвинетесь в предотвращении XSS-атак:

  • Не доверяйте пользовательскому вводу . Любой пользовательский ввод, который выполняется и создает вывод из вашего веб-приложения, может подвергнуть приложение XSS-атаке. Рассматривайте все входные данные как потенциально опасные. Это должно относиться как к внутренним, так и к внешним пользователям приложения.
  • Очистка ввода . Используйте библиотеку HTML для очистки ввода пользователя, чтобы предотвратить или закодировать любую злонамеренную попытку внедрить сценарий через ввод.
  • Выполняйте регулярное сканирование . Существует множество инструментов безопасности, которые создают подробные отчеты на основе сканирования XSS. Burp Suite — отличный инструмент, как и Zap (с открытым исходным кодом).
  • Установите для HttpOnlyфлага значение true — когда вы устанавливаете HttPOnlyфлаг trueдля файлов cookie, клиентский JavaScript не может получить к ним доступ. Стандартной практикой безопасности является защита этого флага от XSS-атак.
  • Настройте брандмауэр веб-приложений — различные инструменты позволяют брандмауэрам веб-приложений обнаруживать и фильтровать вредоносные атаки до того, как они проникнут в ваше приложение. Брандмауэр защищает вас от большинства инъекционных атак.
  • Повышение осведомленности . Вам и вашей команде необходимо повышать осведомленность об атаке XSS и быть в курсе того, что происходит вокруг вас. Поэтому пройдите соответствующее обучение и включите тестовые примеры, связанные с XSS, в свой план тестирования безопасности.

2. Фишинг

Давайте перейдем к следующему типу атаки, Phishing. При фишинговой атаке злоумышленник выдает себя за законную сторону и отправляет жертве электронные письма или текстовые сообщения, содержащие ссылки на фишинговые веб-сайты. Жертва предполагает, что сообщение заслуживает доверия, и открывает ссылку в своем браузере. Как только ссылка открыта, злоумышленник может украсть личные данные жертвы, учетные данные и банковскую информацию, а затем выполнить такие действия, как кража и шантаж.

На рисунке ниже показано взаимодействие между злоумышленником и жертвой во время Phishingатаки.

Фишинг.png

Рисунок 4: Представление фишинговой атаки

Давайте теперь рассмотрим пример фишинговой атаки, инициированной с использованием электронной почты. Электронное письмо предлагает читателю шанс выиграть огромную сумму, приняв участие в конкурсе.

Phishing_Example.png

Рисунок 5: Пример фишингового письма

Как вы можете видеть на изображении выше, существует множество признаков того, что электронное письмо подозрительно и может привести к фишинговой атаке. Несколько срочных вопросов, которые нужно задать:

  • Вы обычно получаете электронные письма от этого отправителя? Это подозрительный отправитель?
  • Предусмотрено ли какое-либо шифрование для защиты электронной почты?
  • Субъект говорит о выгодном предложении или о чем-то необычном?
  • Контент побуждает вас переходить по ссылкам?
  • Когда вы наводите курсор на ссылки, указывают ли они на что-то необычное или подозрительное?

Лучше всего относиться к такому электронному письму или сообщению с особой осторожностью и следить за тем, чтобы вы не попали в ловушку злоумышленника.

Как предотвратить фишинг

Мы можем попытаться предотвратить фишинговую атаку, выполнив следующие действия:

  • Осознание - В этом мире нет ничего бесплатного. Ни один незнакомец никогда не даст вам деньги, дома или автомобили, не требуя чего-то взамен, поэтому вы можете надежно удалить такие электронные письма и сообщения, которые приходят к вам. Если вы получаете такие электронные письма на свой рабочий адрес, немедленно сообщите о них в соответствующую группу. Вы также можете повысить осведомленность, рассказав своим друзьям и семье.
  • СПАМ-фильтр — настройте спам-фильтр в своем почтовом клиенте. Большинство приложений электронной почты поставляются с мощным спам-фильтром, и вы должны настроить его в соответствии со своими потребностями.
  • Проверьте настройки безопасности электронной почты . Проверьте сведения о полученном электронном письме. Поле securityговорит No encryption? Это веская причина игнорировать электронное письмо.
  • Проверьте HTTPS URL-адресов. Когда вы наводите курсор на ссылку, встроенную в содержимое электронной почты, отображается ли URL-адрес с https? Если нет, не нажимайте.
  • Усильте настройки своего браузера. Вы также можете изменить настройки безопасности своего браузера, чтобы многие такие подозрительные электронные письма могли быть заблокированы и предупреждены.

3. Кликджекинг

Чтобы получить Clickjacking, злоумышленник обманом заставляет жертву щелкнуть элемент страницы, который им не виден. Жертва может быть обманом загружена вредоносным ПО, выполнена нежелательные транзакции и многие другие опасные действия.

Сначала злоумышленник отправляет электронное письмо с предложением, которое содержит ссылку на целевой веб-сайт. В предложении может быть потрясающая поездка в Майами или на Карибы, например. Но злоумышленник внедрил скрытый элемент пользовательского интерфейса (возможно, iFrame), который может инициировать перевод 2000 долларов на их банковский счет. Жертва переходит по ссылке и загружает форму предложения в браузер. Кликджекинг происходит, когда жертва нажимает на скрытый элемент пользовательского интерфейса; перевод осуществляется на банковский счет злоумышленника без ведома жертвы.

На рисунке ниже показано взаимодействие между злоумышленником и жертвой во время Clickjackingатаки.

кликджекинг.png

Рисунок 6: Представление атаки Clickjacking

Как предотвратить кликджекинг?

Большинство clickjackingпопыток выполняются с использованием iFrame, и мы можем защитить наши приложения с помощью X-Frame-Optionsзаголовка ответа. X-Frame-Options указывает, должен ли браузер разрешать отображение страницы внутри <iframe>тега. Существует три возможных значения X-Frame-Optionsзаголовка:

  • DENY: не позволяет отображать страницу внутри iframe.
  • SAMEORIGIN: разрешает загрузку страницы внутри iframe, но только из того же домена.
  • РАЗРЕШЕННЫЙ URL-адрес: разрешает загрузку страницы внутри iframe, но только по определенному URL-адресу.

Принятие этих мер предосторожности на стороне сервера снизит вероятность кликджекинга. На стороне клиента вы можете установить расширения для браузера, чтобы проверить его уязвимость.

4. Подделка межсайтовых запросов (CSRF)

Cross-Site Request[Forgery](http://forgery.is), или CSRF, является особенно инновационной и сложной формой атаки, с помощью которой злоумышленник обманом заставляет жертву выполнять нежелательные действия в веб-приложении, в котором они в настоящее время аутентифицированы .

Злоумышленник создает поддельный запрос денег (скажем, 2000 долларов) и встраивает его в сообщение, например электронное письмо, а затем отправляет его жертве. Жертва переходит по ссылке и по незнанию отправляет запрос в банк. Банк получает запрос. У банка нет возможности узнать, что запрос является результатом подделки, поэтому они разблокируют деньги, и злоумышленник получит их.

На рисунке ниже показано взаимодействие между злоумышленником и жертвой при атаке CSRF.

CSRF.png

Рисунок 7: Представление атаки CSRF

Как предотвратить CSRF-атаку

  • Смягчение на основе токенов . Для защиты можно использовать встроенную реализацию CSRF. На самом деле многие фреймворки, такие как .NET, имеют встроенные возможности. Вы также можете использовать существующие реализации защиты CSRF для приложений, созданных с использованием Java, Angular, PHP и многих других.
  • Файлы cookie SameSite — файлы cookie SameSiteпомогают браузеру решить, отправлять ли файлы cookie с межсайтовыми запросами. Возможные значения strict, laxи none.
  • Пользовательские заголовки запросов . Большинство современных веб-приложений используют запросы XHR и вызовы конечных точек API. Нам нужно использовать политику того же происхождения (SOP), чтобы ограничить добавление пользовательского заголовка (только с использованием JavaScript). Мы можем добавить собственный заголовок в запрос и проверить его наличие на стороне сервера. Обратите внимание, однако, что для максимальной эффективности этого варианта также требуется надежная конфигурация CORS .
  • Проверка происхождения . Мы можем проверить, откуда поступает запрос и куда направляется запрос. Сервер проверяет исходное и целевое происхождение на соответствие.
  • Защита на основе взаимодействия с пользователем . В качестве дополнительного уровня защиты мы можем использовать повторную аутентификацию и капчу.

Пожалуйста, обратитесь к Шпаргалке по защите от CSRF для более подробной информации.

5. Обход пути (или каталога)

Последняя атака веб-приложений, которую мы обсудим в этой статье, — это атака Path (or Directory) Traversal Attack. Эта форма атаки позволяет злоумышленнику читать любые файлы с сервера, на котором запущено приложение, открывая множество возможностей для обнаружения паролей, банковских реквизитов, секретной информации и различных других данных.

Злоумышленник может получить доступ к разрешенному пути для загрузки изображения и его отображения в браузере. Веб-сайт уязвим для Path (or Directory) Traversalатаки и позволяет злоумышленнику перейти к файлу `/etc/password. В операционной системе на основе Unix специальный файл содержит сведения о зарегистрированных пользователях, чтобы злоумышленник мог украсть важные данные с сервера.

На рисунке ниже показано взаимодействие между злоумышленником и жертвой во время Path(or Directory) Traversalатаки.

Directory_Traversal.png

Рисунок 8: Представление атаки Path Traversal

Как предотвратить атаки обхода пути (каталога)

  • Самый эффективный способ предотвратить такую ​​атаку — отклонить пользовательский ввод в API файловой системы.
  • Если мы не можем запретить пользователям вводить входные данные для API файловой системы, мы должны проверить входные данные перед их дальнейшей обработкой. После проверки приложение должно добавить ввод в файл base directory. Мы должны использовать этот путь к API файловой системы для canonicalizeпути и убедиться, что этот путь начинается с ожидаемого базового каталога. Вот фрагмент кода, который сделает это за нас.
File file = new File(BASE_DIRECTORY, input);
if (file.getCanonicalPath().startsWith(BASE_DIRECTORY)) {
    // do something...
}

 

Кого не волнует безопасность? Но заботиться и осознавать — не одно и то же. Прочтите, чтобы узнать о различных атаках в области веб-безопасности и кибербезопасности.

1. SQL-инъекция

При SQL injectionатаке злоумышленник ищет уязвимости в проверках пользовательского ввода приложения и конфигурации базы данных. Злоумышленник вводит вредоносные запросы, используя пользовательские данные (например, текстовое поле), чтобы выполнить их в базе данных.

После завершения выполнения злоумышленник может выполнить несколько вредоносных действий, в том числе:

  • Кража информации.
  • Удаление таблиц (что может позволить им удалить важные записи).
  • Доступ к данным, которые должны быть запрещены.

На рисунке ниже показано взаимодействие между злоумышленником и жертвой при атаке с внедрением SQL.

SQL-инъекция.png

Рисунок 3: Представление атаки SQL-инъекцией

Теперь давайте рассмотрим пару примеров атак с внедрением SQL:

Атака с использованием 1 = 1доброго вектора, который всегдаTrue

Предположим, приложение извлекает информацию об учетной записи клиента на основе уникального 6-значного PIN-кода. Клиент может ввести PIN-код в текстовое поле и отправить его для получения информации из базы данных.

1==1=true.png

Рисунок 4: Пользователь вводит пин-код и отправляет его

Предположим, что входное значение PIN-кода передается серверной службе, где мы создаем запрос SQL следующим образом:

const sql = "SELECT * FROM Customers WHERE CustPin = " + inputCustPin;

Теперь, если злоумышленник может передать значение вроде 456789 or 1=1, оператор SQL будет выглядеть так:

SELECT * FROM Customers WHERE CustId = 456789 or 1=1;

Таким образом, злоумышленник может получить доступ к информации обо всех учетных записях клиента из базы данных.

Атака с использованием выполнения нескольких запросов

Если злоумышленнику разрешено внедрить весь запрос, результат может быть очень серьезным. Это так же плохо, как удаление таблиц, удаление важной информации или неправильная настройка базы данных. Большинство приложений баз данных поддерживают выполнение нескольких запросов в виде пакета.

Давайте рассмотрим случай, когда злоумышленник отправляет следующую строку в качестве значения идентификатора клиента: 456789; DROP TABLE Dept.

партия.png

Рисунок 5: Использование выполнения пакетного запроса

Оператор SQL будет действительным и будет выглядеть следующим образом:

SELECT * FROM Customers WHERE CustId = 456789 ; DROP TABLE Dept;

К сожалению, приведенный выше запрос удалит всю таблицу Dept из базы данных.

Как предотвратить атаки SQL Injection?

  • Большинство атак с использованием SQL-инъекций происходят из-за отсутствия проверки пользовательского ввода. Поэтому мы должны убедиться, что поле ввода принимает только правильный тип данных. Например, поле электронной почты должно быть ограничено идентификаторами электронной почты. Нам также необходимо убедиться, что обычные ключевые слова SQL (например, DROP) по возможности извлекаются из пользовательского ввода.
  • Вы можете использовать параметры SQL в запросе SQL в качестве механизма предотвращения. Эти параметры оцениваются во время выполнения механизмом SQL, который правильно сопоставляет параметры, а также проверяет, подходит ли параметр для столбца.
  • Важно всегда выполнять сканирование с помощью инструмента веб-безопасности, чтобы вы могли оценить состояние своего приложения и знать, что нужно исправить.

2. Атака «Человек посередине»

В ходе Man in the Middle(MITM)атаки злоумышленник выдает себя за законного пользователя, чтобы украсть важную информацию, такую ​​как учетные данные для входа в систему, данные кредитной карты и даже более конфиденциальные данные.

Жертва никогда не понимает, что кто eavesdropping-то участвует в обмене конфиденциальной информацией. Точно так же конечная система никогда не распознает злоумышленника; он считает, что взаимодействует законная жертва.

На рисунке ниже показано, как злоумышленник выполняет роль посредника в общении между жертвой и целевыми системами.

Человек-в-середине.png

Рисунок 6: Представление атаки MITM

Как правило, MITMзлоумышленники нацелены на пользователей для получения финансовой выгоды и кражи личных данных. Злоумышленник сначала перехватывает связь, используя различные spoofingмеханизмы, такие как спуфинг IP и DNS. После перехвата злоумышленник использует методологии расшифровки, например SSL Hijacking, чтобы понять смысл сообщения. Последний этап атаки — притвориться жертвой и получить преимущество от атаки.

Как предотвратить атаку Человека посередине?

Большинство Man in the MIddleатак происходит из-за недостаточной осведомленности о методах обеспечения безопасности. Вы должны убедиться, что:

  • НЕ заходите на любой незащищенный веб-сайт. Доступ к сайтам только с протоколом HTTPS.
  • НЕ подключайтесь к общедоступному/открытому WIFI, особенно к защищенному паролем.
  • НЕ делитесь своей конфиденциальной информацией с кем-либо.

3. Сломанный контроль доступа

Управление доступом — это то, как вы управляете доступом пользователей к вашим приложениям, активам и ресурсам. Было бы лучше создать правила доступа, чтобы определить, кто и к чему имеет доступ и, что наиболее важно, что не разрешено. A Broken Access Controlпредоставляет злоумышленникам широкие возможности для доступа к тому, что им не положено, а затем использовать это.

На рисунке ниже показано, как злоумышленник получил доступ к базе данных HR, используя привилегии доступа роли HR. Злоумышленник также получил доступ к нескольким действиям ADMIN, используя неправильно настроенные API.

Сломанный-доступ-контроль.png

Рисунок 7: Представление атаки Broken Access Control

Согласно списку OWASP Top 10:2021 :

«94 % приложений были протестированы на предмет нарушения контроля доступа в той или иной форме, при этом средний уровень заболеваемости составил 3,81 %, и [это] имеет наибольшее количество случаев в предоставленном наборе данных — более 318 000».

Как предотвратить атаку Broken Access Control?

Вы можете предотвратить проблему Broken Access Control, убедившись в следующем:

  • Запретите любой доступ, а затем разрешите то, что требуется.
  • Обязательно периодически проверяйте и оценивайте права доступа.
  • Придерживайтесь политик при повышении привилегий.
  • Проверьте и подтвердите конфигурации CORS.
  • Защитите доступ к API с помощью необходимых токенов.

4. Отказ в обслуживании (DoS) и распределенный отказ в обслуживании (DDoS)

В Denial of Service(aka DoS), Злоумышленник нацеливается на компьютер или любые устройства, чтобы сделать их недоступными для доступа и использования. Злоумышленник наводняет целевую систему огромным объемом трафика, поэтому целевая система не может его обработать. Целевая система со временем становится недоступной для любых новых пользователей.

Злоумышленник также может замедлить целевую систему вместо того, чтобы сделать ее недоступной. Злоумышленник может использовать всю память ЦП, чтобы вызвать переполнение буфера памяти.

DoS.png

Рисунок 8: Представление DoS-атаки

Атака типа «отказ в обслуживании» (DoS) имеет еще один известный вариант, называемый «распределенный отказ в обслуживании» (DDoS). При DoS-атаке злоумышленник использует одно соединение с целевой системой, чтобы инициировать атаку. При DDoS-атаке злоумышленник использует несколько соединений, используя ботнет, чтобы инициировать атаку. DDoSдаже более распространен, чем DOS.

DDoS.png

Рисунок 9: Представление DDoS-атаки

Как предотвратить DoS и DDoS атаки?

Чтобы предотвратить DoS- или DDoS-атаку, вы должны сначала устранить любые сомнения и подтвердить, что это действительно атака. Ваше приложение может работать медленно из-за реальной проблемы, или ваш веб-сайт может стать недоступным из-за внезапного всплеска законного трафика, к которому вы не были готовы.

Однако, как только вы обнаружите атаку, вы должны попробовать сделать следующее в качестве механизма предотвращения.

  • Ограничение скорости: это способ ограничения входящих запросов к серверу, который помогает предотвратить отправку большого количества запросов злоумышленниками.
  • Брандмауэр веб-приложений (WAF): помогает отслеживать трафик между веб-приложением и Интернетом. Это помогает защитить от DDoS и многих других атак, таких как XSS и SQL Injection.

5. Вредоносное ПО

Итак, давайте обсудим последний тип атаки, Malware.

Вредоносное ПО или вредоносное программное обеспечение — это программа или код, который злоумышленник пишет и распространяет по сети для заражения любых целевых устройств.

Вредоносное ПО может быть разных форм и типов. Некоторые из известных типов: червь, вирус, шпионское ПО, рекламное ПО, троянский конь, программы-вымогатели, кейлоггеры и бэкдор.

Вредоносное ПО.png

Рисунок 10: Представление вредоносного ПО

Эти атаки предназначены для:

  • Украсть конфиденциальную информацию
  • Спам целевой системы
  • Заразите систему, чтобы остановить основные действия.
  • Шантажировать жертву и требовать деньги.

Как предотвратить атаки вредоносных программ

Для предотвращения вредоносного ПО необходимо:

  • Установите и активируйте антивирусное программное обеспечение. Эти инструменты обеспечивают защиту от различных вредоносных программ.
  • Используйте инструменты, поставляемые с операционной системой (например, Защитник Windows), чтобы снизить риск.

Вывод

Надеюсь, статья была для вас познавательной! Мы рассмотрели основные детали пяти основных атак на веб-безопасность.

Ссылка: https://blog.greenroots.info/web-security-attacks-you-must-know-part-1

#websecuriry #hacking

What is GEEK

Buddha Community

Атаки на веб-безопасность, о которых вы должны знать

Атаки на веб-безопасность, о которых вы должны знать

Узнайте об атаках на веб-безопасность и о том, как их предотвратить. В этой статье я подробно расскажу о 5 атаках, которые должен знать каждый веб-разработчик.

Как разработчики, мы знаем подводные камни Интернета — шлюзы, которые злоумышленники могут использовать для кражи личных данных, выкачивания денег и вообще сеять хаос. Но если мы собираемся создавать водонепроницаемые приложения, мы должны постоянно обновлять нашу базу знаний и готовиться к любому возможному нападению.

В этом посте мы собираемся обсудить пять наиболее распространенных форм атак. Мы обсудим другие примеры в следующих статьях, но эти «большие пятерки» должны стать основой вашего режима безопасности.

Что такое атака на веб-безопасность?

Атаки на веб-безопасность (или безопасность веб-приложений) — это действия, выполняемые для использования слабых мест и уязвимостей приложения.

Обычно в атаке участвуют две стороны: злоумышленник (преступник) и жертва (пользователь).

Злоумышленник (преступник)

Атакующий.png

Рис. 1. Представление злоумышленника в этой статье

Это люди, которые нацеливаются на систему, пользователя или учетную запись, чтобы получить доступ в незаконных целях. Получив доступ, они крадут данные, деньги, учетные данные и другие важные активы. Злоумышленником может быть человек, программа или бот в любой части мира.

Жертва (Пользователь)

Жертва.png

Рисунок 2: Представление жертвы/пользователя в этой статье

Это человек, на которого злоумышленник оказывает негативное воздействие. Любой может стать жертвой злонамеренной онлайн-активности, если не примет необходимых мер предосторожности; некоторые жертвы не особенно разбираются в Интернете, но другие обладают значительным объемом знаний. Жертвы подвергаются атакам злоумышленников из-за уязвимостей приложений, которые они используют ежедневно.

Пять основных типов атак на веб-безопасность

В этой статье мы сосредоточимся конкретно на следующих атаках:

  • Межсайтовый скриптинг (XSS)
  • Фишинг
  • кликджекинг
  • Подделка межсайтовых запросов (CSRF)
  • Обход пути (или каталога)

Есть и другие атаки, которые следует учитывать, такие как SQL Injection, Brute Force, DoS, DDoS и многие другие... но мы сохраним их для будущих статей.

1. Межсайтовый скриптинг (XSS)

В межсайтовом скриптинге (XSS) злоумышленники внедряют вредоносный скрипт в легитимную ссылку на веб-сайт и отправляют его жертве. Злоумышленник идентифицирует веб-сайт как цель для атаки после оценки его слабости и уязвимости. Жертва обычно получает ссылку, встроенную в сообщение электронной почты.

Многие браузеры не могут обнаружить вредоносный код. Поэтому, когда жертва переходит по ссылке, браузер делает вывод, что ссылка пришла из надежного источника, загружает сайт и выполняет вредоносный скрипт. После выполнения скрипт может собирать конфиденциальную информацию, токены и файлы cookie, хранящиеся в браузере, и отправлять их злоумышленнику. Затем злоумышленник использует эту украденную информацию без ведома жертвы.

На рисунке ниже показано взаимодействие между злоумышленником и жертвой во время XSSатаки.

XSS.png

Рисунок 3: Представление XSS-атаки

Мы разделяем XSS на три основные категории:

  • Хранимая XSS-атака: при хранимой XSS-атаке вредоносные сценарии постоянно хранятся на сервере цели, в их базах данных и хранилищах файлов. Ее также называют постоянной XSS-атакой и обычно считают наиболее опасным типом XSS-атаки. Эта атака обычно выполняется с использованием раздела комментариев на странице/форуме, журналов или любого другого носителя, который принимает вводимые пользователем данные и сохраняется во внутреннем хранилище.
  • Отраженная XSS-атака: отраженная XSS-атака не сохраняет вредоносный скрипт в хранилище. Сценарий выполняется на стороне клиента, когда пользователя обманом заставляют щелкнуть ссылку, содержащую его.
  • Атака XSS на основе DOM: как и в случае с Reflected XSS Attack, злоумышленник использует целевой URL-адрес с вредоносным скриптом. Сценарий выполняет и изменяет объектную модель документа (DOM) браузера.

Вот несколько примеров внедрения скриптов на основе различных событий:

  • <body onload=alert(1)>- Срабатывает при загрузке элемента.
  • <style>@keyframes x{}</style><xss style="animation-name:x" onwebkitanimationstart="alert(1)"></xss>- Срабатывает, когда начинается анимация CSS.

Как предотвратить XSS

Как и при любом другом типе атаки на систему безопасности, злоумышленник может внедрить вредоносный скрипт только тогда, когда веб-сайт или приложение уязвимы. Поэтому лучший способ предотвратить нападение — принять необходимые меры предосторожности. Выполняя следующие действия, вы значительно продвинетесь в предотвращении XSS-атак:

  • Не доверяйте пользовательскому вводу . Любой пользовательский ввод, который выполняется и создает вывод из вашего веб-приложения, может подвергнуть приложение XSS-атаке. Рассматривайте все входные данные как потенциально опасные. Это должно относиться как к внутренним, так и к внешним пользователям приложения.
  • Очистка ввода . Используйте библиотеку HTML для очистки ввода пользователя, чтобы предотвратить или закодировать любую злонамеренную попытку внедрить сценарий через ввод.
  • Выполняйте регулярное сканирование . Существует множество инструментов безопасности, которые создают подробные отчеты на основе сканирования XSS. Burp Suite — отличный инструмент, как и Zap (с открытым исходным кодом).
  • Установите для HttpOnlyфлага значение true — когда вы устанавливаете HttPOnlyфлаг trueдля файлов cookie, клиентский JavaScript не может получить к ним доступ. Стандартной практикой безопасности является защита этого флага от XSS-атак.
  • Настройте брандмауэр веб-приложений — различные инструменты позволяют брандмауэрам веб-приложений обнаруживать и фильтровать вредоносные атаки до того, как они проникнут в ваше приложение. Брандмауэр защищает вас от большинства инъекционных атак.
  • Повышение осведомленности . Вам и вашей команде необходимо повышать осведомленность об атаке XSS и быть в курсе того, что происходит вокруг вас. Поэтому пройдите соответствующее обучение и включите тестовые примеры, связанные с XSS, в свой план тестирования безопасности.

2. Фишинг

Давайте перейдем к следующему типу атаки, Phishing. При фишинговой атаке злоумышленник выдает себя за законную сторону и отправляет жертве электронные письма или текстовые сообщения, содержащие ссылки на фишинговые веб-сайты. Жертва предполагает, что сообщение заслуживает доверия, и открывает ссылку в своем браузере. Как только ссылка открыта, злоумышленник может украсть личные данные жертвы, учетные данные и банковскую информацию, а затем выполнить такие действия, как кража и шантаж.

На рисунке ниже показано взаимодействие между злоумышленником и жертвой во время Phishingатаки.

Фишинг.png

Рисунок 4: Представление фишинговой атаки

Давайте теперь рассмотрим пример фишинговой атаки, инициированной с использованием электронной почты. Электронное письмо предлагает читателю шанс выиграть огромную сумму, приняв участие в конкурсе.

Phishing_Example.png

Рисунок 5: Пример фишингового письма

Как вы можете видеть на изображении выше, существует множество признаков того, что электронное письмо подозрительно и может привести к фишинговой атаке. Несколько срочных вопросов, которые нужно задать:

  • Вы обычно получаете электронные письма от этого отправителя? Это подозрительный отправитель?
  • Предусмотрено ли какое-либо шифрование для защиты электронной почты?
  • Субъект говорит о выгодном предложении или о чем-то необычном?
  • Контент побуждает вас переходить по ссылкам?
  • Когда вы наводите курсор на ссылки, указывают ли они на что-то необычное или подозрительное?

Лучше всего относиться к такому электронному письму или сообщению с особой осторожностью и следить за тем, чтобы вы не попали в ловушку злоумышленника.

Как предотвратить фишинг

Мы можем попытаться предотвратить фишинговую атаку, выполнив следующие действия:

  • Осознание - В этом мире нет ничего бесплатного. Ни один незнакомец никогда не даст вам деньги, дома или автомобили, не требуя чего-то взамен, поэтому вы можете надежно удалить такие электронные письма и сообщения, которые приходят к вам. Если вы получаете такие электронные письма на свой рабочий адрес, немедленно сообщите о них в соответствующую группу. Вы также можете повысить осведомленность, рассказав своим друзьям и семье.
  • СПАМ-фильтр — настройте спам-фильтр в своем почтовом клиенте. Большинство приложений электронной почты поставляются с мощным спам-фильтром, и вы должны настроить его в соответствии со своими потребностями.
  • Проверьте настройки безопасности электронной почты . Проверьте сведения о полученном электронном письме. Поле securityговорит No encryption? Это веская причина игнорировать электронное письмо.
  • Проверьте HTTPS URL-адресов. Когда вы наводите курсор на ссылку, встроенную в содержимое электронной почты, отображается ли URL-адрес с https? Если нет, не нажимайте.
  • Усильте настройки своего браузера. Вы также можете изменить настройки безопасности своего браузера, чтобы многие такие подозрительные электронные письма могли быть заблокированы и предупреждены.

3. Кликджекинг

Чтобы получить Clickjacking, злоумышленник обманом заставляет жертву щелкнуть элемент страницы, который им не виден. Жертва может быть обманом загружена вредоносным ПО, выполнена нежелательные транзакции и многие другие опасные действия.

Сначала злоумышленник отправляет электронное письмо с предложением, которое содержит ссылку на целевой веб-сайт. В предложении может быть потрясающая поездка в Майами или на Карибы, например. Но злоумышленник внедрил скрытый элемент пользовательского интерфейса (возможно, iFrame), который может инициировать перевод 2000 долларов на их банковский счет. Жертва переходит по ссылке и загружает форму предложения в браузер. Кликджекинг происходит, когда жертва нажимает на скрытый элемент пользовательского интерфейса; перевод осуществляется на банковский счет злоумышленника без ведома жертвы.

На рисунке ниже показано взаимодействие между злоумышленником и жертвой во время Clickjackingатаки.

кликджекинг.png

Рисунок 6: Представление атаки Clickjacking

Как предотвратить кликджекинг?

Большинство clickjackingпопыток выполняются с использованием iFrame, и мы можем защитить наши приложения с помощью X-Frame-Optionsзаголовка ответа. X-Frame-Options указывает, должен ли браузер разрешать отображение страницы внутри <iframe>тега. Существует три возможных значения X-Frame-Optionsзаголовка:

  • DENY: не позволяет отображать страницу внутри iframe.
  • SAMEORIGIN: разрешает загрузку страницы внутри iframe, но только из того же домена.
  • РАЗРЕШЕННЫЙ URL-адрес: разрешает загрузку страницы внутри iframe, но только по определенному URL-адресу.

Принятие этих мер предосторожности на стороне сервера снизит вероятность кликджекинга. На стороне клиента вы можете установить расширения для браузера, чтобы проверить его уязвимость.

4. Подделка межсайтовых запросов (CSRF)

Cross-Site Request[Forgery](http://forgery.is), или CSRF, является особенно инновационной и сложной формой атаки, с помощью которой злоумышленник обманом заставляет жертву выполнять нежелательные действия в веб-приложении, в котором они в настоящее время аутентифицированы .

Злоумышленник создает поддельный запрос денег (скажем, 2000 долларов) и встраивает его в сообщение, например электронное письмо, а затем отправляет его жертве. Жертва переходит по ссылке и по незнанию отправляет запрос в банк. Банк получает запрос. У банка нет возможности узнать, что запрос является результатом подделки, поэтому они разблокируют деньги, и злоумышленник получит их.

На рисунке ниже показано взаимодействие между злоумышленником и жертвой при атаке CSRF.

CSRF.png

Рисунок 7: Представление атаки CSRF

Как предотвратить CSRF-атаку

  • Смягчение на основе токенов . Для защиты можно использовать встроенную реализацию CSRF. На самом деле многие фреймворки, такие как .NET, имеют встроенные возможности. Вы также можете использовать существующие реализации защиты CSRF для приложений, созданных с использованием Java, Angular, PHP и многих других.
  • Файлы cookie SameSite — файлы cookie SameSiteпомогают браузеру решить, отправлять ли файлы cookie с межсайтовыми запросами. Возможные значения strict, laxи none.
  • Пользовательские заголовки запросов . Большинство современных веб-приложений используют запросы XHR и вызовы конечных точек API. Нам нужно использовать политику того же происхождения (SOP), чтобы ограничить добавление пользовательского заголовка (только с использованием JavaScript). Мы можем добавить собственный заголовок в запрос и проверить его наличие на стороне сервера. Обратите внимание, однако, что для максимальной эффективности этого варианта также требуется надежная конфигурация CORS .
  • Проверка происхождения . Мы можем проверить, откуда поступает запрос и куда направляется запрос. Сервер проверяет исходное и целевое происхождение на соответствие.
  • Защита на основе взаимодействия с пользователем . В качестве дополнительного уровня защиты мы можем использовать повторную аутентификацию и капчу.

Пожалуйста, обратитесь к Шпаргалке по защите от CSRF для более подробной информации.

5. Обход пути (или каталога)

Последняя атака веб-приложений, которую мы обсудим в этой статье, — это атака Path (or Directory) Traversal Attack. Эта форма атаки позволяет злоумышленнику читать любые файлы с сервера, на котором запущено приложение, открывая множество возможностей для обнаружения паролей, банковских реквизитов, секретной информации и различных других данных.

Злоумышленник может получить доступ к разрешенному пути для загрузки изображения и его отображения в браузере. Веб-сайт уязвим для Path (or Directory) Traversalатаки и позволяет злоумышленнику перейти к файлу `/etc/password. В операционной системе на основе Unix специальный файл содержит сведения о зарегистрированных пользователях, чтобы злоумышленник мог украсть важные данные с сервера.

На рисунке ниже показано взаимодействие между злоумышленником и жертвой во время Path(or Directory) Traversalатаки.

Directory_Traversal.png

Рисунок 8: Представление атаки Path Traversal

Как предотвратить атаки обхода пути (каталога)

  • Самый эффективный способ предотвратить такую ​​атаку — отклонить пользовательский ввод в API файловой системы.
  • Если мы не можем запретить пользователям вводить входные данные для API файловой системы, мы должны проверить входные данные перед их дальнейшей обработкой. После проверки приложение должно добавить ввод в файл base directory. Мы должны использовать этот путь к API файловой системы для canonicalizeпути и убедиться, что этот путь начинается с ожидаемого базового каталога. Вот фрагмент кода, который сделает это за нас.
File file = new File(BASE_DIRECTORY, input);
if (file.getCanonicalPath().startsWith(BASE_DIRECTORY)) {
    // do something...
}

 

Кого не волнует безопасность? Но заботиться и осознавать — не одно и то же. Прочтите, чтобы узнать о различных атаках в области веб-безопасности и кибербезопасности.

1. SQL-инъекция

При SQL injectionатаке злоумышленник ищет уязвимости в проверках пользовательского ввода приложения и конфигурации базы данных. Злоумышленник вводит вредоносные запросы, используя пользовательские данные (например, текстовое поле), чтобы выполнить их в базе данных.

После завершения выполнения злоумышленник может выполнить несколько вредоносных действий, в том числе:

  • Кража информации.
  • Удаление таблиц (что может позволить им удалить важные записи).
  • Доступ к данным, которые должны быть запрещены.

На рисунке ниже показано взаимодействие между злоумышленником и жертвой при атаке с внедрением SQL.

SQL-инъекция.png

Рисунок 3: Представление атаки SQL-инъекцией

Теперь давайте рассмотрим пару примеров атак с внедрением SQL:

Атака с использованием 1 = 1доброго вектора, который всегдаTrue

Предположим, приложение извлекает информацию об учетной записи клиента на основе уникального 6-значного PIN-кода. Клиент может ввести PIN-код в текстовое поле и отправить его для получения информации из базы данных.

1==1=true.png

Рисунок 4: Пользователь вводит пин-код и отправляет его

Предположим, что входное значение PIN-кода передается серверной службе, где мы создаем запрос SQL следующим образом:

const sql = "SELECT * FROM Customers WHERE CustPin = " + inputCustPin;

Теперь, если злоумышленник может передать значение вроде 456789 or 1=1, оператор SQL будет выглядеть так:

SELECT * FROM Customers WHERE CustId = 456789 or 1=1;

Таким образом, злоумышленник может получить доступ к информации обо всех учетных записях клиента из базы данных.

Атака с использованием выполнения нескольких запросов

Если злоумышленнику разрешено внедрить весь запрос, результат может быть очень серьезным. Это так же плохо, как удаление таблиц, удаление важной информации или неправильная настройка базы данных. Большинство приложений баз данных поддерживают выполнение нескольких запросов в виде пакета.

Давайте рассмотрим случай, когда злоумышленник отправляет следующую строку в качестве значения идентификатора клиента: 456789; DROP TABLE Dept.

партия.png

Рисунок 5: Использование выполнения пакетного запроса

Оператор SQL будет действительным и будет выглядеть следующим образом:

SELECT * FROM Customers WHERE CustId = 456789 ; DROP TABLE Dept;

К сожалению, приведенный выше запрос удалит всю таблицу Dept из базы данных.

Как предотвратить атаки SQL Injection?

  • Большинство атак с использованием SQL-инъекций происходят из-за отсутствия проверки пользовательского ввода. Поэтому мы должны убедиться, что поле ввода принимает только правильный тип данных. Например, поле электронной почты должно быть ограничено идентификаторами электронной почты. Нам также необходимо убедиться, что обычные ключевые слова SQL (например, DROP) по возможности извлекаются из пользовательского ввода.
  • Вы можете использовать параметры SQL в запросе SQL в качестве механизма предотвращения. Эти параметры оцениваются во время выполнения механизмом SQL, который правильно сопоставляет параметры, а также проверяет, подходит ли параметр для столбца.
  • Важно всегда выполнять сканирование с помощью инструмента веб-безопасности, чтобы вы могли оценить состояние своего приложения и знать, что нужно исправить.

2. Атака «Человек посередине»

В ходе Man in the Middle(MITM)атаки злоумышленник выдает себя за законного пользователя, чтобы украсть важную информацию, такую ​​как учетные данные для входа в систему, данные кредитной карты и даже более конфиденциальные данные.

Жертва никогда не понимает, что кто eavesdropping-то участвует в обмене конфиденциальной информацией. Точно так же конечная система никогда не распознает злоумышленника; он считает, что взаимодействует законная жертва.

На рисунке ниже показано, как злоумышленник выполняет роль посредника в общении между жертвой и целевыми системами.

Человек-в-середине.png

Рисунок 6: Представление атаки MITM

Как правило, MITMзлоумышленники нацелены на пользователей для получения финансовой выгоды и кражи личных данных. Злоумышленник сначала перехватывает связь, используя различные spoofingмеханизмы, такие как спуфинг IP и DNS. После перехвата злоумышленник использует методологии расшифровки, например SSL Hijacking, чтобы понять смысл сообщения. Последний этап атаки — притвориться жертвой и получить преимущество от атаки.

Как предотвратить атаку Человека посередине?

Большинство Man in the MIddleатак происходит из-за недостаточной осведомленности о методах обеспечения безопасности. Вы должны убедиться, что:

  • НЕ заходите на любой незащищенный веб-сайт. Доступ к сайтам только с протоколом HTTPS.
  • НЕ подключайтесь к общедоступному/открытому WIFI, особенно к защищенному паролем.
  • НЕ делитесь своей конфиденциальной информацией с кем-либо.

3. Сломанный контроль доступа

Управление доступом — это то, как вы управляете доступом пользователей к вашим приложениям, активам и ресурсам. Было бы лучше создать правила доступа, чтобы определить, кто и к чему имеет доступ и, что наиболее важно, что не разрешено. A Broken Access Controlпредоставляет злоумышленникам широкие возможности для доступа к тому, что им не положено, а затем использовать это.

На рисунке ниже показано, как злоумышленник получил доступ к базе данных HR, используя привилегии доступа роли HR. Злоумышленник также получил доступ к нескольким действиям ADMIN, используя неправильно настроенные API.

Сломанный-доступ-контроль.png

Рисунок 7: Представление атаки Broken Access Control

Согласно списку OWASP Top 10:2021 :

«94 % приложений были протестированы на предмет нарушения контроля доступа в той или иной форме, при этом средний уровень заболеваемости составил 3,81 %, и [это] имеет наибольшее количество случаев в предоставленном наборе данных — более 318 000».

Как предотвратить атаку Broken Access Control?

Вы можете предотвратить проблему Broken Access Control, убедившись в следующем:

  • Запретите любой доступ, а затем разрешите то, что требуется.
  • Обязательно периодически проверяйте и оценивайте права доступа.
  • Придерживайтесь политик при повышении привилегий.
  • Проверьте и подтвердите конфигурации CORS.
  • Защитите доступ к API с помощью необходимых токенов.

4. Отказ в обслуживании (DoS) и распределенный отказ в обслуживании (DDoS)

В Denial of Service(aka DoS), Злоумышленник нацеливается на компьютер или любые устройства, чтобы сделать их недоступными для доступа и использования. Злоумышленник наводняет целевую систему огромным объемом трафика, поэтому целевая система не может его обработать. Целевая система со временем становится недоступной для любых новых пользователей.

Злоумышленник также может замедлить целевую систему вместо того, чтобы сделать ее недоступной. Злоумышленник может использовать всю память ЦП, чтобы вызвать переполнение буфера памяти.

DoS.png

Рисунок 8: Представление DoS-атаки

Атака типа «отказ в обслуживании» (DoS) имеет еще один известный вариант, называемый «распределенный отказ в обслуживании» (DDoS). При DoS-атаке злоумышленник использует одно соединение с целевой системой, чтобы инициировать атаку. При DDoS-атаке злоумышленник использует несколько соединений, используя ботнет, чтобы инициировать атаку. DDoSдаже более распространен, чем DOS.

DDoS.png

Рисунок 9: Представление DDoS-атаки

Как предотвратить DoS и DDoS атаки?

Чтобы предотвратить DoS- или DDoS-атаку, вы должны сначала устранить любые сомнения и подтвердить, что это действительно атака. Ваше приложение может работать медленно из-за реальной проблемы, или ваш веб-сайт может стать недоступным из-за внезапного всплеска законного трафика, к которому вы не были готовы.

Однако, как только вы обнаружите атаку, вы должны попробовать сделать следующее в качестве механизма предотвращения.

  • Ограничение скорости: это способ ограничения входящих запросов к серверу, который помогает предотвратить отправку большого количества запросов злоумышленниками.
  • Брандмауэр веб-приложений (WAF): помогает отслеживать трафик между веб-приложением и Интернетом. Это помогает защитить от DDoS и многих других атак, таких как XSS и SQL Injection.

5. Вредоносное ПО

Итак, давайте обсудим последний тип атаки, Malware.

Вредоносное ПО или вредоносное программное обеспечение — это программа или код, который злоумышленник пишет и распространяет по сети для заражения любых целевых устройств.

Вредоносное ПО может быть разных форм и типов. Некоторые из известных типов: червь, вирус, шпионское ПО, рекламное ПО, троянский конь, программы-вымогатели, кейлоггеры и бэкдор.

Вредоносное ПО.png

Рисунок 10: Представление вредоносного ПО

Эти атаки предназначены для:

  • Украсть конфиденциальную информацию
  • Спам целевой системы
  • Заразите систему, чтобы остановить основные действия.
  • Шантажировать жертву и требовать деньги.

Как предотвратить атаки вредоносных программ

Для предотвращения вредоносного ПО необходимо:

  • Установите и активируйте антивирусное программное обеспечение. Эти инструменты обеспечивают защиту от различных вредоносных программ.
  • Используйте инструменты, поставляемые с операционной системой (например, Защитник Windows), чтобы снизить риск.

Вывод

Надеюсь, статья была для вас познавательной! Мы рассмотрели основные детали пяти основных атак на веб-безопасность.

Ссылка: https://blog.greenroots.info/web-security-attacks-you-must-know-part-1

#websecuriry #hacking

Основные функции PostgreSQL, о которых вы должны знать

Если вы уже знакомы с другими базами данных SQL, но плохо знакомы с PostgreSQL, то эта статья идеально вам подойдет. Это поможет вам разобраться в нюансах и начать работу с PostgreSQL.

Примечание. Большинство сравнений в этой статье нацелены на MySQL, поскольку это ближайшая база данных с открытым исходным кодом, с которой можно сравнить PostgreSQL.

Нет порядка по умолчанию для первичного ключа

Если вы ранее работали с MySQL, то должны быть знакомы с тем фактом, что первичный ключ любой таблицы по умолчанию является кластерным ключом . Данные физически упорядочиваются на диске с помощью индекса, поэтому при запросе первичного ключа в MySQL данные сортируются без наличия order byв запросе.

MySQL

Давайте проверим нашу теорию с помощью некоторых экспериментов, выполнив следующий запрос:

-- Create table E1
CREATE TABLE E1 (
  empId INTEGER,
  name TEXT NOT NULL,
  dept TEXT NOT NULL
);

-- Insert sample values
INSERT INTO E1 VALUES (0001, 'John', 'Sales');
INSERT INTO E1 VALUES (0003, 'Ava', 'Sales');
INSERT INTO E1 VALUES (0002, 'Dave', 'Accounting');

-- Select without Order By
SELECT * FROM E1;

Порядок MySQL

Порядок MySQL

Теперь давайте создадим первичный ключ:

-- Add Primary key. This is clustered by default
ALTER TABLE E1 ADD PRIMARY KEY (empID);

Порядок MySQL по первичному ключу

Как видите, мы не включили order byпредложение в наш запрос, но MySQL по-прежнему возвращает строки в том же порядке.

PostgreSQL

Запустим тот же набор запросов в PostgreSQL, только к таблице с первичным ключом:

-- Similar code to MySQL. Create table and insert sample values.
-- Primary key is added in the Create itself.
CREATE TABLE E1 (
  empId INTEGER PRIMARY KEY,
  name TEXT NOT NULL,
  dept TEXT NOT NULL
);

INSERT INTO E1 VALUES (0001, 'John', 'Sales');
INSERT INTO E1 VALUES (0003, 'Ava', 'Sales');
INSERT INTO E1 VALUES (0002, 'Dave', 'Accounting');

Если мы запустим такой запрос SELECT *(см. ниже), PostgreSQL не будет сортировать данные по — вместо этого empIdмы должны включить предложение.ORDER BY

Постгрес без сортировки

Нет сортировки в Postgres

Постгрес Сортировать по
Постгрес Сортировать по

Кластерные ключи имеют свои преимущества и недостатки, но в PostgreSQL нет кластерного ключа по умолчанию. Однако PostgreSQL дает вам возможность при необходимости выполнять кластеризацию .

Различия в соответствии требованиям ACID

PostgreSQL имеет параметры соответствия ACID по умолчанию, которые сильно отличаются и являются более строгими по своей природе. Вот некоторые из них:

Грязное чтение

По умолчанию PostgreSQL имеет более строгое соответствие ACID. Например, в MySQL есть уровень изоляции (Read Uncommitted), который разрешает грязное чтение, тогда как в PostgreSQL нет версии/уровня, где разрешено грязное чтение.

Сериализуемый

Для достижения сериализуемого уровня изоляции (наиболее строгого уровня) PostgreSQL использует то, что называется MVCC на основе памяти . Это намного быстрее и обычно не требует явных блокировок для достижения сериализуемого уровня . Для сравнения, MySQL достигает этого с мелкозернистыми блокировками. В большинстве случаев разницы в производительности нет, но утверждается, что MVCC на основе памяти немного лучше и предотвращает раздувание основной таблицы.

Соединения стоят дорого

PostgreSQL придерживается параллелизма на основе процессов, поэтому открытие и закрытие соединений не поощряется. Это также относится ко многим другим системам баз данных, но в большей степени к PostgreSQL. Следовательно, рекомендуется использовать пул соединений, который поддерживает соединения в течение более длительного периода, а затем приложения могут открывать и закрывать соединения через этот пул соединений. Ранее мы писали о пуле соединений PostgreSQL.

Ссылка: https://arctype.com/blog/postgresql-vs-mysql-features/

#mysql #postgresql

Обучение веб-разработке на практике: пишем слайдер на JavaScript

Обучение веб-разработке на практике эффективнее голой теории: всё наглядно, а полученные в ходе разработки решения можно использовать в будущих проектах. Именно поэтому мы совместно с онлайн-школой GeekBrains подготовили туториал по созданию простого слайдера изображений с объяснением каждого шага. Вот так будет выглядеть финальная версия:

Примечание Данная статья — лишь небольшое погружение в мир фронтенд-разработки, ведь современный веб не ограничивается знанием HTML/CSS/JavaScript. Чтобы стать востребованным веб-разработчиком, необходимо осваивать дополнительные библиотеки и фреймворки, которые часто строго разделены между фронтендом и бэкендом.

Что понадобится?

Можно сразу скачать IDE вроде WebStorm, но при обучении веб-разработке с нуля можно начать и в онлайн-редакторе. Мы будем использовать CodePen — популярный онлайн-редактор для веб-разработчиков с мгновенным отображением результата. Но если вы уже начали работу в какой-либо другой среде и считаете, что она намного удобнее, просто убедитесь, что есть поддержка HTML/CSS/JavaScript.

Пишем код

На различных курсах веб-разработки знакомство с фронтендом начинается с описания основных технологий, а именно:

  • HTML — язык гипертекстовой разметки, на котором пишется «скелет» сайта. Если провести аналогию с домом, то это каркас. Грубо говоря, вы строите разметку, на которую после будет ложиться оформление.
  • CSS — каскадные таблицы стилей или то самое оформление. Вернёмся к примеру с домом: после постройки его нужно облицевать, покрасить, сделать презентабельным, и именно CSS описывает внешний вид сайта.
  • JavaScript — язык программирования, который обеспечивает функциональность. Вы можете взаимодействовать с вещами в вашем доме — включать и выключать свет, бытовую технику, воду и многое другое. Вы точно так же можете взаимодействовать с сайтом, нажимая кнопки, наводя курсор на изображения и заполняя формы. JavaScript обрабатывает все эти взаимодействия, и, как язык сценариев, он может предоставлять правила и логику для определения того, что должно произойти дальше.

HTML

Обучение веб-разработке стоит начать с HTML, так как это каркас сайта. Каждый HTML-документ имеет стандартную структуру:

<!-- Указание типа текущего документа: -->
<!DOCTYPE html>
<html>

  <!-- Содержимое тега <head> не отображается на странице, помогает в работе с данными и хранит информацию для поисковых систем и браузеров: -->
  <head>
    <meta charset="utf-8" />
    <title>Устанавливает заголовок для окна веб-страницы</title>
  </head>

  <!-- Здесь содержится весь отображаемый контент: -->
  <body>
    <p>Текст</p>
    <img src="URL" alt="Изображение">
    <a href="URL">Ссылка</a>
  </body>
</html>

Но в нашем примере прописывать структуру всей страницы не нужно, ведь мы работаем с отдельным компонентом, который потом будет размещаться между тегами <body></body>. Здесь всё просто: у нас есть основной блок (тег <div>), который является родительским и содержит ещё три блока с разными картинками — будущими слайдами:

<!-- Основной блок слайдера -->
<div class="slider">

  <!-- Первый слайд -->
  <div class="item">
    <img src="https://s3.tproger.ru/uploads/2020/07/field.jpg">
  </div>

  <!-- Второй слайд -->
  <div class="item">
    <img src="https://s3.tproger.ru/uploads/2020/07/rose.jpg">
  </div>

  <!-- Третий слайд -->
  <div class="item">
    <img src="https://s3.tproger.ru/uploads/2020/07/leaf.jpg">
  </div>

  <!-- Кнопки-стрелочки -->
  <a class="previous" onclick="previousSlide()">&#10094;</a>
  <a class="next" onclick="nextSlide()">&#10095;</a>
</div>

Обратите внимание, что у каждого тега <div> есть свой класс. Именно по этим классам будет применяться оформление CSS. В тегах <img> мы указываем ссылки на те изображения, которые будут показываться. В атрибуте onclick мы обращаемся к конкретной функции JavaScript, привязывая к кнопке действие по клику.

#статьи #css #html #javascript #веб-разработка #для начинающих #обучение программированию #партнёрский материал #фронтенд

10 простых, но важных фактов о HTML, которые вы должны знать

HTML — это самый фундаментальный столп веб-разработки. Мы часто игнорируем некоторые тривиальные факты, которые могут оказаться очень важными, если мы умеем их использовать.

Один из выводов, которые я усвоил после более десяти лет использования HTML, заключается в том, что многие факты, связанные с ним, очень недооценены. Как разработчик, мы обычно не обращаем на них особого внимания или строим туманную перспективу. В этой статье мы узнаем о 10 таких очень тривиальных фактах, но мощных, когда мы знаем их применение. Надеюсь, вам понравится это читать.

Предупреждение о хвастовстве - 100-я статья

100.gif

Я не мог удержаться от хвастовства тем, что достиг подвига, написав 100 статей с помощью этого поста. Я очень горжусь тем, что продолжаю вести блог, и рад получать отличные отзывы (чаще всего) от сообщества. Большое спасибо за вашу постоянную поддержку 🙏!

Ладно, давайте теперь к делу.

1. altАтрибут тега img обязателен

Вы, должно быть, заметили altатрибут на imgтеге.

<img src="user.png" alt="User Profile Image" />

Атрибут altпомогает нам указать альтернативный текст для изображения. Этот альтернативный текст полезен в нескольких ситуациях, когда браузер не может отобразить изображение.

  • Путь к изображению нарушен, и его невозможно отобразить.
  • Браузер не может отобразить изображение из-за медленной сети.
  • Пользователи с нарушениями зрения используют программу чтения с экрана, которая считывает текст, указанный в altтеге.

Согласно спецификации HTML5, altявляется обязательным атрибутом imgтега. Однако вы можете назначить ему пустую строку, если изображение предназначено только для украшения.

<img src="user.png" alt="" />

Ниже приведен пример альтернативного текста, отображаемого, когда изображение не отображается.

Не запутайтесь с altатрибутом и функциональностью всплывающей подсказки изображения. Атрибут alt не отображает всплывающую подсказку для изображения. Пожалуйста, используйте titleатрибут, чтобы получить всплывающую подсказку к изображению. С другой стороны, altпредоставляет невидимое описание изображения, чтобы помочь с доступностью.

2. Использование мертвой ссылки

Элемент anchor( <a>) создает ссылку на содержимое вне или внутри веб-страницы. Атрибут hrefэлемента привязки принимает URL-адрес назначения для ссылки на внешний контент.

<a href="https://google.com"> Go to Google </a>

Точно так же мы можем указать идентификатор раздела с помощью #символа, чтобы перейти к разделу страницы.

<a href="#bio"> Bio </a>
.....
.....
.....

<div id="bio">
 .....
</div>

Иногда вы можете захотеть предоставить пользовательское поведение для тега привязки, где он делает больше, чем ссылка на страницу или раздел. Настраиваемое поведение может быть чем угодно, например вызовами сервера, отображением-скрытием раздела и т. д. Мы используем JavaScript для обеспечения этого пользовательского поведения. В этих случаях мы должны объявить ссылку как dead link, указав значение #атрибута href.

<a href="#"> Dead Link </a>

Пользовательское поведение обычно задается с помощью прослушивателей событий.

<a href="#" onclick="xhrCall()"> Fetch Data </a>

3. Связь между <label>for и <input>id

Тег <label>определяет метку для нескольких элементов ввода, таких как текст, электронная почта, число, дата и т. д. Вы также можете использовать его с элементами textarea, select, counter и progress. Когда вы определяете метку, обязательно задайте значение для forатрибута.

Мы можем связать метку с другим элементом, сопоставив значение forатрибута со idзначением элемента. См. это в примере ниже,

<label for="advanced">Advanced</label>
<input type="radio" name="difficulty" id="advanced" value="advanced">

Здесь forзначение атрибута и значение идентификатора радиовхода совпадают. Важно следовать этой ассоциации, потому что,

  • Это помогает в достижении лучшей доступности. Средства чтения с экрана будут считывать метку, когда пользователь фокусируется на связанных элементах.

Это помогает в выборе элемента, увеличивая область попадания. Когда метка связана с элементом, таким как флажок или переключатель, вы можете переключать/выбирать элемент, щелкая связанную метку.

hit-areas.gif

4. Значение по умолчанию a CheckboxиRadio

Давайте определим несколько радиокнопок, принадлежащих группе радиокнопок,

<label for="male">
  <input id="male" value="M" type="radio" name="gender">Male
</label>
<label for="female">
  <input id="female" value="F" type="radio" name="gender">Female
</label>
<label for="na">
  <input id="na" value="O" type="radio" name="gender">NA
</label>

Здесь у нас есть три переключателя (мужской, женский и NA), которые принадлежат genderгруппе. Мы сгруппировали их, указав одинаковое значение nameатрибута. valueТакже обратите внимание, что для каждой радиокнопки есть атрибут. Когда форма отправляется, включая эти переключатели, данные отправляются на сервер из valueатрибута.

Если вы опустите valueатрибут, значением по умолчанию будет on. Значение по умолчанию бесполезно. Следовательно, важно правильно установить атрибут value, чтобы определить правильный выбранный параметр. То же самое относится и к флажкам.

5. Установите флажок/радио по умолчанию.

Вы можете установить флажок или переключатель, выбранный по умолчанию. Вам нужно добавить свойство checkedвнутри inputтега.

В приведенном ниже коде мы выбрали параметры JavaScript и Python по умолчанию,

<form action="/action.do">
  <input type="checkbox" id="js" name="js" value="JavaScript" checked>
  <label for="js"> JavaScript </label><br>
  <input type="checkbox" id="php" name="php" value="Php">
  <label for="php"> Php </label><br>
  <input type="checkbox" id="python" name="python" value="Python" checked>
  <label for="python"> Python </label><br><br>
  <input type="submit" value="Submit">
</form>

Он производит,

изображение.png

6. Могу ли я создать стиль placeholder?

Мы можем установить текст-заполнитель с placeholderатрибутом,

<input type="text" placeholder="Tell us your name" />

Он производит,

изображение.png

Но можем ли мы применить стиль к тексту-заполнителю? Да мы можем. Мы можем изменить внешний вид текста-заполнителя с ::placeholderпомощью селектора CSS.

::placeholder {
  color: #210065;
  opacity: 0.7;
  font-family: verdana;
  font-size: 16px;
  font-style: italic;
}

Это изменит стиль текста заполнителя, как,

изображение.png

Вы можете использовать этот codepen, чтобы поиграть с ним,

 

7. Блочный или встроенный элемент

У каждого элемента HTML есть displayсвойство, и его значение по умолчанию равно blockили inline. Важно знать, является ли элемент HTML блочным или встроенным элементом, так как это может сильно повлиять на окончательный результат дизайна.

block_inline.png

В таблице ниже блочный элемент сравнивается со встроенным элементом.

Пример некоторых элементов блочного уровня:

<article>, <canvas>, <div>, <fieldset>, <figure>, <footer>, <form>, <h1>-<h6>, <p>, <table>, <ul>, <video>, многие другие.

Пример встроенных элементов:

<a>, <b>, <br>, <button>, <i>, <img>, <input>, <select>, <span>, <textarea>, многие другие.

8. Автофокус

Атрибут autofocusпомогает автоматически сфокусироваться на элементе ввода при загрузке страницы.

<form action="/action.do">
  <label for="uname">Username:</label>
  <input type="text" id="uname" name="uname" autofocus><br><br>
  <label for="password">Password:</label>
  <input type="password" id="password" name="password"><br><br>
  <input type="submit">
</form>

В приведенном выше примере текстовое поле «Имя пользователя» автоматически получает фокус при загрузке страницы.

9. Автозаполнение

Подобно автофокусу, autocompleteэто еще один атрибут, который пригодится в полях ввода элемента формы. Атрибут автозаполнения предоставляет автоматические предложения по заполнению значений полей формы.

<input type="email" id="email" name="email" autocomplete="on">

Чтобы autocompleteработать следующие четыре условия, чтобы удовлетворить,

  • Атрибут автозаполнения работает с элементами <input>, <textarea>и .<select>
  • Элемент должен иметь указанное имя и/или идентификатор.
  • Элемент должен быть заключен внутри formэлемента.
  • Прилагаемая форма должна иметь кнопку отправки.

Подробнее о значениях атрибутов автозаполнения и административных уровнях читайте здесь .

10. Это iframeне всегда плохо

Честно говоря, это отдельная тема для статьи. Но, позвольте мне попытаться дать обзор здесь. iframe (встроенный фрейм) — один из самых спорных, злоупотребляемых и старейших HTML-тегов. Он используется для встраивания другого документа HTML в текущий HTML. Вы можете встроить видео с YouTube, любую стороннюю рекламу, платежные шлюзы, по сути, саму полноценную веб-страницу.

Вот пример встраивания моего сайта в формат 500x500 iframe.

<iframe src="https://www.tapasadhikary.com/" height="500px" width="500px"></iframe>

За десятилетия были написаны сотни тысяч статей, чтобы показать, насколько это плохо iframeи почему его следует избегать на практике. Большинство претензий, сделанных как недостатки, очень верны. Однако было бы слишком пессимистично списывать его со счетов iframe, думая, что мы не сможем использовать его в нашем приложении.

Каковы основные проблемы с iframe и как мы можем их использовать, избегая их?

Безопасность: поскольку мы встраиваем сторонний сайт и контент с помощью iframe, у нас практически нет контроля над этим. Это повышает риск безопасности, поскольку в наше приложение может попасть вредоносное содержимое, нежелательные всплывающие окна и т. д. iframeИмеет два специальных атрибута sandboxи allow, которые помогают защитить некоторые из этих проблем безопасности .

С помощью sandboxатрибута мы можем указать, какие привилегии мы хотим предоставить iframe, что разрешить и что нет. Ниже приведен пример кода, в котором iframe может только отправить форму и открыть всплывающее диалоговое окно.

<iframe sandbox="allow-forms allow-popups" src="https://www.tapasadhikary.com/"></iframe>

Точно так же с allowатрибутом (пока работает в Chrome) мы можем указать функции (аккумулятор, камера, автовоспроизведение и т. д.) для доступа и выполнения с помощью iframe.

Скорость: это iframeможет замедлить работу вашего приложения. Это связано с тем, что потребление памяти увеличивается с использованием каждого iframe. Вы можете избежать шлака, лениво загружая свои фреймы. Для этого добавьте атрибут loading=" lazyв тег iframe. Он будет загружать iframe только тогда, когда это необходимо.

<iframe src="https://tapasadhikary.com/" loading="lazy"></iframe>
  • SEO: поисковая система считает, что контент из iframe принадлежит другому веб-сайту. Хотя iframe не оказывает сильного негативного влияния на SEO, он также не оказывает положительного влияния. Лучше избегать использования iframe на главной странице веб-сайта/приложения. Прочтите эту статью , чтобы узнать больше об iframe и SEO.

Важно знать атрибуты iframe и возможности их использования на практике. У вас может быть больше шансов использовать iframe, чем полностью запретить его.

Ссылка: https://blog.greenroots.info/10-тривиальный-но-мощный-html-факты-вы-должны-знать

#html

100+ лучших вопросов и ответов на собеседованиях по Java, которые вы должны знать

В этом блоге вы найдете более 100 наиболее часто задаваемых вопросов на собеседовании по Java и Core Java, а также ответы на них, которые вы должны подготовить, чтобы пройти собеседование.

В этом блоге Java Interview Questions я собираюсь перечислить некоторые из наиболее важных вопросов и ответов по Java-программированию, которые помогут вам выделиться в процессе собеседования. Java используется примерно 10 миллионами разработчиков по всему миру для разработки приложений для 15 миллиардов устройств, поддерживающих Java. Он также используется для создания приложений для популярных технологий, таких как большие данные, для бытовых устройств, таких как мобильные телефоны и коробки DTH. И поэтому сегодня Java используется повсеместно! Вот почему сертификация Java является наиболее востребованной сертификацией в области программирования.

Давайте начнем с рассмотрения некоторых наиболее часто задаваемых вопросов на собеседовании по Java.   

Q1. Объясните JDK, JRE и JVM?
Q2. Объясните public static void main(String args[]) в Java
Q3. Почему Java не зависит от платформы?
Q4. Почему Java не на 100% объектно-ориентирована?
Q5. Что такое классы-оболочки в Java?
Q6. Что такое конструкторы в Java?
Q7. Что такое одноэлементный класс в Java и как мы можем создать одноэлементный класс?
Q8. В чем разница между списком массивов и вектором в Java?
Q9. В чем разница между equals() и == в Java?
Q10. В чем разница между кучей и стековой памятью в Java?

Мы составили список самых популярных вопросов для собеседования по Java, которые разделены на 7 разделов, а именно:

  1. Основные вопросы на собеседовании по Java
  2. Вопросы для собеседования по Java OOPs
  3. Вопросы интервью JDBC
  4. Вопросы весеннего интервью
  5. Спящий режим Вопросы интервью
  6. JSP вопросы интервью
  7. Вопросы об исключениях Java и Thread Interview

Для профессионала в области Java очень важно знать правильные модные словечки, изучать правильные технологии и готовить правильные ответы на часто задаваемые вопросы на собеседованиях по Java. Вот окончательный список лучших вопросов для собеседования по Java, которые гарантируют переход на следующий уровень.


Итак, давайте начнем с первого набора основных вопросов для собеседования по Java.

 

Основные вопросы на собеседовании по Java для первокурсников

Q1. Объясните JDK, JRE и JVM?

JDKJREJVM
Это расшифровывается как Java Development Kit.Это расшифровывается как Java Runtime Environment.Это расшифровывается как виртуальная машина Java.
Это инструмент, необходимый для компиляции, документирования и упаковки программ Java.JRE относится к среде выполнения, в которой может выполняться байт-код Java.Это абстрактная машина. Это спецификация, обеспечивающая среду выполнения, в которой может выполняться байт-код Java.
Он содержит инструменты разработки JRE +.Это реализация JVM, которая физически существует.JVM следует трем нотациям: спецификация, реализация и  экземпляр среды выполнения .

 

Q2. Объясните public static void main(String args[]) в Java.

main() в Java — это точка входа для любой Java-программы. Он всегда записывается как public static void main(String[] args) .

  • public : Public — это модификатор доступа, который используется для указания того, кто может получить доступ к этому методу. Публичный означает, что этот метод будет доступен любому классу.
  • static : это ключевое слово в java, которое определяет, что оно основано на классе. main() сделан статическим в Java, поэтому к нему можно получить доступ без создания экземпляра класса. В случае, если main не сделан статическим, компилятор выдаст ошибку, поскольку main () вызывается JVM до того, как будут созданы какие-либо объекты, и только статические методы могут быть напрямую вызваны через класс.
  • void : это возвращаемый тип метода. Void определяет метод, который не возвращает никакого значения.
  • main : это имя метода, который ищет JVM в качестве отправной точки для приложения только с определенной сигнатурой. Это метод, в котором происходит основное выполнение.
  • String args[] : это параметр, передаваемый основному методу.

 

Q3. Почему Java не зависит от платформы?

Java называется независимой от платформы из-за ее байтовых кодов, которые могут работать в любой системе, независимо от базовой операционной системы.

 

Q4. Почему Java не на 100% объектно-ориентирована?


Java не на 100% объектно-ориентирована, потому что использует восемь примитивных типов данных, таких как boolean, byte, char, int, float, double, long, short, которые не являются объектами.

Q5. Что такое классы-оболочки в Java?

 

Классы-оболочки преобразуют примитивы Java в ссылочные типы (объекты). Каждому примитивному типу данных соответствует свой класс. Они известны как классы-оболочки, потому что они «обертывают» примитивный тип данных в объект этого класса. Обратитесь к изображению ниже, которое отображает другой тип примитива, класс-оболочку и аргумент конструктора.

 

Q6. Что такое конструкторы в Java?

В Java конструктор относится к блоку кода, который используется для инициализации объекта. Он должен иметь то же имя, что и класс. Кроме того, он не имеет возвращаемого типа и автоматически вызывается при создании объекта.

Существует два типа конструкторов:

  1. Конструктор по умолчанию: в Java конструктор по умолчанию — это тот, который не принимает никаких входных данных. Другими словами, конструкторы по умолчанию — это конструкторы без аргументов, которые будут созданы по умолчанию, если пользователь не определил другой конструктор. Его основная цель — инициализировать переменные экземпляра значениями по умолчанию. Кроме того, он в основном используется для создания объектов.
  2. Параметризованный конструктор: Параметризованный конструктор в Java — это конструктор, который способен инициализировать переменные экземпляра предоставленными значениями. Другими словами, конструкторы, принимающие аргументы, называются параметризованными конструкторами.

 

Q7. Что такое одноэлементный класс в Java и как мы можем создать одноэлементный класс?

Класс Singleton — это класс, только один экземпляр которого может быть создан в любой момент времени в одной JVM. Класс можно сделать одноэлементным, сделав его конструктор закрытым.

Q8. В чем разница между списком массивов и вектором в Java?

ArrayListВектор
Список массивов не синхронизирован. Вектор синхронизирован.
Array List работает быстро, так как не синхронизируется.Vector медленный, поскольку он потокобезопасен.
Если элемент вставляется в список массивов, он увеличивает размер своего массива на 50%.Вектор по умолчанию удваивает размер своего массива.
Список массивов не определяет размер приращения.Вектор определяет размер приращения.
Список массивов может использовать итератор только для обхода списка массивов.Vector может использовать как Enumeration, так и Iterator для обхода.

 

Q9. В чем разница между equals() и == в Java?

Метод Equals() определен в классе Object в Java и используется для проверки равенства двух объектов, определенных бизнес-логикой.

«==» или оператор равенства в Java — это бинарный оператор, предоставляемый языком программирования Java и используемый для сравнения примитивов и объектов. public boolean equals(Object o) — это метод, предоставляемый классом Object. Реализация по умолчанию использует оператор == для сравнения двух объектов. Например: метод может быть переопределен как класс String. Метод equals() используется для сравнения значений двух объектов.

Q10. Когда вы можете использовать ключевое слово super?

В Java ключевое слово super — это ссылочная переменная, которая ссылается на непосредственный объект родительского класса.

Когда вы создаете экземпляр подкласса, вы также создаете экземпляр родительского класса, на который ссылается суперссылочная переменная.

Использование ключевого слова Java super Keyword: 

  1. Чтобы сослаться на непосредственную переменную экземпляра родительского класса, используйте super.
  2. Ключевое слово super может использоваться для вызова метода непосредственного родительского класса.
  3. Super() можно использовать для вызова конструктора непосредственного родительского класса.

 

Q11. Что отличает HashSet от TreeSet?

ХэшсетНабор деревьев
Это реализовано через хеш-таблицу.TreeSet реализует интерфейс SortedSet, который использует деревья для хранения данных.
Он разрешает нулевой объект.Он не допускает нулевой объект.
Это быстрее, чем TreeSet, особенно для операций поиска, вставки и удаления.Для этих операций он медленнее, чем HashSet.
Он не поддерживает элементы в упорядоченном виде.Элементы поддерживаются в отсортированном порядке.
Он использует метод equals() для сравнения двух объектов.Он использует метод compareTo() для сравнения двух объектов.
Он не допускает гетерогенный объект.Он допускает неоднородный объект.

 

Q12. В чем разница между HashMap и HashTable в Java?

 

HashMapХеш-таблица
Он не синхронизирован. Он не может быть разделен между многими потоками без надлежащего кода синхронизации.Он синхронизирован. Он потокобезопасен и может совместно использоваться многими потоками.
Он допускает один нулевой ключ и несколько нулевых значений.Он не допускает использования нулевого ключа или значения.
— это новый класс, представленный в JDK 1.2.Он присутствовал и в более ранних версиях Java.
Это быстрее.Это медленнее.
Он проходит через итератор.Он проходит через Enumerator и Iterator.
Он использует отказоустойчивый итератор.Он использует счетчик, который не дает сбоев быстро.
Он наследует класс AbstractMap.Он наследует класс Dictionary.

 

Q13. Какова важность отражения в Java?

Reflection — это API времени выполнения для проверки и изменения поведения методов, классов и интерфейсов. Java Reflection — это мощный инструмент, который может быть действительно полезным. Java Reflection позволяет анализировать классы, интерфейсы, поля и методы во время выполнения, не зная, как они называются во время компиляции. Отражение также можно использовать для создания новых объектов, методов вызова и получения/установки значений полей. Внешние пользовательские классы можно использовать, создавая экземпляры объектов расширяемости с их полными именами. Отладчики также могут использовать отражение для проверки закрытых членов классов.

Q14. Как запретить сериализацию атрибутов класса в Java?

Атрибут NonSerialized можно использовать для предотвращения сериализации переменных-членов.
Вы также должны сделать объект, который потенциально может содержать конфиденциальные данные, несериализуемым, если это возможно. Примените атрибут NonSerialized к определенным полям, в которых хранятся конфиденциальные данные, если объект должен быть сериализован. Если вы не исключите эти поля из сериализации, хранящиеся в них данные будут видны любым программам с разрешением на сериализацию.

Q15. Можно ли вызвать конструктор класса внутри другого конструктора?

Да, мы можем вызвать конструктор класса внутри другого конструктора. Это также называется цепочкой конструкторов. Цепочка конструкторов может быть выполнена двумя способами:

  1. Внутри одного класса: для конструкторов одного класса можно использовать ключевое слово this().
  2. Из базового класса: ключевое слово super() используется для вызова конструктора из базового класса.
    Цепочка конструкторов следует процессу наследования. Конструктор подкласса сначала вызывает конструктор суперкласса. В связи с этим создание объекта подкласса начинается с инициализации элементов данных суперкласса. Цепочка конструкторов работает одинаково с любым количеством классов. Каждый конструктор продолжает вызывать цепочку до вершины цепочки.

 

Q16. Непрерывные области памяти обычно используются для хранения фактических значений в массиве, но не в ArrayList. Объяснять.

Массив обычно содержит элементы примитивных типов данных, таких как int, float и т. д. В таких случаях массив непосредственно хранит эти элементы в смежных ячейках памяти. Хотя ArrayList не содержит примитивных типов данных. ArrayList содержит ссылку на объекты в разных местах памяти, а не на сам объект. Вот почему объекты не хранятся в смежных ячейках памяти.

 

Q17. Чем создание строки с использованием new() отличается от литерала?
Когда мы создаем строку с помощью new(), создается новый объект. Принимая во внимание, что если мы создадим строку, используя синтаксис строкового литерала, она может вернуть уже существующий объект с тем же именем.

 

Q18. Зачем нужна синхронизация? Объясните с помощью соответствующего примера.

Java позволяет выполнять несколько потоков. Они могут обращаться к одной и той же переменной или объекту. Синхронизация помогает выполнять потоки один за другим.
Это важно, так как помогает выполнять все параллельные потоки при синхронизации. Это предотвращает ошибки согласованности памяти из-за доступа к общей памяти. Пример кода синхронизации:

public synchronized void increment()
{
a++;
}

Поскольку мы синхронизировали эту функцию, этот поток может использовать объект только после того, как его использовал предыдущий поток.

Q19. Объясните термин «инициализация двойной скобки» в Java?

Инициализация двойной скобки — это термин Java, который относится к комбинации двух независимых процессов. При этом используются две скобки. Первая фигурная скобка создает анонимный внутренний класс. Вторая фигурная скобка — это блок инициализации. Когда они оба используются вместе, это называется инициализацией двойной скобки. Внутренний класс имеет ссылку на окружающий внешний класс, обычно используя указатель this. Он используется для создания и инициализации в одном операторе. Обычно он используется для инициализации коллекций. Это уменьшает код, а также делает его более читаемым.

 

Q20. Почему говорят, что метод length() класса String не возвращает точных результатов?

Метод length() класса String не возвращает точных результатов, потому что
он просто учитывает количество символов в строке. Другими словами, кодовые точки за пределами BMP (базовой многоязычной плоскости), то есть кодовые точки, имеющие значение U+10000 или выше, будут игнорироваться.

Причина этого историческая. Одной из первоначальных целей Java было рассматривать весь текст как Unicode; тем не менее, в то время Unicode не определял кодовые точки вне BMP. Было слишком поздно изменять char к тому времени, когда Unicode указывал такие кодовые точки.

 

Q21. Каковы различия между кучей и памятью стека в Java?

Основное различие между памятью Heap и Stack:

ФункцииКучакуча
объем памятиПамять стека используется только одним потоком выполнения.Куча памяти используется всеми частями приложения.
ДоступПамять стека не может быть доступна другим потокам.Объекты, хранящиеся в куче, доступны глобально.
Управление памятьюПрименяет метод LIFO для освобождения памяти.Управление памятью основано на генерации, связанной с каждым объектом.
Продолжительность жизниСуществует до конца выполнения потока.Память кучи живет от начала до конца выполнения приложения.
использованиеПамять стека содержит только локальные примитивные и ссылочные переменные для объектов в куче.Всякий раз, когда создается объект, он всегда сохраняется в пространстве кучи.

Q22. Что такое пакет в Java? Перечислите различные преимущества пакетов.

Пакеты в Java — это набор связанных классов и интерфейсов, объединенных вместе. Используя пакеты, разработчики могут легко разбить код на модули и оптимизировать его повторное использование. Кроме того, код внутри пакетов может быть импортирован другими классами и использован повторно. Ниже я перечислил несколько его преимуществ:

  • Пакеты помогают избежать конфликтов имен
  • Они обеспечивают более легкий контроль доступа к коду
  • Пакеты также могут содержать скрытые классы, которые не видны внешним классам и используются только внутри пакета.
  • Создает правильную иерархическую структуру, упрощающую поиск связанных классов.

Q23. Почему указатели не используются в Java?

Java не использует указатели, потому что они небезопасны и усложняют программу. Поскольку Java известна своей простотой кода, добавление концепции указателей будет противоречивым. Более того, поскольку JVM отвечает за неявное выделение памяти, чтобы избежать прямого доступа пользователя к памяти, указатели в Java не рекомендуются.

Q24. Что такое JIT-компилятор в Java?

JIT означает компилятор Just-In-Time в Java. Это программа, которая помогает преобразовывать байт-код Java в инструкции, которые отправляются непосредственно в процессор. По умолчанию JIT-компилятор включен в Java и активируется всякий раз, когда вызывается метод Java. Затем компилятор JIT компилирует байт-код вызванного метода в собственный машинный код, компилируя его «как раз вовремя» для выполнения. Как только метод скомпилирован, JVM вызывает скомпилированный код этого метода напрямую, а не интерпретирует его. Вот почему он часто отвечает за оптимизацию производительности Java-приложений во время выполнения.

Q25. Что такое модификаторы доступа в Java?

В Java модификаторы доступа — это специальные ключевые слова, которые используются для ограничения доступа к классу, конструктору, члену данных и методу в другом классе. Java поддерживает четыре типа модификаторов доступа:

  1. По умолчанию
  2. Частный
  3. Защищено
  4. Общественный
МодификаторПо умолчаниюЧастныйЗащищеноОбщественный
Тот же классДАДАДАДА
Тот же подкласс пакетаДАНЕТДАДА
Тот же пакет без подклассаДАНЕТДАДА
Другой подкласс пакетаНЕТНЕТДАДА
Другой пакет без подклассаНЕТНЕТНЕТДА

Q26. Определите класс Java.

Класс в Java — это план, который включает в себя все ваши данные. Класс содержит поля (переменные) и методы для описания поведения объекта. Давайте посмотрим на синтаксис класса.

class Abc {
member variables // class body
methods}

Q27. Что такое объект в Java и как он создается?

Объект — это сущность реального мира, которая имеет состояние и поведение. Объект имеет три характеристики:

  1. Состояние
  2. Поведение
  3. Личность

Объект создается с использованием ключевого слова «новое». Например:

ИмяКласса obj = новое ИмяКласса();

Q28. Что такое объектно-ориентированное программирование?

Объектно-ориентированное программирование или широко известное как ООП — это модель программирования или подход, при котором программы организованы вокруг объектов, а не логики и функций. Другими словами, ООП в основном фокусируется на объектах, которыми необходимо манипулировать, а не на логике. Этот подход идеален для программ с большими и сложными кодами, которые необходимо активно обновлять или поддерживать.

Q29. Каковы основные концепции ООП в Java?

Объектно-ориентированное программирование или ООП — это стиль программирования, связанный с такими понятиями, как:

  1. Наследование: Наследование — это процесс, в котором один класс приобретает свойства другого.
  2. Инкапсуляция. Инкапсуляция в Java — это механизм объединения данных и кода в единое целое.
  3. Абстракция: Абстракция — это методология сокрытия деталей реализации от пользователя и предоставления функциональности только пользователям.
  4. Полиморфизм: Полиморфизм — это способность переменной, функции или объекта принимать несколько форм.

Q30. В чем разница между локальной переменной и переменной экземпляра?

В Java  локальная переменная обычно используется внутри метода, конструктора или блока  и имеет только локальную область видимости. Таким образом, эту переменную можно использовать только в рамках блока. Лучшее преимущество наличия локальной переменной заключается в том, что другие методы в классе даже не будут знать об этой переменной.

Пример

if(x > 100)
{
String test = "Edureka";
}

Принимая во внимание, что  переменная экземпляра в Java - это переменная, которая ограничена самим своим объектом. Эти переменные объявляются внутри  класса , но вне метода. Каждый объект этого класса будет создавать свою собственную копию переменной при ее использовании. Таким образом, любые изменения, внесенные в переменную, не будут отражаться ни в каких других экземплярах этого класса и будут привязаны только к этому конкретному экземпляру.

class Test{
public String EmpName;
public int empAge;
}

Q31. Различать конструкторы и методы в Java?

МетодыКонструкторы
1. Используется для представления поведения объекта1. Используется для инициализации состояния объекта
2. Должен иметь возвращаемый тип2. Не иметь возвращаемого типа
3. Необходимо вызывать явно3. Вызывается неявно
4. Компилятор не предоставляет метод по умолчанию4. Конструктор по умолчанию предоставляется компилятором, если в классе его нет.
5. Имя метода может совпадать или не совпадать с именем класса.5. Имя конструктора всегда должно совпадать с именем класса.

Если вы столкнулись с какими-либо трудностями при ответе на эти вопросы интервью по Core Java, прокомментируйте свои проблемы в разделе ниже.

Q32. Что такое ключевое слово final в Java?

final — это специальное ключевое слово в Java, которое используется в качестве модификатора доступа. Конечная переменная может использоваться в различных контекстах, таких как:

  • конечная переменная

Когда ключевое слово final используется с переменной, ее значение не может быть изменено после присвоения. Если конечной переменной не присвоено значение, то с помощью только конструктора класса ей можно присвоить значение.

  • окончательный метод

Когда метод объявлен окончательным, он не может быть переопределен наследующим классом.

  • последний класс

Когда класс объявлен как final в Java, он не может быть расширен каким-либо классом подкласса, но может расширять другой класс.

Q33. В чем разница между операторами break и continue?

переменаПродолжать
1. Может использоваться в операторах switch и loop (for, while, do while).1. Может использоваться только с операторами цикла
2. Это приводит к тому, что операторы переключения или цикла завершаются в момент их выполнения.2. Цикл не прерывается, но цикл переходит к следующей итерации.
3. Он немедленно завершает самый внутренний охватывающий цикл или переключатель.3. Продолжение в цикле, вложенном в переключатель, приведет к выполнению следующей итерации цикла.

Пример перерыва:

for (int i = 0; i < 5; i++)</div>
<div>
<pre>{
if (i == 3)
{
break;
}
System.out.println(i);
}

Пример продолжения:

for (int i = 0; i < 5; i++)
{
if(i == 2)
{
continue;
}
System.out.println(i);
}

Q34. Что такое бесконечный цикл в Java? Объясните на примере.

Бесконечный цикл — это последовательность инструкций в Java, которая бесконечно зацикливается, когда функциональный выход не встречается. Этот тип цикла может быть результатом ошибки программирования или также может быть преднамеренным действием, основанным на поведении приложения. Бесконечный цикл завершится автоматически после выхода из приложения.

Например:

public class InfiniteForLoopDemo
{
public static void main(String[] arg) {
for(;;)
System.out.println("Welcome to Edureka!");
// To terminate this program press ctrl + c in the console.
}
}

Q35. В чем разница между this() и super() в Java?

В Java super() и this() являются специальными ключевыми словами, которые используются для вызова конструктора. 

это()супер()
1. this() представляет текущий экземпляр класса1. super() представляет текущий экземпляр родительского/базового класса
2. Используется для вызова конструктора по умолчанию того же класса.2. Используется для вызова конструктора по умолчанию родительского/базового класса.
3. Используется для доступа к методам текущего класса3. Используется для доступа к методам базового класса
4. Используется для указания текущего экземпляра класса4. Используется для указания экземпляра суперкласса
5. Должна быть первой строкой блока5. Должна быть первой строкой блока

Q36. Что такое пул строк Java?

Пул строк Java относится к набору строк, которые хранятся в куче памяти. При этом всякий раз, когда создается новый объект, пул строк сначала проверяет, присутствует ли этот объект в пуле или нет. Если он присутствует, то в переменную возвращается та же ссылка, иначе в пуле строк будет создан новый объект, и будет возвращена соответствующая ссылка.

Пул строк — Вопросы для собеседования по Java — Edureka

Q37. Различать статические и нестатические методы в Java.

Статический методНестатический метод
1. Ключевое слово static  должно использоваться перед именем метода.1. Не нужно использовать ключевое слово static перед именем метода.
2. Вызывается с помощью класса (className.methodName) 2. Может вызываться как любой общий метод
3. Они не могут получить доступ к каким-либо нестатическим переменным или методам экземпляра.3. Он может получить доступ к любому статическому методу и любой статической переменной без создания экземпляра класса.

Q38. Объясните термин «Инициализация двойной скобки» в Java?

Инициализация двойной скобки — это термин Java, который относится к комбинации двух независимых процессов. При этом используются две скобки. Первая фигурная скобка создает анонимный внутренний класс. Вторая фигурная скобка — это блок инициализации. Когда они оба используются вместе, это называется инициализацией двойной скобки. Внутренний класс имеет ссылку на окружающий внешний класс, обычно используя указатель this. Он используется для создания и инициализации в одном операторе. Обычно он используется для инициализации коллекций. Это уменьшает код, а также делает его более читаемым.

Q39. Что такое цепочка конструкторов в Java?

В Java цепочка конструкторов — это процесс вызова одного конструктора из другого по отношению к текущему объекту. Цепочка конструкторов возможна только через наследие, где конструктор подкласса отвечает за вызов конструктора суперкласса в первую очередь. В цепочке конструкторов может быть любое количество классов. Цепочка конструкторов может быть достигнута двумя способами:

  1. В том же классе, используя this()
  2. Из базового класса с помощью super()

Q40. Разница между String, StringBuilder и StringBuffer.

ФакторНитьStringBuilderСтроковый буфер
Зона храненияПостоянный пул строкПлощадь кучиПлощадь кучи
ИзменчивостьНеизменныйИзменяемыйИзменяемый
Безопасность потокаДаНетДа
СпектакльБыстроБолее эффективнымМенее эффективны

Q41. Что такое загрузчик классов в Java?

Java ClassLoader —  это подмножество JVM (виртуальная машина Java), которое отвечает за загрузку файлов классов. Всякий раз, когда программа Java выполняется, она сначала загружается загрузчиком классов. Java предоставляет три встроенных загрузчика классов:

  1. Bootstrap ClassLoader
  2. Расширение ClassLoader
  3. Система/приложение ClassLoader

Q42. Почему строки Java неизменяемы по своей природе?

В Java строковые объекты являются неизменяемыми по своей природе, что просто означает, что после создания объекта String его состояние не может быть изменено. Всякий раз, когда вы пытаетесь обновить значение этого объекта вместо обновления значений этого конкретного объекта, Java создает новый строковый объект. Объекты Java String неизменяемы, поскольку объекты String обычно кэшируются в пуле String. Поскольку строковые литералы обычно совместно используются несколькими клиентами, действия одного клиента могут повлиять на остальные. Это повышает безопасность, кэширование, синхронизацию и производительность приложения. 

Q43. В чем разница между массивом и списком массивов?

МножествоArrayList
Не может содержать значения разных типов данныхМожет содержать значения разных типов данных.
Размер должен быть определен на момент объявленияРазмер может быть динамически изменен
Необходимо указать индекс для добавления данныхНе нужно указывать индекс
Массивы не параметризуются по типуМассивы имеют тип 
Массивы могут содержать как примитивные типы данных, так и объекты.Списки массивов могут содержать только объекты, примитивные типы данных не допускаются.

Q44. Что такое карта в Java?

В Java Map — это интерфейс пакета Util, который сопоставляет уникальные ключи со значениями. Интерфейс карты не является подмножеством основного интерфейса коллекции, и поэтому его поведение мало отличается от других типов коллекций. Ниже приведены некоторые характеристики интерфейса карты: 

  1. Карта не содержит повторяющихся ключей.

Каждый ключ может отображать не более одного значения.

Q45. Что такое класс коллекции в Java? Перечислите его методы и интерфейсы.

В Java коллекция — это структура, которая действует как архитектура для хранения и управления группой объектов. Используя коллекции, вы можете выполнять различные задачи, такие как поиск, сортировка, вставка, манипулирование, удаление и т. д. Платформа коллекций Java включает в себя следующее:

  • Интерфейсы
  • Классы
  • Методы

На изображении ниже показана полная иерархия коллекции Java.

FrameworkHierarchy — Коллекции Java — Edureka

 


OOPS Вопросы для собеседования по Java

Q1. Что такое Полиморфизм?

Полиморфизм кратко описывается как «один интерфейс, множество реализаций». Полиморфизм — это характеристика способности присваивать различное значение или использование чему-либо в разных контекстах, в частности, позволять сущности, такой как переменная, функция или объект, иметь более одной формы. Существует два типа полиморфизма:

  1. Полиморфизм времени компиляции
  2. Полиморфизм времени выполнения

Полиморфизм времени компиляции — это перегрузка методов, тогда как полиморфизм времени выполнения выполняется с использованием наследования и интерфейса.

 

Q2. Что такое полиморфизм времени выполнения или диспетчеризация динамических методов?

В Java полиморфизм времени выполнения или диспетчеризация динамического метода — это процесс, в котором вызов переопределенного метода разрешается во время выполнения, а не во время компиляции. В этом процессе переопределенный метод вызывается через ссылочную переменную суперкласса. Давайте посмотрим на пример ниже, чтобы понять его лучше.

class Car {
void run()
{
System.out.println(“car is running”); 
}
}
class Audi extends Car {
void run()
{
System.out.prinltn(“Audi is running safely with 100km”);
}
public static void main(String args[])
{
Car b= new Audi();    //upcasting
b.run();
}
}

Q3. Что такое абстракция в Java?

Абстракция относится к качеству работы с идеями, а не с событиями. В основном это связано с тем, чтобы скрыть детали и показать пользователю важные вещи. Таким образом, можно сказать, что абстракция в Java — это процесс сокрытия деталей реализации от пользователя и раскрытия им только функциональности. Абстракция может быть достигнута двумя способами:

  1. Абстрактные классы (можно достичь 0-100% абстракции)
  2. Интерфейсы (можно достичь 100% абстракции)

Q4. Что вы подразумеваете под интерфейсом в Java?

Интерфейс в Java — это план класса или, можно сказать, набор абстрактных методов и статических констант. В интерфейсе каждый метод является общедоступным и абстрактным, но не содержит конструктора. Таким образом, интерфейс в основном представляет собой группу связанных методов с пустыми телами. Пример:

public interface Animal {
  public void eat();
  public void sleep();
  public void run();
}

Q5. В чем разница между абстрактными классами и интерфейсами?

Абстрактный классИнтерфейсы
Абстрактный класс может предоставлять полный код по умолчанию и/или только детали, которые необходимо переопределить.Интерфейс вообще не может предоставлять никакого кода, только подпись
В случае абстрактного класса класс может расширять только один абстрактный класс.Класс может реализовывать несколько интерфейсов
Абстрактный класс может иметь неабстрактные методы.Все методы интерфейса абстрактны
Абстрактный класс может иметь переменные экземпляраИнтерфейс не может иметь переменные экземпляра
Абстрактный класс может иметь любую видимость: публичную, приватную, защищенную.Видимость интерфейса должна быть общедоступной (или) отсутствовать
Если мы добавим новый метод в абстрактный класс, у нас будет возможность предоставить реализацию по умолчанию, и, следовательно, весь существующий код может работать правильно.Если мы добавим новый метод в интерфейс, мы должны отследить все реализации интерфейса и определить реализацию для нового метода.
Абстрактный класс может содержать конструкторыИнтерфейс не может содержать конструкторы
Абстрактные классы работают быстроИнтерфейсы работают медленно, так как для поиска соответствующего метода в реальном классе требуется дополнительная косвенность.

Q6. Что такое наследование в Java?

Наследование в Java — это концепция, при которой свойства одного класса могут наследоваться другим. Это помогает повторно использовать код и устанавливать отношения между разными классами. Наследование осуществляется между двумя типами классов:

  1. Родительский класс (супер или базовый класс)
  2. Дочерний класс (подкласс или производный класс)

 

Класс, который наследует свойства, называется дочерним классом, тогда как класс, свойства которого унаследованы, называется родительским классом.

Q7. Какие существуют типы наследования в Java?

Java поддерживает четыре типа наследования:

  1. Одиночное наследование: при одиночном наследовании один класс наследует свойства другого, т.е. будет только один родительский и один дочерний классы.
  2. Многоуровневое наследование: когда класс является производным от класса, который также является производным от другого класса, т. е. у класса, имеющего более одного родительского класса, но на разных уровнях, такой тип наследования называется многоуровневым наследованием.
  3. Иерархическое наследование: когда класс имеет более одного дочернего класса (подкласса) или, другими словами, более одного дочернего класса имеют один и тот же родительский класс, тогда такой тип наследования называется иерархическим.
  4. Гибридное наследование: Гибридное наследование представляет собой комбинацию двух или более типов наследования.

Q8. Что такое перегрузка и переопределение методов?

Перегрузка метода:

  • При перегрузке методов методы одного и того же класса имеют одно и то же имя, но каждый метод должен иметь разное количество параметров или параметры, имеющие разные типы и порядок.
  • Перегрузка метода заключается в том, чтобы «добавить» или «расширить» поведение метода.
  • Это полиморфизм времени компиляции.
  • У методов должна быть другая подпись.
  • Он может нуждаться или не нуждаться в наследовании в перегрузке метода.

Давайте посмотрим на пример ниже, чтобы понять его лучше.

class Adder {
Static int add(int a, int b)
{
return a+b;
}
Static double add( double a, double b)
{
return a+b;
}
public static void main(String args[])
{
System.out.println(Adder.add(11,11));
System.out.println(Adder.add(12.3,12.6));
}}

Переопределение метода:  

  • В переопределении метода подкласс имеет тот же метод с тем же именем и точно таким же количеством и типом параметров и тем же типом возвращаемого значения, что и суперкласс.
  • Переопределение метода заключается в «изменении» существующего поведения метода.
  • Это полиморфизм времени выполнения.
  • Методы должны иметь одинаковую сигнатуру.
  • Это всегда требует наследования в переопределении метода.

Давайте посмотрим на пример ниже, чтобы понять его лучше.

class Car {
void run(){
System.out.println(“car is running”); 
}
Class Audi extends Car{
void run()
{
System.out.prinltn("Audi is running safely with 100km");
}
public static void main( String args[])
{
Car b=new Audi();
b.run();
}
}

Q9. Можете ли вы переопределить частный или статический метод в Java?

Вы не можете переопределить частный или статический метод в Java. Если вы создадите аналогичный метод с тем же типом возвращаемого значения и теми же аргументами метода в дочернем классе, он скроет метод суперкласса; это известно как скрытие метода. Точно так же вы не можете переопределить закрытый метод в подклассе, потому что он там недоступен. Что вы можете сделать, так это создать еще один частный метод с тем же именем в дочернем классе. Давайте посмотрим на пример ниже, чтобы понять его лучше.

class Base {
private static void display() {
System.out.println("Static or class method from Base");
}
public void print() {
System.out.println("Non-static or instance method from Base");
}
class Derived extends Base {
private static void display() {
System.out.println("Static or class method from Derived");
}
public void print() {
System.out.println("Non-static or instance method from Derived");
}
public class test {
public static void main(String args[])
{
Base obj= new Derived();
obj1.display();
obj1.print();
}
}

Q10. Что такое множественное наследование? Поддерживается ли это Java?

MultipleInheritance — Вопросы на собеседовании по Java — EdurekaЕсли дочерний класс наследует свойство от нескольких классов, это называется множественным наследованием. Java не позволяет расширять несколько классов.

Проблема с множественным наследованием заключается в том, что если несколько родительских классов имеют одно и то же имя метода, то во время выполнения компилятору становится трудно решить, какой метод выполнять из дочернего класса.

Поэтому Java не поддерживает множественное наследование. Эту проблему обычно называют алмазной проблемой.

Если вы столкнулись с какими-либо проблемами с этими вопросами собеседования по Java, прокомментируйте свои проблемы в разделе ниже.

 

Q11. Что такое инкапсуляция в Java?

Инкапсуляция — это механизм, в котором вы связываете свои данные (переменные) и код (методы) вместе как единое целое. Здесь данные скрыты от внешнего мира и доступны только через методы текущего класса. Это помогает защитить данные от любых ненужных изменений. Мы можем добиться инкапсуляции в Java следующим образом:

  • Объявление переменных класса как закрытых.
  • Предоставление общедоступных методов установки и получения для изменения и просмотра значений переменных.

Q12. Что такое ассоциация?

Ассоциация — это отношение, в котором все объекты имеют свой жизненный цикл и не имеют владельца. Возьмем пример Учителя и Ученика. Несколько учеников могут связываться с одним учителем, а один ученик может связываться с несколькими учителями, но между объектами нет собственности, и у обоих есть собственный жизненный цикл. Эти отношения могут быть «один к одному», «один ко многим», «многие к одному» и «многие ко многим».

Q13. Что вы имеете в виду под агрегацией?

Агрегация — это специализированная форма ассоциации, в которой все объекты имеют собственный жизненный цикл, но существует право собственности, а дочерний объект не может принадлежать другому родительскому объекту. Возьмем пример отдела и учителя. Один учитель не может принадлежать нескольким отделам, но если мы удалим объект учителя отдела, он не будет уничтожен. 

Q14. Что такое композиция в Java?

Композиция снова является специализированной формой Агрегации, и мы можем назвать это отношением «смерти». Это сильный тип агрегации. Дочерний объект не имеет своего жизненного цикла, и если родительский объект удаляется, все дочерние объекты также будут удалены. Давайте снова возьмем пример отношений между Домом и комнатами. Дом может содержать несколько комнат, нет независимой жизни комнаты, и любая комната не может принадлежать двум разным домам, если мы удалим комнату дома, она будет удалена автоматически.

Q15. Что такое маркерный интерфейс?

Интерфейс маркера может быть определен как интерфейс, не имеющий данных-членов и функций-членов. Проще говоря, пустой интерфейс называется интерфейсом маркера. Наиболее распространенными примерами интерфейса Marker в Java являются Serializable, Cloneable и т. д. Интерфейс маркера можно объявить следующим образом.

public interface Serializable{
}

Q16. Что такое клонирование объектов в Java?

Клонирование объекта в Java — это процесс создания точной копии объекта. В основном это означает возможность создания объекта с состоянием, аналогичным исходному объекту. Для этого в Java предусмотрен метод clone()  , позволяющий использовать эту функциональность. Этот метод создает новый экземпляр класса текущего объекта, а затем инициализирует все его поля точно таким же содержимым соответствующих полей. Для объекта clone() должен быть реализован интерфейс маркера java.lang.Cloneable , чтобы избежать каких-либо исключений во время выполнения. Одна вещь, которую вы должны отметить, это то, что Object clone() является защищенным методом, поэтому вам необходимо переопределить его.

Q17. Что такое конструктор копирования в Java?

Конструктор копирования — это функция-член, которая используется для инициализации объекта с использованием другого объекта того же класса. Хотя в Java нет необходимости в конструкторе копирования, поскольку все объекты передаются по ссылке. Более того, Java даже не поддерживает автоматическую передачу по значению.

Q18. Что такое перегрузка конструктора в Java?

В Java перегрузка конструктора — это метод добавления любого количества конструкторов в класс, каждый из которых имеет свой список параметров. Компилятор использует количество параметров и их типов в списке, чтобы различать перегруженные конструкторы.

class Demo
{
int i;
public Demo(int a)
{
i=k;
}
public Demo(int a, int b)
{
//body
}
}

Если вы столкнулись с какими-либо проблемами с этими вопросами собеседования по Java, прокомментируйте свои проблемы в разделе ниже.


Сервлеты — вопросы на собеседовании по Java  

Q1. Что такое сервлет?

  • Java Servlet — это серверные технологии для расширения возможностей веб-серверов за счет поддержки динамического ответа и сохранения данных.
  • Пакеты javax.servlet и javax.servlet.http предоставляют интерфейсы и классы для написания собственных сервлетов.
  • Все сервлеты должны реализовывать интерфейс javax.servlet.Servlet, который определяет методы жизненного цикла сервлета. При реализации универсальной службы мы можем расширить класс GenericServlet, предоставляемый API Java Servlet. Класс HttpServlet предоставляет методы, такие как doGet() и doPost(), для обработки специфичных для HTTP служб.
  • В большинстве случаев доступ к веб-приложениям осуществляется с использованием протокола HTTP, поэтому мы в основном расширяем класс HttpServlet. Иерархия API сервлетов показана на изображении ниже.

Сервлет — Вопросы для собеседования по Java — Edureka

Q2. В чем разница между методами Get и Post?

ПолучитьСообщение
Ограниченный объем данных может быть отправлен, поскольку данные отправляются в заголовке.Большой объем данных может быть отправлен, поскольку данные отправляются в теле.
 Незащищено, так как данные отображаются в адресной строке. Защищено, поскольку данные не отображаются в адресной строке.
 Можно добавить в закладки Нельзя добавить в закладки
 идемпотент Неидемпотентный
 Он более эффективен и используется, чем Post Он менее эффективен и используется

Q3. Что такое диспетчер запросов?

Интерфейс RequestDispatcher используется для пересылки запроса на другой ресурс, который может быть HTML, JSP или другим сервлетом в том же приложении. Мы также можем использовать это, чтобы включить в ответ содержимое другого ресурса.

В этом интерфейсе определены два метода:

1.пусто вперед()

2. пусто включить ()

ForwardMethod — Вопросы для собеседования по Java — Edureka

IncludeMethod — Вопросы для собеседования по Java — Edureka

Q4. В чем разница между методом forward() и методами sendRedirect()?


 

 

метод пересылки()Метод ОтправитьПеренаправление()
forward() отправляет тот же запрос на другой ресурс.Метод sendRedirect() всегда отправляет новый запрос, потому что он использует адресную строку браузера.
 Метод forward() работает на стороне сервера. Метод sendRedirect() работает на стороне клиента.
 Метод forward() работает только внутри сервера.Метод sendRedirect() работает внутри и вне сервера.

Q5. Каков жизненный цикл сервлета?

В жизненном цикле сервлета есть 5 этапов:LifeCycleServlet — Вопросы для собеседования по Java — Edureka

  1. Сервлет загружен
  2. Сервлет создан
  3. Сервлет инициализирован
  4. Обслужить запрос
  5. Сервлет уничтожен

Q6. Как файлы cookie работают в сервлетах?

  • Файлы cookie — это текстовые данные, отправляемые сервером клиенту, которые сохраняются на локальном компьютере клиента.
  • Servlet API обеспечивает поддержку файлов cookie через класс javax.servlet.http.Cookie, реализующий интерфейсы Serializable и Cloneable.
  • Метод HttpServletRequest getCookies() предназначен для получения массива файлов cookie из запроса, поскольку нет смысла добавлять файлы cookie в запрос, нет методов для установки или добавления файлов cookie в запрос.
  • Точно так же метод HttpServletResponse addCookie(Cookie c) предоставляется для прикрепления cookie в заголовке ответа, для cookie нет методов получения.

Q7. В чем разница между ServletContext и ServletConfig?

Разница между ServletContext и ServletConfig в Servlets JSP заключается в приведенном ниже табличном формате.

Конфигурация сервлетовКонтекст сервлета
Объект конфигурации сервлета представляет один сервлетОн представляет собой целое веб-приложение, работающее на конкретной JVM и общее для всех сервлетов.
Это похоже на локальный параметр, связанный с конкретным сервлетом.Это как глобальный параметр, связанный со всем приложением.
Это пара значений имени, определенная внутри раздела сервлета файла web.xml, поэтому она имеет широкую область действия сервлета.ServletContext имеет широкую область применения, поэтому определите его за пределами тега сервлета в файле web.xml.
Метод getServletConfig() используется для получения объекта конфигурации.Метод getServletContext() используется для получения объекта контекста.
например, корзина пользователя относится к конкретному пользователю, поэтому здесь мы можем использовать конфигурацию сервлета.Чтобы получить MIME-тип файла или сеанса приложения, информация, связанная с сеансом, сохраняется с использованием объекта контекста сервлета.

 

Q8. Каковы различные методы управления сеансом в сервлетах?

Сеанс — это состояние диалога между клиентом и сервером, и он может состоять из нескольких запросов и ответов между клиентом и сервером. Поскольку HTTP и веб-сервер не имеют состояния, единственный способ поддерживать сеанс — это когда некоторая уникальная информация о сеансе (идентификатор сеанса) передается между сервером и клиентом в каждом запросе и ответе.

Некоторые из распространенных способов управления сеансом в сервлетах:

  1. Аутентификация пользователя
  2. Скрытое поле HTML
  3. Печенье
  4. Перезапись URL
  5. API управления сессиями

 

SessionManagement — Вопросы для собеседования по Java — Edureka


JDBC — вопросы на собеседовании по Java 

1. Что такое драйвер JDBC?

Драйвер JDBC — это программный компонент, который позволяет Java-приложению взаимодействовать с базой данных. Существует 4 типа драйверов JDBC:

  1. Драйвер моста JDBC-ODBC
  2. Драйвер собственного API (частично java-драйвер)
  3. Драйвер сетевого протокола (полностью драйвер Java)
  4. Тонкий драйвер (полностью java-драйвер)

2. Каковы шаги для подключения к базе данных в Java?

  • Регистрация класса драйвера
  • Создание соединения
  • Создание заявления
  • Выполнение запросов
  • Закрытие соединения

3. Что такое компоненты JDBC API?

Пакет java.sql содержит интерфейсы и классы для JDBC API.

Интерфейсы:

  • Связь
  • Заявление
  • Подготовленное заявление
  • Набор результатов
  • ResultSetMetaData
  • Метаданные базы данных
  • CallableStatement и т. д.

Классы:

  • DriverManager
  • капля
  • Клоб
  • Типы
  • SQLException и т. д.

4. Какова роль класса JDBC DriverManager?

Класс DriverManager управляет зарегистрированными драйверами. Его можно использовать для регистрации и отмены регистрации водителей. Он предоставляет фабричный метод, который возвращает экземпляр Connection.

5. Что такое интерфейс соединения JDBC?

Интерфейс Connection поддерживает сеанс с базой данных. Его можно использовать для управления транзакциями. Он предоставляет фабричные методы, которые возвращают экземпляры Statement, PreparedStatement, CallableStatement и DatabaseMetaData.

ConnectionInterface — Вопросы для собеседования по Java — Edureka

Если вы столкнулись с какими-либо проблемами с этими вопросами собеседования по Java, прокомментируйте свои проблемы в разделе ниже.

6. Каково назначение интерфейса JDBC ResultSet?

Объект ResultSet представляет строку таблицы. Его можно использовать для изменения указателя курсора и получения информации из базы данных.

7. Что такое интерфейс JDBC ResultSetMetaData?

Интерфейс ResultSetMetaData возвращает информацию о таблице, такую ​​как общее количество столбцов, имя столбца, тип столбца и т. д.

8. Что такое интерфейс JDBC DatabaseMetaData?

Интерфейс DatabaseMetaData возвращает информацию о базе данных, такую ​​как имя пользователя, имя драйвера, версия драйвера, количество таблиц, количество просмотров и т. д.

9. Что вы подразумеваете под пакетной обработкой в ​​JDBC?

Пакетная обработка помогает группировать связанные операторы SQL в пакет и выполнять их вместо выполнения одного запроса. Используя метод пакетной обработки в JDBC, вы можете выполнять несколько запросов, что повышает производительность.

10. В чем разница между execute, executeQuery, executeUpdate?

Оператор execute(String query) используется для выполнения любого SQL-запроса и возвращает TRUE, если результатом является ResultSet, например выполнение запросов Select. Вывод FALSE, когда нет объекта ResultSet, такого как выполнение запросов на вставку или обновление. Мы можем использовать getResultSet() для получения ResultSet и метод getUpdateCount() для получения счетчика обновлений.

Оператор executeQuery (строковый запрос) используется для выполнения запросов Select и возвращает ResultSet. Возвращаемый набор результатов никогда не бывает нулевым, даже если нет записей, соответствующих запросу. При выполнении запросов на выборку мы должны использовать метод executeQuery, чтобы, если кто-то попытается выполнить оператор вставки/обновления, он выдал java.sql.SQLException с сообщением «метод executeQuery не может использоваться для обновления».

Оператор executeUpdate(String query ) используется для выполнения операторов Insert/Update/Delete (DML) или операторов DDL, которые ничего не возвращают. Результатом является int, равный количеству строк для инструкций языка манипулирования данными SQL (DML). Для операторов DDL вывод равен 0.

Вы должны использовать метод execute() только тогда, когда вы не уверены в типе оператора, иначе используйте метод executeQuery или executeUpdate.

Q11. Что вы понимаете под заявлениями JDBC?

Операторы JDBC — это в основном операторы, которые используются для отправки команд SQL в базу данных и извлечения данных из базы данных. JDBC предоставляет различные методы, такие как execute(), executeUpdate(), executeQuery и т. д., для взаимодействия с базой данных.

JDBC поддерживает 3 типа операторов:

  1. Заявление: используется для общего доступа к базе данных и выполняет статический запрос SQL во время выполнения.
  2. PreparedStatement: используется для предоставления входных параметров запросу во время выполнения.
  3. CallableStatement: используется для доступа к хранимым процедурам базы данных и помогает принимать параметры времени выполнения.

Spring Framework — вопросы на собеседовании по Java 

Q1. Что такое весна?

Википедия определяет фреймворк Spring как «фреймворк приложения и инверсию контейнера управления для платформы Java». Основные функции фреймворка могут использоваться любым Java-приложением, но существуют расширения для создания веб-приложений поверх платформы Java EE». Spring — это, по сути, легкая интегрированная среда, которую можно использовать для разработки корпоративных приложений на языке java.

Q2. Назовите различные модули среды Spring.

Некоторые из важных модулей Spring Framework:

  • Spring Context — для внедрения зависимостей.
  • Spring AOP — для аспектно-ориентированного программирования.
  • Spring DAO — для операций с базой данных с использованием шаблона DAO.
  • Spring JDBC — для поддержки JDBC и DataSource.
  • Spring ORM — для поддержки инструментов ORM, таких как Hibernate.
  • Spring Web Module — для создания веб-приложений.
  • Spring MVC — реализация Model-View-Controller для создания веб-приложений, веб-сервисов и т. д.

SpringFramework — Вопросы на собеседовании по Java — EdurekaQ3. Перечислите некоторые важные аннотации в конфигурации Spring на основе аннотаций.

Важными аннотациями являются:

  • @Необходимый
  • @Autowired
  • @Квалификатор
  • @Ресурс
  • @PostConstruct
  • @PreDestroy

Q4. Объясните Bean in Spring и перечислите различные области применения Spring bean.

Компоненты — это объекты, формирующие основу приложения Spring. Они управляются контейнером Spring IoC. Другими словами, компонент — это объект, который создается, собирается и управляется контейнером Spring IoC.

В Spring bean-компонентах определено пять областей действия.

SpringBean — Вопросы для собеседования по Java — Edureka

  • Singleton : для каждого контейнера будет создан только один экземпляр компонента. Это область действия по умолчанию для spring bean-компонентов. При использовании этой области убедитесь, что у Spring Bean нет общих переменных экземпляра, иначе это может привести к проблемам с несогласованностью данных, поскольку он не является потокобезопасным.
  • Прототип : каждый раз при запросе компонента будет создаваться новый экземпляр.
  • Запрос : это то же самое, что и область действия прототипа, однако она предназначена для использования в веб-приложениях. Новый экземпляр bean-компонента будет создаваться для каждого HTTP-запроса.
  • Сеанс : контейнер будет создавать новый компонент для каждого HTTP-сеанса.
  • Global-session : используется для создания глобальных сеансовых компонентов для приложений с портлетами.

Если вы столкнулись с какими-либо проблемами с этими вопросами собеседования по Java, прокомментируйте свои проблемы в разделе ниже.

Q5. Объясните роль DispatcherServlet и ContextLoaderListener.

DispatcherServlet — это, по сути, передний контроллер в приложении Spring MVC, поскольку он загружает файл конфигурации bean-компонентов Spring и инициализирует все настроенные bean-компоненты. Если аннотации включены, он также сканирует пакеты для настройки любого компонента, аннотированного аннотациями @Component, @Controller, @Repository или @Service.

DispatcherServlet — Вопросы для собеседования по Java — EdurekaContextLoaderListener, с другой стороны, является прослушивателем для запуска и закрытия WebApplicationContext в корневом каталоге Spring. Некоторые из его важных функций включают привязку жизненного цикла Application Context к жизненному циклу ServletContext и автоматизацию создания ApplicationContext.

ContextLoader — Вопросы для собеседования по Java — Edureka

Q6. В чем разница между внедрением конструктора и внедрением сеттера?

Нет.Внедрение конструктораИнъекция сеттера
 1) Без частичного впрыска Частичный впрыск
 2) Не переопределяет свойство setter Переопределяет свойство конструктора, если оба определены.
 3)Создает новый экземпляр, если происходит какое-либо изменениеНе создает новый экземпляр, если вы измените значение свойства
 4)  Лучше для слишком многих свойств Лучше для нескольких свойств.

Q7. Что такое автовайринг в Spring? Какие есть режимы автопроводки?

Autowiring позволяет программисту автоматически вводить bean-компонент. Нам не нужно писать явную логику внедрения. Давайте посмотрим код для внедрения bean-компонента с использованием внедрения зависимостей.

  1. <bean id="emp" class="com.javatpoint.Employee" autowire="byName" />

Режимы автопроводки приведены ниже:

Нет.РежимОписание
 1) нет это режим по умолчанию, это означает, что автопроводка не включена.
 2) по имени Внедряет bean-компонент на основе имени свойства. Он использует метод установки.
 3) по типу Внедряет bean-компонент на основе типа свойства. Он использует метод установки.
 4) конструктор Он вводит bean-компонент с помощью конструктора

Q8. Как обрабатывать исключения в Spring MVC Framework?

Spring MVC Framework предоставляет следующие способы, которые помогут нам добиться надежной обработки исключений.

На основе контроллера:

Мы можем определить методы обработчика исключений в наших классах контроллеров. Все, что нам нужно, это аннотировать эти методы аннотацией @ExceptionHandler.

Глобальный обработчик исключений:

Обработка исключений является сквозной проблемой, и Spring предоставляет аннотацию @ControllerAdvice, которую мы можем использовать с любым классом для определения нашего глобального обработчика исключений.

Реализация HandlerExceptionResolver: 

Что касается общих исключений, в большинстве случаев мы обслуживаем статические страницы. Spring Framework предоставляет интерфейс HandlerExceptionResolver, который мы можем реализовать для создания глобального обработчика исключений. Причина этого дополнительного способа определения глобального обработчика исключений заключается в том, что среда Spring также предоставляет классы реализации по умолчанию, которые мы можем определить в нашем файле конфигурации bean-компонента Spring, чтобы получить преимущества обработки исключений среды Spring.

 

Q9. Какие важные аннотации Spring вы использовали?

Вот некоторые из аннотаций Spring, которые я использовал в своем проекте:

@Controller — для классов контроллеров в проекте Spring MVC.

@RequestMapping — для настройки сопоставления URI в методах обработчика контроллера. Это очень важная аннотация, поэтому вам следует просмотреть примеры аннотаций Spring MVC RequestMapping.

@ResponseBody — для отправки объекта в качестве ответа, обычно для отправки данных XML или JSON в качестве ответа.

@PathVariable — для отображения динамических значений из URI в аргументы метода обработчика.

@Autowired — для автоматического подключения зависимостей в бинах Spring.

@Qualifier — с аннотацией @Autowired, чтобы избежать путаницы при наличии нескольких экземпляров типа bean-компонента.

@Service — для классов обслуживания.

@Scope — для настройки области действия Spring bean.

@Configuration, @ComponentScan и @Bean — для конфигураций на основе Java.

Аннотации AspectJ для настройки аспектов и советов, @Aspect, @Before, @After, @Around, @Pointcut и т. д.

Q10. Как интегрировать Spring и Hibernate Framework?

Мы можем использовать модуль Spring ORM для интеграции фреймворков Spring и Hibernate, если вы используете Hibernate 3+, где SessionFactory предоставляет текущий сеанс, тогда вам следует избегать использования классов HibernateTemplate или HibernateDaoSupport и лучше использовать шаблон DAO с внедрением зависимостей для интеграции.

Кроме того, Spring ORM обеспечивает поддержку использования декларативного управления транзакциями Spring, поэтому вам следует использовать это, а не использовать шаблонный код гибернации для управления транзакциями. 

Q11. Назовите типы управления транзакциями, которые поддерживает Spring.

Spring поддерживает два типа управления транзакциями. Они есть:

  1. Программное управление транзакциями:  в этом случае транзакция управляется с помощью программирования. Он обеспечивает исключительную гибкость, но его очень сложно поддерживать.
  2. Декларативное управление транзакциями:  при этом управление транзакциями отделено от бизнес-кода. Для управления транзакциями используются только аннотации или конфигурации на основе XML.

Hibernate — вопросы на собеседовании по Java для опытных профессионалов

1. Что такое Hibernate Framework?

Объектно-реляционное сопоставление или ORM — это метод программирования для сопоставления объектов модели домена приложения с таблицами реляционной базы данных. Hibernate — это инструмент ORM на основе Java, который обеспечивает основу для сопоставления объектов домена приложения с таблицами реляционной базы данных и наоборот.

Hibernate предоставляет эталонную реализацию Java Persistence API, что делает его отличным выбором в качестве инструмента ORM с преимуществами слабой связи. Мы можем использовать API сохраняемости Hibernate для операций CRUD. Платформа Hibernate предоставляет возможность сопоставления простых старых объектов Java с традиционными таблицами базы данных с использованием аннотаций JPA, а также конфигурации на основе XML.

Точно так же конфигурации спящего режима являются гибкими и могут быть выполнены из файла конфигурации XML, а также программно.

2. Каковы важные преимущества использования Hibernate Framework?

Некоторые из важных преимуществ использования Hibernate Framework:

  1. Hibernate устраняет весь шаблонный код, поставляемый с JDBC, и заботится об управлении ресурсами, поэтому мы можем сосредоточиться на бизнес-логике.
  2. Платформа Hibernate обеспечивает поддержку XML, а также аннотаций JPA, что делает нашу реализацию кода независимой.
  3. Hibernate предоставляет мощный язык запросов (HQL), похожий на SQL. Однако HQL полностью объектно-ориентирован и понимает такие понятия, как наследование, полиморфизм и ассоциация.
  4. Hibernate — это проект с открытым исходным кодом сообщества Red Hat, используемый во всем мире. Это делает его лучшим выбором, чем другие, потому что кривая обучения невелика, существует множество онлайн-документации, а помощь легко доступна на форумах.
  5. Hibernate легко интегрируется с другими платформами Java EE. Он настолько популярен, что Spring Framework предоставляет встроенную поддержку для интеграции hibernate с приложениями Spring.
  6. Hibernate поддерживает ленивую инициализацию с использованием прокси-объектов и выполняет фактические запросы к базе данных только тогда, когда это необходимо.
  7. Кэш Hibernate помогает нам повысить производительность.
  8. Для конкретной функции поставщика базы данных спящий режим подходит, потому что мы также можем выполнять собственные запросы sql.

В целом спящий режим — лучший выбор на текущем рынке для инструмента ORM, он содержит все функции, которые вам когда-либо понадобятся в инструменте ORM.

3. Объясните архитектуру Hibernate.

Hibernate имеет многоуровневую архитектуру, которая помогает пользователю работать без знания базовых API. Hibernate использует базу данных и данные конфигурации для предоставления приложению служб сохранения (и постоянных объектов). Он включает в себя множество объектов, таких как постоянный объект, фабрика сеансов, фабрика транзакций, фабрика соединений, сеанс, транзакция и т. д.HibernateArchitecture — Вопросы на собеседовании по Java — Edureka

Архитектура Hibernate разделена на четыре уровня.

  • Уровень приложения Java
  • Слой каркаса гибернации
  • Уровень API обратной связи
  • Уровень базы данных

4. В чем разница между методами get и load?

Различия между методами get() и load() приведены ниже.

Нет.получить()нагрузка()
 1) Возвращает null, если объект не найден.Выдает исключение ObjectNotFoundException, если объект не найден.
 2) Метод get() всегда попадает в базу данных. Метод load() не обращается к базе данных.
 3) Он возвращает реальный объект, а не прокси. Он возвращает прокси-объект.
 4)Его следует использовать, если вы не уверены в существовании экземпляра.Его следует использовать, если вы уверены, что экземпляр существует.

5. Каковы преимущества Hibernate перед JDBC?

Некоторые из важных преимуществ Hibernate framework по сравнению с JDBC:

  1. Hibernate удаляет много шаблонного кода, который поставляется с JDBC API, код выглядит чище и читабельнее.
  2. Hibernate поддерживает наследование, ассоциации и коллекции. Эти функции отсутствуют в JDBC API.
  3. Hibernate неявно обеспечивает управление транзакциями, фактически большинство запросов не могут выполняться вне транзакции. В JDBC API нам нужно написать код для управления транзакциями с использованием фиксации и отката.
  4. JDBC API генерирует SQLException, которое является проверенным исключением, поэтому нам нужно написать много кода блока try-catch. В большинстве случаев он избыточен в каждом вызове JDBC и используется для управления транзакциями. Hibernate оборачивает исключения JDBC и генерирует непроверенное исключение JDBCException или HibernateException, поэтому нам не нужно писать код для его обработки. Встроенное управление транзакциями Hibernate устраняет использование блоков try-catch.
  5. Hibernate Query Language (HQL) более объектно-ориентирован и близок к языку программирования Java. Для JDBC нам нужно написать собственные SQL-запросы.
  6. Hibernate поддерживает кэширование, которое лучше для производительности, запросы JDBC не кэшируются, поэтому производительность низкая.
  7. Hibernate предоставляет опцию, с помощью которой мы также можем создавать таблицы базы данных, поскольку таблицы JDBC должны существовать в базе данных.
  8. Конфигурация Hibernate помогает нам использовать JDBC-подобное соединение, а также JNDI DataSource для пула соединений. Это очень важная функция корпоративного приложения, полностью отсутствующая в JDBC API.
  9. Hibernate поддерживает аннотации JPA, поэтому код не зависит от реализации и легко заменяется другими инструментами ORM. Код JDBC очень тесно связан с приложением.

JSP — вопросы на собеседовании по Java

1. Каковы методы жизненного цикла jsp?

МетодыОписание
 общественная пустота jspInit()Он вызывается только один раз, как и метод инициализации сервлета.
public void _jspService (запрос ServletRequest, ServletResponse) выдает ServletException, IOExceptionОн вызывается при каждом запросе, так же как и метод service() сервлета.
 публичная пустота jspDestroy()Он вызывается только один раз, как и метод destroy() сервлета.

2. Что такое неявные объекты JSP?

JSP по умолчанию предоставляет 9 неявных объектов. Они следующие:

ОбъектТип
1) вне JspWriter
2) просьба HttpServletRequest
3) ответ HttpServletResponse
4) конфиг Конфигурация сервлетов
5) сессия HttpSession
6) приложение Контекст сервлета
7) Контекст страницы Контекст страницы
8) страница Объект
9) исключение Метательный

3. В чем разница между директивой include и действием include?

включить директивувключить действие
Директива include включает содержимое во время перевода страницы.Действие включения включает содержимое во время запроса.
Директива include включает исходное содержимое страницы, поэтому размер страницы увеличивается во время выполнения.Действие включения не включает исходное содержимое, а вызывает метод include() класса, предоставленного поставщиком.
 Это лучше для статических страниц. Это лучше для динамических страниц.

4. Как отключить кэширование кнопки «Назад» в браузере?

<%
response.setHeader(“Cache-Control”,”no-store”);
response.setHeader(“Pragma”,”no-cache”);
response.setHeader (“Expires”, “0”);                    //prevents caching at the proxy server
%>  

5. Какие различные теги предусмотрены в JSTL?

Существует 5 типов тегов JSTL.

  1. основные теги
  2. SQL-теги
  3. XML-теги
  4. теги интернационализации
  5. теги функций

6. Как отключить сеанс в JSP?

<%@ page session=“false” %>   

7. Как удалить куки в JSP?

Следующий код объясняет, как удалить Cookie в JSP:

Cookie mycook = new Cookie("name1","value1");
 
response.addCookie(mycook1);
 
Cookie killmycook = new Cookie("mycook1","value1");
 
killmycook . set MaxAge ( 0 );
 
killmycook . set Path ("/");
 
killmycook . addCookie ( killmycook 1 );

8. Объясните метод jspDestroy().

Метод jspDestry() вызывается из интерфейса javax.servlet.jsp.JspPage всякий раз, когда страница JSP собирается быть уничтоженной. Методы уничтожения сервлетов можно легко переопределить для выполнения очистки, например, при закрытии соединения с базой данных.

9. Чем JSP лучше технологии Servlet?

JSP — это технология на стороне сервера, упрощающая создание контента. Они ориентированы на документы, тогда как сервлеты — это программы. Страница Java-сервера может содержать фрагменты программы Java, которые выполняют и создают экземпляры классов Java. Однако они встречаются внутри файла шаблона HTML. Он обеспечивает основу для разработки веб-приложения.

10. Почему нам не следует настраивать стандартные теги JSP в web.xml?

 

Нам не нужно настраивать стандартные теги JSP в web.xml, потому что когда контейнер загружает веб-приложение и находит файлы TLD, он автоматически настраивает их для использования непосредственно на страницах JSP приложения. Нам просто нужно включить его на страницу JSP с помощью директивы taglib.

11. Как вы будете использовать JSP EL для получения имени метода HTTP?

Используя неявный объект pageContext JSP EL, вы можете получить ссылку на объект запроса и использовать оператор точки для получения имени метода HTTP на странице JSP. Код JSP EL для этой цели будет выглядеть как ${pageContext.request.method}.


Exception and Thread Java Interview Вопросы

Q1. В чем разница между ошибкой и исключением?

Ошибка — это неустранимое состояние, возникающее во время выполнения. Например, ошибка OutOfMemory. Эти ошибки JVM нельзя исправить во время выполнения. Хотя ошибка может быть обнаружена в блоке catch, выполнение приложения будет остановлено и не будет восстановлено.

В то время как исключения - это условия, которые возникают из-за неправильного ввода или человеческой ошибки и т. д. Например, FileNotFoundException будет сгенерировано, если указанный файл не существует. Или NullPointerException произойдет, если вы попытаетесь использовать нулевую ссылку. В большинстве случаев можно восстановиться после исключения (вероятно, предоставив пользователю обратную связь для ввода правильных значений и т. д.

Q2. Как вы можете обрабатывать исключения Java?

Для обработки исключений в Java используются пять ключевых слов: 

  1. пытаться
  2. ловить
  3. в конце концов
  4. бросать
  5. бросает

Q3. В чем разница между Checked Exception и Unchecked Exception?

проверенное исключение

  • Классы, расширяющие класс Throwable, за исключением RuntimeException и Error, называются проверенными исключениями.
  • Проверенные исключения проверяются во время компиляции.
  • Пример: IOException, SQLException и т. д.

Непроверенное исключение

  • Классы, расширяющие RuntimeException, называются непроверенными исключениями.
  • Непроверенные исключения не проверяются во время компиляции.
  • Пример: ArithmeticException, NullPointerException и т. д.

Q4. Каковы различные способы использования потоков?

Существует два способа создания потока:

  • Расширение класса Thread

Это создает поток, создавая экземпляр нового класса, который расширяет класс Thread. Расширяющий класс должен переопределить функцию run(), которая является точкой входа потока.

  • Реализация интерфейса Runnable

Это самый простой способ создать поток, создав класс, реализующий исполняемый интерфейс. После реализации интерфейса runnable класс должен реализовать метод public void run()().

Метод run() создает параллельный поток в вашей программе. Когда run() вернется, поток завершится.

Метод run() создает параллельный поток в вашей программе. Когда run() вернется, поток завершится.

В методе run() вы должны указать код потока.

Как и любой другой метод, метод run() может вызывать другие методы, использовать другие классы и определять переменные.

Java работает как феномен «передачи по значению» или «передачи по ссылке»?

Java всегда передается по значению. Это означает, что он создает копию содержимого параметра в памяти. В Java объектные переменные всегда относятся к реальному объекту кучи памяти.

Q5. Будет ли выполняться блок finally, если оператор return будет записан в конце блока try и блока catch, как показано ниже?

Блок finally всегда выполняется, даже если оператор return написан в конце блока try и блока catch. Он всегда выполняется, независимо от того, есть исключение или нет. Есть только несколько ситуаций, в которых блок finally не выполняется, например, сбой виртуальной машины, сбой питания, сбой программного обеспечения и т. д. Если вы не хотите выполнять блок finally, вам нужно вызвать System.exit(). явно в блоке finally.

 

Q6. Как исключение распространяется в коде?

Если исключение не перехвачено, оно выбрасывается с вершины стека и падает вниз по стеку вызовов к предыдущей процедуре. Если исключение там не перехвачено, оно возвращается к предыдущей функции и так далее, пока оно не будет перехвачено или стек вызовов не достигнет дна. Термин для этого — распространение исключений.

 

Q7. Можете ли вы объяснить жизненный цикл потока Java?

Жизненный цикл потока Java имеет следующие состояния:

Новый-

Когда поток создан и до того, как программа запустит поток, он находится в новом состоянии. Его также называют родившейся нитью.

 Запускаемый

Когда поток запущен, он находится в состоянии Runnable. В этом состоянии поток выполняет свою задачу.

Ожидающий

Иногда поток переходит в состояние ожидания, где он остается бездействующим, потому что выполняется другой поток. Когда другой поток завершается, ожидающий поток снова переходит в состояние выполнения.

Ожидание по времени

В режиме ожидания поток переходит в состояние ожидания. Но он остается в состоянии ожидания только в течение определенного интервала времени, после которого он начинает выполняться. Он остается в ожидании либо до окончания временного интервала, либо до завершения другого потока.

Прекращено

Говорят, что поток находится в этом состоянии после завершения. Это может быть связано с тем, что поток завершил свою задачу или по любой другой причине.

Q8. Какую цель выполняют ключевые слова final, finally и finalize? 

Финал:

Final используется для применения ограничений к классу, методу и переменной. Конечный класс не может быть унаследован, конечный метод не может быть переопределен и конечное значение переменной не может быть изменено. Давайте посмотрим на пример ниже, чтобы понять его лучше.

class FinalVarExample {
public static void main( String args[])
{
final int a=10;   // Final variable
a=50;             //Error as value can't be changed
}

Окончательно

Наконец используется для размещения важного кода, он будет выполняться независимо от того, обработано ли исключение или нет. Давайте посмотрим на пример ниже, чтобы понять его лучше.

class FinallyExample {
public static void main(String args[]){
try {
int x=100;
}
catch(Exception e) {
System.out.println(e);
}
finally {
System.out.println("finally block is executing");}
}}
}

Завершить

Finalize используется для выполнения очистки непосредственно перед сборкой мусора. Давайте посмотрим на пример ниже, чтобы понять его лучше.

class FinalizeExample {
public void finalize() {
System.out.println("Finalize is called");
}
public static void main(String args[])
{
FinalizeExample f1=new FinalizeExample();
FinalizeExample f2=new FinalizeExample();
f1= NULL;
f2=NULL;
System.gc();
}
}

Q9. В чем разница между броском и броском? 

бросить ключевое словобросает ключевое слово
Throw используется для явного создания исключения.Броски используются для объявления исключения.
Проверенные исключения не могут распространяться только с помощью throw.Проверенные исключения могут распространяться с помощью бросков.
За броском следует экземпляр.За бросками следует класс.
Throw используется внутри метода.Throws используется с сигнатурой метода.
Вы не можете генерировать несколько исключенийВы можете объявить несколько исключений, например, public void method() выдает IOException, SQLException.

Если вы столкнулись с какими-либо проблемами с этими вопросами собеседования по Java, прокомментируйте свои проблемы в разделе ниже.

Q10. Что такое иерархия исключений в Java?

Иерархия выглядит следующим образом:

Throwable является родительским классом для всех классов Exception. Существует два типа исключений: Checked исключения и UncheckedExceptions или RunTimeExceptions. Оба типа исключений расширяют класс исключений, тогда как ошибки далее классифицируются как ошибка виртуальной машины и ошибка утверждения.

ExceptionHierarchy — Вопросы для собеседования по Java — Edureka

Q11. Как создать пользовательское исключение?

Чтобы создать собственное исключение, расширьте класс Exception или любой из его подклассов.

  • class New1Exception extends Exception { } // это создаст Checked Exception
  • class NewException extends IOException { } // это создаст исключение Checked
  • class NewException extends NullPonterExcpetion { } // это создаст исключение UnChecked

Q12. Каковы важные методы класса Java Exception?

Exception и все его подклассы не предоставляют никаких конкретных методов, и все методы определены в базовом классе Throwable.

  1. String getMessage () — этот метод возвращает строку сообщения Throwable, и сообщение может быть предоставлено при создании исключения через его конструктор.
  2. String getLocalizedMessage( ) — этот метод предоставляется для того, чтобы подклассы могли переопределить его, чтобы предоставить вызывающей программе сообщение, зависящее от локали. Реализация класса Throwable этого метода просто использует метод getMessage() для возврата сообщения об исключении.
  3. Synchronized Throwable getCause() — этот метод возвращает причину исключения или нулевой идентификатор, причина которого неизвестна.
  4. String toString() — этот метод возвращает информацию о Throwable в формате String, возвращаемая строка содержит имя класса Throwable и локализованное сообщение.
  5. void printStackTrace() — этот метод печатает информацию о трассировке стека в стандартный поток ошибок, этот метод перегружен, и мы можем передать PrintStream или PrintWriter в качестве аргумента для записи информации о трассировке стека в файл или поток.

Q13. В чем разница между процессами и потоками?

 ПроцессНить
ОпределениеВыполняемый экземпляр программы называется процессом.Поток — это подмножество процесса.
КоммуникацияПроцессы должны использовать межпроцессное взаимодействие для связи с одноуровневыми процессами.Потоки могут напрямую взаимодействовать с другими потоками своего процесса.
КонтрольПроцессы могут осуществлять контроль только над дочерними процессами.Потоки могут осуществлять значительный контроль над потоками одного и того же процесса.
ИзмененияЛюбые изменения в родительском процессе не влияют на дочерние процессы.Любое изменение в основном потоке может повлиять на поведение других потоков процесса.
объем памятиЗапуск в отдельных областях памяти.Запуск в разделяемых пространствах памяти.
КонтролируетсяПроцесс контролируется операционной системой.Потоки управляются программистом в программе.
ЗависимостьПроцессы независимы.Потоки зависимы.

Q14. Что такое блок finally? Есть ли случай, когда ваще не исполнится?

Блок finally — это блок, который всегда выполняет набор операторов. Он всегда связан с блоком try, независимо от того, возникло какое-либо исключение или нет. 
Да, finally не будет выполняться, если программа завершится либо вызовом System.exit(), либо вызвав фатальную ошибку, которая приведет к прерыванию процесса.

Q15. Что такое синхронизация?

Синхронизация относится к многопоточности. Синхронизированный блок кода может выполняться только одним потоком за раз. Поскольку Java поддерживает выполнение нескольких потоков, два или более потока могут обращаться к одним и тем же полям или объектам. Синхронизация — это процесс, который синхронизирует все параллельные выполняемые потоки. Синхронизация позволяет избежать ошибок согласованности памяти, вызванных несогласованным представлением общей памяти. Когда метод объявлен как синхронизированный, поток удерживает монитор для объекта этого метода. Если другой поток выполняет синхронизированный метод, поток блокируется до тех пор, пока этот поток не освободит монитор. 

Синхронизация — Вопросы на собеседовании по Java — Edureka

 Q16. Можем ли мы написать несколько блоков catch в одном блоке try? 

Да, у нас может быть несколько блоков catch в одном блоке try, но подход должен быть от конкретного к общему. Давайте разберемся с этим на программном примере.

public class Example {
public static void main(String args[]) {
try {
int a[]= new int[10];
a[10]= 10/0;
}
catch(ArithmeticException e)
{
System.out.println("Arithmetic exception in first catch block");
}
catch(ArrayIndexOutOfBoundsException e)
{
System.out.println("Array index out of bounds in second catch block");
}
catch(Exception e)
{
System.out.println("Any exception in third catch block");
}
}

Q17. Каковы важные методы класса Java Exception?

Методы определены в базовом классе Throwable. Некоторые из важных методов класса исключений Java указаны ниже. 

  1. String getMessage() — этот метод возвращает строку сообщения об исключении. Сообщение может быть предоставлено через его конструктор.
  2. public StackTraceElement[] getStackTrace() — этот метод возвращает массив, содержащий каждый элемент трассировки стека. Элемент с индексом 0 представляет вершину стека вызовов, тогда как последний элемент в массиве представляет метод в нижней части стека вызовов.

Synchronized Throwable getCause() — этот метод возвращает причину исключения или нулевой идентификатор, представленный объектом Throwable.

  1. String toString() — этот метод возвращает информацию в формате String. Возвращаемая строка содержит имя класса Throwable и локализованное сообщение.
  2. void printStackTrace() — этот метод печатает информацию о трассировке стека в стандартный поток ошибок.

Q18. Что такое OutOfMemoryError в Java?

OutOfMemoryError — это подкласс java.lang.Error, который обычно возникает, когда нашей JVM не хватает памяти.

Q19. Что такое нить?

Поток — это наименьшая часть запрограммированных инструкций, которая может выполняться планировщиком независимо. В Java все программы будут иметь по крайней мере один поток, известный как основной поток. Этот основной поток создается JVM, когда программа начинает свое выполнение. Основной поток используется для вызова функции main() программы.

Q20. Каковы два способа создания потока?

В Java потоки могут быть созданы двумя способами: 

  • Путем реализации интерфейса Runnable.
  • Расширяя поток

Q21. Какие существуют типы сборщиков мусора в Java?

Сборка мусора на Java — программа, которая помогает в неявном управлении памятью. Поскольку в Java с помощью нового ключевого слова вы можете динамически создавать объекты, которые после создания будут потреблять некоторую память. Как только работа выполнена и на объект больше не осталось ссылок, Java с помощью сборки мусора уничтожает объект и освобождает занимаемую им память. Java предоставляет четыре типа сборщиков мусора:

  • Серийный сборщик мусора
  • Параллельный сборщик мусора
  • Сборщик мусора CMS
  • Сборщик мусора G1

Если вы столкнулись с какими-либо проблемами с этими вопросами собеседования по Java , прокомментируйте свои проблемы в разделе ниже.

Оригинальный источник статьи на https://www.edureka.co