#web
HTTP — это протокол, позволяющий получать различные ресурсы, например HTML-документы.
Протокол HTTP лежит в основе обмена данными в Интернете. HTTP является протоколом клиент-серверного взаимодействия, что означает инициирование запросов к серверу самим получателем, обычно веб-браузером (web-browser).
Полученный итоговый документ будет (может) состоять из различных поддокументов являющихся частью итогового документа: например, из отдельно полученного текста, описания структуры документа, изображений, видео-файлов, скриптов и многого другого.
Каждый запрос (англ. request) отправляется серверу, который обрабатывает его и возвращает ответ (англ. response). Между этими запросами и ответами как правило существуют многочисленные посредники, называемые прокси, которые выполняют различные операции и работают как шлюзы или кэш, например.
HTTP — это протокол, позволяющий получать различные ресурсы, например HTML-документы.
Протокол HTTP лежит в основе обмена данными в Интернете. HTTP является протоколом клиент-серверного взаимодействия, что означает инициирование запросов к серверу самим получателем, обычно веб-браузером (web-browser).
Полученный итоговый документ будет (может) состоять из различных поддокументов являющихся частью итогового документа: например, из отдельно полученного текста, описания структуры документа, изображений, видео-файлов, скриптов и многого другого.
Каждый запрос (англ. request) отправляется серверу, который обрабатывает его и возвращает ответ (англ. response). Между этими запросами и ответами как правило существуют многочисленные посредники, называемые прокси, которые выполняют различные операции и работают как шлюзы или кэш, например.
Что гарантирует безопасность типов в коллекции?
Anonymous Quiz
67%
Generics
13%
Abstract classes
13%
Interfaces
8%
Collection
#python
Что лучше, import или from import?
Обратимся к первоисточникам, а именно-к PEP8. Когда импортируете класс из модуля, будет нормально сделать это так:
from myclass import MyClass
from foo.bar.yourclass import YourClass
Если это вызывает локальный конфликт Имен, то можно сделать это явно:
import myclass
import foo.bar.yourclass
Для того, чтобы понять, как надо импортировать каждую библиотеку нужно читать документацию к каждому модулю, ведь автор сам решает, какой import нужно использовать.
Flask импортируется:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!
Pytest импортируется:
import pytest
def test_zero_division():
with pytest.raises(ZeroDivisionError):
1 / 0
При написании тестов порой надо подменить какие-то методы. Вот тут с импортами из модуля начинается цирк. К моменту, когда накладывается патч, ссылка на объект уже имеется в тех местах, где он импортирован, и патчить нужно не место, где объект объявлен, а все места, где был сделан импорт. Несложно, но немного запарно, и есть шанс что-то поломать при рефакторинге.
Этот момент – достаточно частый источник недоумения.
Что лучше, import или from import?
Обратимся к первоисточникам, а именно-к PEP8. Когда импортируете класс из модуля, будет нормально сделать это так:
from myclass import MyClass
from foo.bar.yourclass import YourClass
Если это вызывает локальный конфликт Имен, то можно сделать это явно:
import myclass
import foo.bar.yourclass
Для того, чтобы понять, как надо импортировать каждую библиотеку нужно читать документацию к каждому модулю, ведь автор сам решает, какой import нужно использовать.
Flask импортируется:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!
Pytest импортируется:
import pytest
def test_zero_division():
with pytest.raises(ZeroDivisionError):
1 / 0
При написании тестов порой надо подменить какие-то методы. Вот тут с импортами из модуля начинается цирк. К моменту, когда накладывается патч, ссылка на объект уже имеется в тех местах, где он импортирован, и патчить нужно не место, где объект объявлен, а все места, где был сделан импорт. Несложно, но немного запарно, и есть шанс что-то поломать при рефакторинге.
Этот момент – достаточно частый источник недоумения.
Что позволяет удалять элементы из коллекции?
Anonymous Quiz
12%
Enumeration
10%
Serializable
44%
Iterator
34%
метод removeObj()
#definition
Reverse Engineering (ревёрсинг, обратная разработка) — это процесс «заимствования», восстановления исходников из конечного продукта инженерной и/или научной деятельности с интуитивным конструированием внутренней механики по принципу «а какие процессы должны вызвать такое внешнее поведение этого продукта?». Ориентируясь на нюх, так сказать. Иногда приводит к написанию собственного дока. Много их, ибо ваистену
Примером RE является создание базы данных из готовых сущностей в Spring.
Reverse Engineering (ревёрсинг, обратная разработка) — это процесс «заимствования», восстановления исходников из конечного продукта инженерной и/или научной деятельности с интуитивным конструированием внутренней механики по принципу «а какие процессы должны вызвать такое внешнее поведение этого продукта?». Ориентируясь на нюх, так сказать. Иногда приводит к написанию собственного дока. Много их, ибо ваистену
Примером RE является создание базы данных из готовых сущностей в Spring.
Что из этого синхронизировано и не допускает нулевых элементов?
Anonymous Quiz
33%
Vector
28%
CopyOnWriteArraySet
11%
CopyOnWriteArrayList
28%
ConcurrentSkipListSet
#web
HTTPS vs HTTP
HTTPS не является отдельным протоколом передачи данных, а представляет собой расширение протокола HTTP но со встроенным шифровальщиком. Добавочная буква «S» в аббревиатуре означает «Secure», то есть «безопасный».
HTTPS это закрытый протокол имеющий надстройку шифрования и использующий по умолчанию порт 433, тогда как HTTP – открытый протокол который использует порт 80
Данные передаваемые по протоколу HTTPS всегда больше по объёму чем те самые данные на HTTP поэтому их передача в обе стороны занимает чуть больше времени
HTTPS использует SSL-сертификаты для шифрования информации
Как это происходит?
Если на сайте есть SSL-сертификат, между браузером клиента и сайтом устанавливается защищённое соединение. В этом случае браузер сначала преобразует номер карты в случайный набор символов и только потом отправляет его на сервер.
Расшифровать сообщение получится только специальным ключом, который хранится на сервере.
HTTPS vs HTTP
HTTPS не является отдельным протоколом передачи данных, а представляет собой расширение протокола HTTP но со встроенным шифровальщиком. Добавочная буква «S» в аббревиатуре означает «Secure», то есть «безопасный».
HTTPS это закрытый протокол имеющий надстройку шифрования и использующий по умолчанию порт 433, тогда как HTTP – открытый протокол который использует порт 80
Данные передаваемые по протоколу HTTPS всегда больше по объёму чем те самые данные на HTTP поэтому их передача в обе стороны занимает чуть больше времени
HTTPS использует SSL-сертификаты для шифрования информации
Как это происходит?
Если на сайте есть SSL-сертификат, между браузером клиента и сайтом устанавливается защищённое соединение. В этом случае браузер сначала преобразует номер карты в случайный набор символов и только потом отправляет его на сервер.
Расшифровать сообщение получится только специальным ключом, который хранится на сервере.
что выведется на экран в результате выполнения программы?
Anonymous Quiz
2%
java
55%
JAVA
40%
Java
3%
jAVA
#interviewTasks
Раздобыли тестовое задание на Strong Junior Java Developer.
Если вам было бы интересно с ним ознакомиться, ждем от вас реакций.
Раздобыли тестовое задание на Strong Junior Java Developer.
Если вам было бы интересно с ним ознакомиться, ждем от вас реакций.
#java
Wildcards (Generics)
Знак вопроса (?) Известен как подстановочный знак в универсальном программировании. Представляет неизвестный тип.
Подстановочный знак можно использовать в различных ситуациях, таких как тип параметра, поля или локальной переменной; иногда как возвращаемый тип.
В отличие от массивов, разные экземпляры универсального типа несовместимы друг с другом даже явно. Эта несовместимость может быть смягчена подстановочным знаком, если ? используется как фактический параметр типа.
Wildcards (Generics)
Знак вопроса (?) Известен как подстановочный знак в универсальном программировании. Представляет неизвестный тип.
Подстановочный знак можно использовать в различных ситуациях, таких как тип параметра, поля или локальной переменной; иногда как возвращаемый тип.
В отличие от массивов, разные экземпляры универсального типа несовместимы друг с другом даже явно. Эта несовместимость может быть смягчена подстановочным знаком, если ? используется как фактический параметр типа.
#patterns
Одиночка (англ. Singleton) — порождающий шаблон проектирования, гарантирующий, что в однопоточном приложении будет единственный экземпляр некоторого класса, и предоставляющий глобальную точку доступа к этому экземпляру.
Одиночка (англ. Singleton) — порождающий шаблон проектирования, гарантирующий, что в однопоточном приложении будет единственный экземпляр некоторого класса, и предоставляющий глобальную точку доступа к этому экземпляру.
Что выведет этот код?
Anonymous Quiz
16%
JavaPython
21%
C++C++
9%
PythonJava
14%
JavaC++
37%
JavaJava
2%
PythonPython
#microsoft
Почему Microsoft перестали бороться с пиратством своего ПО?
Microsoft теряет миллиарды долларов из-за пиратства своих продуктов. Ранее CEO Microsoft принимали агрессивную политику в борьбе против пиратства. Microsoft даже проводила налеты в Мексике для арестов кортелей. О чем я точно еще напишу.
Все принятые политики по защите ПО Microsoft не обновлялись с 2010-го года. В 2013-м они запустили программу "play it safe". Сейчас, на официальном веб-сайте, вы ее не найдете. Осталась только фото-заглушка.
Почему же Microsoft перестали бороться с пиратством?
Защита SaaS стала куда сильнее, копии гораздо труднее подделывать. С развитием модели платных подписок многие продукты перешли на SaaS.
Все меньше людей ищет взломанное ПО. Это относится не только к Microsoft. Похожим образом действуют Adobe, которые позволяют пиратство своих продуктов. Именно благодаря пиратству Adobe и Microsoft стали лидерами рынка в своих сферах.
Неужели пиратство может заменить расходы на PR?
Почему Microsoft перестали бороться с пиратством своего ПО?
Microsoft теряет миллиарды долларов из-за пиратства своих продуктов. Ранее CEO Microsoft принимали агрессивную политику в борьбе против пиратства. Microsoft даже проводила налеты в Мексике для арестов кортелей. О чем я точно еще напишу.
Все принятые политики по защите ПО Microsoft не обновлялись с 2010-го года. В 2013-м они запустили программу "play it safe". Сейчас, на официальном веб-сайте, вы ее не найдете. Осталась только фото-заглушка.
Почему же Microsoft перестали бороться с пиратством?
Защита SaaS стала куда сильнее, копии гораздо труднее подделывать. С развитием модели платных подписок многие продукты перешли на SaaS.
Все меньше людей ищет взломанное ПО. Это относится не только к Microsoft. Похожим образом действуют Adobe, которые позволяют пиратство своих продуктов. Именно благодаря пиратству Adobe и Microsoft стали лидерами рынка в своих сферах.
Неужели пиратство может заменить расходы на PR?
Как вы можете отсортировать HashMap на основе значений?
Anonymous Quiz
18%
Имплементировать интерфейс Comparator и переопределить его метод сравнения
35%
Это невозможно
38%
Имплементировать интерфейс Comparator и переопределить его метод compareTo
10%
Имплементировать Comparator и Comparable интерфейс
#java
Что такое поток демона в Java?
Демон-поток - это поток, который не предотвращает выход JVM, когда программа заканчивается, но поток все еще работает. Примером для потока демона является сбор мусора.
Вы можете использовать метод setDaemon(boolean) для изменения свойств демона Thread до начала потока.
Когда создается новый поток, он наследует статус демона своего родителя.
Когда все потоки, не являющиеся демонами, заканчивают работу, JVM останавливается, а все оставшиеся потоки демонов удаляются: наконец блоки не выполняются, стеки не разматываются - JVM просто выходит.
По этой причине потоки демонов следует использовать с осторожностью, и их опасно использовать для задач, которые могут выполнять любые операции ввода-вывода.
Что такое поток демона в Java?
Демон-поток - это поток, который не предотвращает выход JVM, когда программа заканчивается, но поток все еще работает. Примером для потока демона является сбор мусора.
Вы можете использовать метод setDaemon(boolean) для изменения свойств демона Thread до начала потока.
Когда создается новый поток, он наследует статус демона своего родителя.
Когда все потоки, не являющиеся демонами, заканчивают работу, JVM останавливается, а все оставшиеся потоки демонов удаляются: наконец блоки не выполняются, стеки не разматываются - JVM просто выходит.
По этой причине потоки демонов следует использовать с осторожностью, и их опасно использовать для задач, которые могут выполнять любые операции ввода-вывода.
Корректно ли такое выражение?
List<Number> nums = new ArrayList<Integer>();
List<Number> nums = new ArrayList<Integer>();
Anonymous Quiz
38%
Да
42%
Нет, будет ошибка компиляции
12%
Нет, будет ошибка во время выполнения
8%
Да, но выбросится Exception
#java
Интерфейсы
Интерфейс — это ссылочный тип в Java. Он схож с классом. Это совокупность абстрактных методов. Класс реализует интерфейс, таким образом наследуя абстрактные методы интерфейса.
Чем отличается класс от интерфейса?
- Вы не можете создать экземпляр интерфейса.
- В интерфейсе не содержатся конструкторы.
- Все методы в интерфейсе абстрактные.
- Интерфейс не может содержать поля экземпляров. Поля, которые могут появиться в интерфейсе, обязаны быть объявлены и статическими, и final.
- Интерфейс не расширяется классом, он реализуется классом.
- Интерфейс может расширить множество интерфейсов.
_____________________
Решение: Убрать метод fly() у класса Bird, и вынести его в интерфейс "toBeAbleToFly". В нем, мы создаем тот самый метод fly(), который уже реализует тот класс, которому нужен этот метод. В нашем случае, это будет Parrot. Курице он нужен, по этому реализовывать этот метод, она не будет.
То есть, мы вынесли конкретный функционал, который нужен специфичной сущности.
// Позже будет выложен еще один пример использования интерфейсов
Интерфейсы
Интерфейс — это ссылочный тип в Java. Он схож с классом. Это совокупность абстрактных методов. Класс реализует интерфейс, таким образом наследуя абстрактные методы интерфейса.
Чем отличается класс от интерфейса?
- Вы не можете создать экземпляр интерфейса.
- В интерфейсе не содержатся конструкторы.
- Все методы в интерфейсе абстрактные.
- Интерфейс не может содержать поля экземпляров. Поля, которые могут появиться в интерфейсе, обязаны быть объявлены и статическими, и final.
- Интерфейс не расширяется классом, он реализуется классом.
- Интерфейс может расширить множество интерфейсов.
_____________________
Пример:
Ниже приведена иерархия классов. Класс Bird имеет метод fly(), но курица унаследовавшая метод, не должна его иметь, что делать в таком случае?Решение: Убрать метод fly() у класса Bird, и вынести его в интерфейс "toBeAbleToFly". В нем, мы создаем тот самый метод fly(), который уже реализует тот класс, которому нужен этот метод. В нашем случае, это будет Parrot. Курице он нужен, по этому реализовывать этот метод, она не будет.
То есть, мы вынесли конкретный функционал, который нужен специфичной сущности.
// Позже будет выложен еще один пример использования интерфейсов
Какое из следующих утверждений верно относительно класса Java?
Anonymous Quiz
53%
Класс Java должен иметь имя, указанное в исходном коде.
19%
Класс Java может иметь несколько локал. перем. с одинаковыми именами внутри одного и того же метода.
13%
Класс Java - это глобальный метод
15%
Знак подчеркивания («_») - это допустимое имя класса Java.
#backEnd
Кто этот ваш Postman?
Postman – удобный инструмент, который умеет описывать и исполнять запросы, получать информацию об их статусах, выстраивать цепочки запросов, зацикливать их, создавать сценарии. Главный плюс – код писать при этом практически не нужно.
Итак, вы определились со сценариями, которые хотите мониторить, и подготовили список запросов, которые соответствуют действиям пользователя. В Postman сценарии собираются из этих запросов, как из конструктора. Помимо запросов, такими кирпичиками являются коллекции и окружения.
Окружения содержат значения переменных, с которыми мы работаем в рамках сценариев – адреса серверов, имена папок и т.д. Фактически одно окружение – это один продукт.
Коллекция описывает, что с этими переменными делать. Это набор запросов, и в нашем случае одна коллекция – это один сценарий мониторинга. Одну коллекцию можно использовать в разных окружениях, подставляя нужные переменные. Не нужно для каждой системы писать новый сценарий авторизации – можно одним кликом вызвать уже готовую коллекцию.
Надо тестить API - Postman
Кто этот ваш Postman?
Postman – удобный инструмент, который умеет описывать и исполнять запросы, получать информацию об их статусах, выстраивать цепочки запросов, зацикливать их, создавать сценарии. Главный плюс – код писать при этом практически не нужно.
Итак, вы определились со сценариями, которые хотите мониторить, и подготовили список запросов, которые соответствуют действиям пользователя. В Postman сценарии собираются из этих запросов, как из конструктора. Помимо запросов, такими кирпичиками являются коллекции и окружения.
Окружения содержат значения переменных, с которыми мы работаем в рамках сценариев – адреса серверов, имена папок и т.д. Фактически одно окружение – это один продукт.
Коллекция описывает, что с этими переменными делать. Это набор запросов, и в нашем случае одна коллекция – это один сценарий мониторинга. Одну коллекцию можно использовать в разных окружениях, подставляя нужные переменные. Не нужно для каждой системы писать новый сценарий авторизации – можно одним кликом вызвать уже готовую коллекцию.
Надо тестить API - Postman