Заметки о программировании, путешествиях, плёнке и разных интересностях
Обо мне  •  Список заметок

Позднее Ctrl + ↑

Terrasoft → Epam

Сегодня был мой последний день в Террасофте. Проработал здесь 2,2 года (801 день). Это были забавные времена? было много позитивных вещей и часть негативных. Точно я могу сказать одно, я получил массу полезного опыта, новые знакомства, скиллы. А теперь пришло время идти дальше.

Вопросы на собеседованиях

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

Первыми хочу выделить 2 смелых вопроса:

Как бы вы описали идеального кандидата на эту должность?
Как вы будете судить, хорош ли я в том, что потребуется от меня через 1-3 месяца?

Первый вопрос прояснит, какого человека ищет компания и подходите ли вы под их требования. Интересно то, что отвечая на него, человек обычно описывает вас.
Во втором же случае, вы поймёте как в будущем будет происходить оценка вас как сотрудника.

Еще вопросы

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

Для тех. специалиста

Что можно улучшить в компании?
Как часто вы делаете релиз?
Насколько легко писать у вас тесты? И есть ли такая практика вообще?
Как у вас организована выкатка нового функционала?

Видео по теме
Почему вы хотите у нас работать? Вопросы на интервью.

 Нет комментариев    129   2 мес  

Удаления дубликатов строк

Недавно мне попалась интересная задачка по SQL.
У вас есть таблица с 2 колонками: Id, Name. Но на колонках нет никаких ограничений. И получилось так что там если дубли и нам надо их удалить.

Пример таблички

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

; WITH DuplicatesForDelete(Row) AS (
	SELECT ROW_NUMBER() OVER(PARTITION BY t1.Id, t1.Name ORDER BY Id, Name) AS Row 
	FROM TableWithDuplicates t1
)
DELETE FROM DuplicatesForDelete WHERE Row > 1

Статья о том что такое оконные функции (OVER) 

Крым на кинопленке Kodak Vision3 250D

В сентябре мне повезло вырваться на несколько дней в солнечный Крым. Очень хотелось поснимать контрастные пейзажи полуострова, и я решил поэкспериментировать с катушкой кинопленки Kodak Vision3 250D.

Проявку делал в лаборатории Фотофонд. Это одно из немногих, если не единственное место, где занимаются проявкой кинопленки в Киеве.

Изначально, я не надеялся получить хорошие фотки, ведь пленку проявляли по процессу С-41 (а не по родному процессу ECN-2).

Но результат меня порадовал! Первое, что удивило — приятная цветовая палитра и мягкий свет. Из минусов: на готовых сканах видны разводы — вероятно, из-за смывки сажи или неисправности проявочной машины, guess we’ll never know🤷🏻‍♂️. Вам решать — оставить эти случайные несовершенства, или убрать их в любом удобном редакторе. Свой выбор я сделал в пользу Фотошопа :)

С текстом помогала моя девушка :-)

Полезные SQL скрипты: запросы, которые страдают от блокировок

SELECT TOP 10
    [Average Time Blocked] = (total_elapsed_time - total_worker_time) / qs.execution_count,
    [Total Time Blocked] = total_elapsed_time - total_worker_time,
    [Execution count] = qs.execution_count,
    [Individual Query] = SUBSTRING (qt.text,qs.statement_start_offset/2,
        (CASE
        WHEN qs.statement_end_offset = -1 THEN LEN(CONVERT(NVARCHAR(MAX), qt.text)) * 2
        ELSE qs.statement_end_offset
        END - qs.statement_start_offset)/2),
    [Parent Query] = qt.text,
    [DatabaseName] = DB_NAME(qt.dbid)
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) as qt
ORDER BY [Average Time Blocked] DESC;
 Нет комментариев    377   2 мес   mssql   sql

Parallel, Asynchronous, Multithreading programming

Многопоточное программирование

Код может выполнятся в разных потоках. Например основной UI поток и набор потоков для обработки данных. В данном случае нет гарантии что потоки будут работать параллельно. Обычно это зависит от процессора. Потоки «абстрагируют» от пользователя низкоуровневые детали и позволяют выполнять более чем одну работу «параллельно».

Параллельное программирование

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

IEnumerable<Data> yourData = GetYourData();
var result = yourData.AsParallel() // начинаем обрабатывать параллельно
  .Select(d => d.CalcAmount()) // Вычисляем параллельно
  .Where(amount => amount > 0)
  .ToArray(); // Возврвщаемся к синхронной модели

Асинхронное программирование

Мы запускаем какую-то задачу, но не ждем ответа, а продолжаем делать свою работу. А когда будет готов ответ — нас уведомят. Обычно такие операции бывают при работе с сетью, диском или любыми другими продолжительными задачами.

Пример на C#.
У нас есть продолжительная асинхронная задача, которая обращается к БД. С помощью конструкций async/await мы организовываем асинхронную работу. Пока БД готовит для нас ответ, поток, который обслуживал этот метод возвращается в пулл потоков и может тем временем выполнять полезную работу. Как только БД отдаст ответ, нашему методу снова выделяется поток и продолжается работа.

var asyncResult = await Database.GetAllUsers(); // длительная асинхронная операция
var activeUsers = asyncResult.Where(user => user.IsActive).ToList(); // работаем с результатом асинхронной операции

Еще один забавный но наглядный пример

Вам нужно выкопать во дворе бассейн.

  1. Вы взяли лопату и копаете. Это однопоточная работа
  2. Вы пригласили друга Васю и копаете вместе, периодически задевая друг-друга лопатами. Это многопоточная работа
  3. Пока вы копаете бассейн, Вася копает канаву под водопровод. Никто никому не мешает. Это распараллеливание
  4. Вы пригласили бригаду землекопов, а сами с Васей пошли пить пиво. Когда бригада все сделает, к вам придут за деньгами. Это асинхронная работа.

Количество лопат в хозяйстве — это количество ядер в системе

Ссылки

Параллелизм против многопоточности против асинхронного программирования: разъяснение
Cтатья об async/await в C#
Многопоточное vs асинхронное программирование (stackoverflow) 

Получить информацию по индексу в таблице

DECLARE @TableName varchar(255) = 'LeadInFolder'
DECLARE @TableIndexName varchar(255) = 'Icy1fjQeGXuR5svQcM20sAenE8U'

SELECT * FROM sys.dm_db_index_physical_stats(DB_ID(), OBJECT_ID(@TableName), NULL, NULL, NULL) ips
INNER JOIN sys.indexes i ON (ips.object_id = i.object_id) AND (ips.index_id = i.index_id)
WHERE i.name = @TableIndexName
Ранее Ctrl + ↓