Задать вопрос
  • Как не превратиться в мамонта?

    saboteur_kiev
    @saboteur_kiev Куратор тега C++
    software engineer
    1. Видимо тем, кто собеседует, нечего делать или они слишком зеленые чтобы понимать смысл управления проектом. На собеседовании нужно спрашивать не все нюансы языков/фреймворков а то, что реально требуется в проекте, и умение разбираться с новым в пределах проекта. При собеседовании практически всегда можно завалить при желании, но нужно ли это делать неясно.

    2. Окей, а если не на собеседовании вам поставят задачу - вы разберетесь или будете волноваться что наизусть не знаете?

    3. Самоорганизация и умение работать зачастую важнее, чем специализированные знания, ибо все в мире ИТ и бизнеса к этому ведет - упрощение языков программирования, автоматизация, все эти скрамы - все это ведет к уменьшению человеческой ошибки и возможности замены программиста.
    Ответ написан
    1 комментарий
  • Реальная заработная плата frontend/backend разработчика в Москве?

    @Oligophren
    Сертифицированный разработчик Terrasoft BPM'online
    Информация правдива на 100%. С московскими ценами на жильё и услуги это не такая уж и большая зп.
    Ответ написан
    Комментировать
  • Как синхронизировать свой DNS с 8.8.8.8?

    sashkets
    @sashkets
    Прекратил отвечать после 24.02.2022
    Без использования очень старых решений, которые сейчас есть.

    Хм. Какие решения Вы называете старыми?

    добавить свой сервер в доверенные

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

    Vlad_IT
    @Vlad_IT
    Front-end разработчик
    Сначала ответьте на такой вопрос. Вы бы были готовы, после работы, отдавать свое время на чужую идею, без каких-либо гарантий, что она взлетит, а тем более, даст какой-то доход? Я бы лучше на opensource время потратил, пользы бы было больше.
    Ответ написан
    6 комментариев
  • Где найти команду для разработки?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Нигде.
    Никогда.
    Деда Мороза и Зубной феи тоже не существует. Это мама тебе покупает подарки под ёлку и за выпавший зуб.
    Ответ написан
    Комментировать
  • Почему в решениях с одинаковой сложностью существенная разница во времени расчета?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему в решениях с одинаковой сложностью существенная разница во времени расчета?

    Я отвечу на вопрос из заголовка: потому что сложность алгоритма говорит о том, как он будет вести себя при неограниченном увеличении размерностей входных данных. И больше ни о чём. Т.е. нельзя имея два линейных алгоритма сказать, что они будут работать одинаковое время. Но можно имея линейный и квадратичный алгоритм сказать, что начиная с какого-то момента линейный всегда будет работать быстрее.
    Ответ написан
    2 комментария
  • Можно ли так описать хэш-таблицу?

    @deliro
    1. ХТ пуста от 2/3 своего размера до 1/3. 1/3 - это уже она вот-вот реаллоцируется.
    2. Про циклы - фигня. В питоне нет ни одного способа добавить элементы кучей так, чтобы на самом деле они добавились не в цикле на уровне Си. Даже dict comprehensions добавляют элементы последовательно.
    3. Хэш от ключа - это встроенная функция hash(). Для конкретной ХТ берется остаток от деления хэша на размер ХТ. На самом деле, берётся хэш по битовой маске (размер_ХТ - 1) [Например hash(obj) & 2**16 - 1]. Но для степеней двойки эти операции равноценны.
    4. Ты совсем забыл момент с разрешением коллизий (это когда хэши двух разных ключей совпадают). В питоновых словарях это самый интересный момент. И именно из-за него удаленные данные из словаря не удаляются физически до следующей реаллокации.
    5. "Очень быстро" - это как?

    UPD.

    На текущий момент реализация словаря в питоне поменялась. В 3.6 версии сделали все словари по умолчанию ordered и заодно уменьшили размер словаря в байтах на 20-25%. Вот реализация актуальных словарей на питоне (в оригинале, она, конечно на Си):

    Раскрыть
    import array
    import collections
    import itertools
    
    # Placeholder constants
    FREE = -1
    DUMMY = -2
    
    
    class Dict(collections.MutableMapping):
        "Space efficient dictionary with fast iteration and cheap resizes."
    
        @staticmethod
        def _gen_probes(hashvalue, mask):
            "Same sequence of probes used in the current dictionary design"
            PERTURB_SHIFT = 5
            if hashvalue < 0:
                hashvalue = -hashvalue
            i = hashvalue & mask
            yield i
            perturb = hashvalue
            while True:
                i = (5 * i + perturb + 1) & 0xFFFFFFFFFFFFFFFF
                yield i & mask
                perturb >>= PERTURB_SHIFT
    
        def _lookup(self, key, hashvalue):
            "Same lookup logic as currently used in real dicts"
            assert self.filled < len(self.indices)  # At least one open slot
            freeslot = None
            for i in self._gen_probes(hashvalue, len(self.indices) - 1):
                index = self.indices[i]
                if index == FREE:
                    return (FREE, i) if freeslot is None else (DUMMY, freeslot)
                elif index == DUMMY:
                    if freeslot is None:
                        freeslot = i
                elif (
                    self.keylist[index] is key
                    or self.hashlist[index] == hashvalue
                    and self.keylist[index] == key
                ):
                    return (index, i)
    
        @staticmethod
        def _make_index(n):
            "New sequence of indices using the smallest possible datatype"
            if n <= 2 ** 7:
                return array.array("b", [FREE]) * n  # signed char
            if n <= 2 ** 15:
                return array.array("h", [FREE]) * n  # signed short
            if n <= 2 ** 31:
                return array.array("l", [FREE]) * n  # signed long
            return [FREE] * n  # python integers
    
        def _resize(self, n):
            """Reindex the existing hash/key/value entries.
               Entries do not get moved, they only get new indices.
               No calls are made to hash() or __eq__().
    
            """
            n = 2 ** n.bit_length()  # round-up to power-of-two
            self.indices = self._make_index(n)
            for index, hashvalue in enumerate(self.hashlist):
                for i in Dict._gen_probes(hashvalue, n - 1):
                    if self.indices[i] == FREE:
                        break
                self.indices[i] = index
            self.filled = self.used
    
        def clear(self):
            self.indices = self._make_index(8)
            self.hashlist = []
            self.keylist = []
            self.valuelist = []
            self.used = 0
            self.filled = 0  # used + dummies
    
        def __getitem__(self, key):
            hashvalue = hash(key)
            index, i = self._lookup(key, hashvalue)
            if index < 0:
                raise KeyError(key)
            return self.valuelist[index]
    
        def __setitem__(self, key, value):
            hashvalue = hash(key)
            index, i = self._lookup(key, hashvalue)
            if index < 0:
                self.indices[i] = self.used
                self.hashlist.append(hashvalue)
                self.keylist.append(key)
                self.valuelist.append(value)
                self.used += 1
                if index == FREE:
                    self.filled += 1
                    if self.filled * 3 > len(self.indices) * 2:
                        self._resize(4 * len(self))
            else:
                self.valuelist[index] = value
    
        def __delitem__(self, key):
            hashvalue = hash(key)
            index, i = self._lookup(key, hashvalue)
            if index < 0:
                raise KeyError(key)
            self.indices[i] = DUMMY
            self.used -= 1
            # If needed, swap with the lastmost entry to avoid leaving a "hole"
            if index != self.used:
                lasthash = self.hashlist[-1]
                lastkey = self.keylist[-1]
                lastvalue = self.valuelist[-1]
                lastindex, j = self._lookup(lastkey, lasthash)
                assert lastindex >= 0 and i != j
                self.indices[j] = index
                self.hashlist[index] = lasthash
                self.keylist[index] = lastkey
                self.valuelist[index] = lastvalue
            # Remove the lastmost entry
            self.hashlist.pop()
            self.keylist.pop()
            self.valuelist.pop()
    
        def __init__(self, *args, **kwds):
            if not hasattr(self, "keylist"):
                self.clear()
            self.update(*args, **kwds)
    
        def __len__(self):
            return self.used
    
        def __iter__(self):
            return iter(self.keylist)
    
        def iterkeys(self):
            return iter(self.keylist)
    
        def keys(self):
            return list(self.keylist)
    
        def itervalues(self):
            return iter(self.valuelist)
    
        def values(self):
            return list(self.valuelist)
    
        def iteritems(self):
            return itertools.izip(self.keylist, self.valuelist)
    
        def items(self):
            return zip(self.keylist, self.valuelist)
    
        def __contains__(self, key):
            index, i = self._lookup(key, hash(key))
            return index >= 0
    
        def get(self, key, default=None):
            index, i = self._lookup(key, hash(key))
            return self.valuelist[index] if index >= 0 else default
    
        def popitem(self):
            if not self.keylist:
                raise KeyError("popitem(): dictionary is empty")
            key = self.keylist[-1]
            value = self.valuelist[-1]
            del self[key]
            return key, value
    
        def __repr__(self):
            return "Dict(%r)" % self.items()
    
        def show_structure(self):
            "Diagnostic method.  Not part of the API."
            print("=" * 50)
            print(self)
            print("Indices:", self.indices)
            for i, row in enumerate(zip(self.hashlist, self.keylist, self.valuelist)):
                print(i, row)
            print("-" * 50)
    
    
    if __name__ == "__main__":
        d = Dict([("timmy", "red"), ("barry", "green"), ("guido", "blue")])
        d.show_structure()

    Описание (возможно, понадобится VPN из-за выходок РКН)
    Ответ написан
    2 комментария
  • Программирование на Java для детей, родителей, бабушек и дедушек, что в этой книге устарело?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    А зачем вы хотите почитать книгу по программировании?
    Ее нужно делать. А если просто почитать - то читайте, и не переживайте, через неделю после прочтения все равно вы эти нюансы не будете помнить.
    Ответ написан
    3 комментария
  • Как узнать на каком сайте стоит iframe на мой сайт?

    402d
    @402d
    начинал с бейсика на УКНЦ в 1988
    Вам же нужно наверное, чтобы он не делал такого ?
    Какой смысл их всех мониторить.
    Добавьте к заголовкам ответа
    X-Frame-Options: DENY
    Ответ написан
    2 комментария
  • Можно ли сделать push всех моих локальных коммитов, но чтобы это выглядело, как один коммит?

    POS_troi
    @POS_troi
    СадоМазо Админ, флудер, троль.
    когда-же вы все, уже научитесь читать документацию на инструменты которыми пользуетесь?
    Ну или хотя-бы гуглить, ну или хотя-бы заглянуть в справку того-же гитхаба?
    Засераете БД бесполезными байтами а потом храни это всё, корми электричеством, а потом глобальное потепление, уничтожение лесов амазонки, аттака инопланетян :)

    https://github.com/wprig/wprig/wiki/How-to-squash-...
    https://htmlacademy.ru/blog/27-how-to-squash-commi...
    Ответ написан
    4 комментария
  • Как делать вывод и ввод в одной строке python?

    6elkka
    @6elkka
    def read_numbers(prompt=''):
        return map(int, input(prompt).split())
    
    x, y = read_numbers('Введите x и y')
    Ответ написан
    Комментировать
  • Как скачать большое количество фотографий имея ссылки на них?

    flapflapjack
    @flapflapjack
    на треть я прав
    Загрузка всех URL, указанных в файле FILE:

    $ wget -i FILE
    Ответ написан
    3 комментария
  • PASSWORD_hash как проверить, верно ли условие?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Это очень плохой код. Только не в части password_verify, а в части выполнения SQL запроса.
    Потому что здесь можно залогиниться под кем угодно, без всякого пароля. Через SQL инъекцию.

    Ну и плюс этот код будет выдавать ошибку, если пользователь с таким логином не найден.

    Вот как правильно проверять пароль с помощью mysqli:
    $stmt = $db->prepare("SELECT * FROM user WHERE login = ?");
    $stmt->bind_param("s", $login);
    $stmt->execute();
    $user = $stmt->get_result()->fetch_assoc();
    
    if ($user && password_verify($password, $user['password']))
    {
        echo "valid!";
    } else {
        echo "invalid";
    }

    Здесь мы, во-первых, используем подготовленные выражения, а во-вторых, сначала проверяем, найден ли юзер с таким логином
    Ответ написан
    Комментировать
  • Может ли Роскомнадзор заблокировать Amazon?

    @kisaa
    Могут. Станут ли - это другой вопрос.
    Ответ написан
    Комментировать
  • Как подбирать цвета для тематики сайта?

    Dima_So
    @Dima_So
    Experientia est optima magistra
    Комментировать
  • Что могут спросить на собеседовании на вакансию верстальщик?

    lukoie
    @lukoie
    та они ж просят основы
    то есть какие знаешь БД, работал ли с мускулем, расскажешь про пхпмайадмин, как сделать импорт/экспорт, поиск там, редактирование полей. мож рассказать про adminer и heidisql - ваще пушка будет, главное с горящими глазами, брызгами слюны и махать руками побольше. расскажи про мариюдб, и посетуй что так редко пользуют постгре. Скажи что коучдб рулит хоть монгодб и более раскрученный, так что лучше работать с ней. ну типа такое.
    пхп скажи что это серверный язык, и читать его в состоянии, и понятно как оформлять файл, делать инклюды и вызывать эхо, но если нужна логика и математика, то тебе ближе искусство и визуальное вот это вот всё, так что если надо что-то натягивать на ЦМС то норм, но писать бекенды не нравится и не склонен. более склонен развиваться во фронтенде.
    ну, что-то типа вот так.
    Ответ написан
    Комментировать
  • Что значит в глазах работодателя "Умею проектировать архитектуру БД" для программиста?

    @deliro
    Это значит, что ты умеешь что-то кроме архитектуры уровня "Пост - Юзер". Что когда тебе дадут задачу по архитектуре, например, сделать и хранить систему скидок, чтобы там декларативно можно было описать условия, указать, какие скидки суммируются с какими (а какие нет), какие проценты суммируются, а какие умножаются — ты бы не впал в депрессию и не уволился или, чего хуже, не написал такое решение, которое невозможно бы было поддерживать и работать с ним.
    Ответ написан
    Комментировать
  • Почему говорят, что Javascript сделан на коленке?

    profesor08
    @profesor08 Куратор тега JavaScript
    Или остаются какие-то принципиальные моменты, которые не позволяют использовать его для серьезной разработки?

    Если весь интернет это не серьезно, то даже не знаю что сказать.
    Ответ написан
    9 комментариев
  • Есть ли приложение для оценки конкурентов в соцсетях?

    pozZzitiv
    @pozZzitiv
    Дизайнер и перфекционист
    У страниц (публичные которые, а не личные профили) в разделе "Статистика", внизу страницы, есть блок с данными. Вводишь похожие страницы и там будет показана активность (подписчики, кол-во публикаций и вовлеченность).
    Немного, но хоть что-то.

    5c6413ed343a9802832344.png
    Ответ написан
    Комментировать
  • Когда нужно использовать асинхронные запросы а когда синхронные?

    Lynn
    @Lynn
    nginx, js, css
    Очень просто.
    Асинхронные всегда.
    Синхронные никогда.

    https://developer.mozilla.org/ru/docs/Web/API/XMLH...
    [...] В основном предпочтительно использовать асинхронные запросы вместо синхронных из-за соображений производительности.

    Синхронный запрос приводит к выполнению кода, который "блокирует" взаимодействие с вкладкой браузера до тех пор, пока запрос не будет полностью выполнен, что существенно ухудшает отклик страницы.


    Новомодный fetch вообще не имеет синхронной версии и даже старый добрый XHR сильно ограничен.
    Ответ написан
    7 комментариев