• Как найти удаленную работу системным администратором если нет опыта?

    saboteur_kiev
    @saboteur_kiev Куратор тега Системное администрирование
    software engineer
    Для начала, я прочитал не только вопрос но и твои комментарии к другим ответам, и поэтому да, у тебя есть проблемы с оценкой и себя и собственных знаний и понимания что ты хочешь получить.

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

    Как в наших реалях найти работу сис админа.

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

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

    Есть огромное желание развиваться в данном направление.Опыт работы системным администратором нет.

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

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

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

    Есть опыт своего игрового сервера на esxi я не про vps а полноценный сервер.

    Этой фразой ты противоречишь сам себе. Чем VPS не полноценный сервер - непонятно - сейчас на VPS навреное живет почти все.
    Опять же игровые сервера бывают разные.
    Например у меня был опыт нескольких игровых серверов. И опыт работы с ними можно сравнить с весьма неслабым опытом и разработки и поддержки в коммерческой организации.
    А можно было просто поставить майнкрафт на домашнем компе без виртуалки - и тоже "опыт игрового сервера", при этом практически ноль технического.
    То есть твоя формулировка ну ничего не несет (ну разве что ты создавал виртуалку на esxi, но ведь это может быть и create-next-done по инструкции в инете)

    Так же знаю что нужно знать сетевые стеки tcp/ip, osi в этом не сильно силён но есть понимание настройки домашний сети.

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

    Так же есть опыт в сборке железа. И работы с nas synology думаю на определенной фирме не стоит заострять внимание так как примерно все они работают одинаково. Но в чем же спросить проблема?

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

    Все актуальные вакансии требуются с опытом от 2-3 лет.

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

    Ситуация в мире сильно развилась за последние 20 лет. Если 20 лет назад просто поставить винду для обычного пользователя был сложный квест, то сейчас практически любая ОС ставится легко (next-next-done).
    Не нужно компилировать софт под Линукс, не нужно ставить все драйвера руками под Windows 95 с постоянными синими экранами. Очень, очень много вещей сейчас user-friendly по сравнению с прошлым.
    Поэтому недосисадмин-эникейщик - крайне редкий вид.

    Я готов работать на минимальной ставке помощник для того чтоб набраться опыта но таких вакансий не наблюдаю. Хотя понимаю некоторых людей берут и без опыта, но не все согласны на такой риск так как придётся возится с новичком.

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

    Конечно составлять sql запросы я не умею но понимание что такое БД тоже есть. Перечислять все свои знания либо понимание каких либо вещей не вижу смысла так как хочу услышать совета а не оставить здесь своё резюме))

    Ну совет только один - повышай квалификацию, ищи дальше. Нет волшебной палочки.
    Те же самые sql запросы - это настолько простая вещь, что простейшие sql запросы учат набирать в любом вузе. Как человек, считающий себя начинающим сисадмином не умеет? Нонсенс.
    Понимание что такое БД - ну для этого достаточно прочитать 1 абзац в википедии. От сисадмина требуется хотя бы навыки резервного копирования, восстановления, простого траблшутинга.

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

    Суть в практических знаниях.
    2-3 года коммерческого опыта, это в первую очередь показатель, что ты наконец чему-то научился полезному для работы на позиции сисадмина.
    В современном ИТ мире существует уже не просто абстрактный "компьютерщик", а множество профессий, которые уже и не особо друг с другом сочетаются.
    Поэтому оценить что именно учить, без опыта работы - сложно.
    Зато поработав в крупной организации со развитой инфраструктурой, даже не занимаясь техническими задачами, можно примерно понять что сделано, какими инструментами и главное зачем.

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

    Именно поэтому и требуют опыт, как самый простой способ подтвердить знания еще до собеседования.

    Что можете посоветовать в данной ситуации

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

    а забыл упомянуть что есть так же оыпт работы с Linux и ssh на базавом уровне.

    Что значат эти слова?
    Для меня они обозначают, что ты очень плохо знаешь Linux и ssh, потому что... ну вот банально, давай спрошу про ssh. Как используется ssh ключ хостов? Поднимал обратный проброс портов через ssh?
    Или подожди, я конечно догадываюсь, что ты перепутал слова и хотел сказать Linux и shell.
    Но вот именно такие оговорки и подразумевают, что знания у тебя скорее всего недостаточны даже для работы стажером.

    P.s думал выбрать направление devops но там все намного сложней нужен хороший опыт сис админа пока изучаю docker но уже научился git)

    В DevOps вообще пока не лезь.
    DevOps это уже путь ИЗ сисадмина или ИЗ разработчика или ИЗ тестировщика. Но первой профессией DevOps - это звучит бредово. DevOps в проекте нужен тогда, когда проект уже сложный. Настолько сложный, что нужен отдельный человек со специфическим набором навыков. DevOps джуниор это зачастую мид или даже сеньор в другой области.

    Научился в git - опять таки слова, слова... Как ты им пользуешься? Есть что-то на гитхабе или в локальной репе? Или ты просто почитал что-то, попробовал что-то но даже не нашел как применить git в своих собственных повседневных задачах?

    В общем как-то так. Серьезнее и шире смотри на вещи и объективнее оценивай свои знания. От того, как ты формулируешь свои мысли - и идет отношение к тебе и твоим вопросам.
    Ответ написан
    5 комментариев
  • Controller из GRASP это контроллер представленный в MVC?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    указывается на контроллер в единственном числе.

    Ну как бы там обычно пишут что на каждый юз кейс стоит делать свой контроллер.
    Ответ написан
    1 комментарий
  • Почему нет вопросов по GRASP паттернам(принципам) на тостере?

    Почему не задают? Вы задали вопрос по GRASP.
    Ответ написан
    Комментировать
  • Как отправить UDP пакет через командную строку Linux?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Просто послать строку проблем нет (ip и порт меняете на свои):
    echo -ne '\xa5\xa5\xa5...' > /dev/udp/192.168.0.1/5000

    Тут сложнее разобраться в формате строки, что там за данные и как их подготовить.
    Ответ написан
    Комментировать
  • Насколько хорошо бэкенд-разработчик должен знать SQL?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Безотносительно SQL. Любое собеседование на Джуна - это экзекуция. Потому что опыта нет. И от скуки тебя гоняют по всем основам. Если SQL то погнали. Нормальные формы. Транзакция. Если язык java/c# то давай напиши сортировку в 2 потока.

    Вобщем бить будут. Поэтому зубри.
    Ответ написан
    Комментировать
  • Почему современные языки отказываются от ООП?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Они не отказываются. Скорее происходит отказ от "парадигмы" разработки. Языки стали мульти-парадигменные. Посмотрите на С++20 или Scala. Их невозможно положить в коробочку ООП или ФП. В них есть почти полный набор фич и оттуда и отсюда. И с каждым годом число фич растет и граница размывается. Нашим потомкам будет вообще непонятно где идет раздел.

    По поводу golang. Это язык ограниченной разработки. Его создавали специально чтобы порог вхождения был низкий. Фактически делали лайтовый С++ которому можно обучить школьника за 14 дней. Но с перформансом выше чем у Питона. Поэтому выражать какие-то сложные конструкции на типах там скорее всего не получится. У golang есть свой манифест. Я забыл как он называется и где он. Вобщем там довольно четко обоснованно почему такие принципы и почему такая идеология.
    Ответ написан
    1 комментарий
  • Как заменить switch case паттерном стратегия?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Switch
    public enum DamageType { Melee, Range, Magic }
    public class Monster
    {
        public double Health { get; private set; }
        public double MeleeDamage { get; private set; }
        public double RangeDamage { get; private set; }
        public double MagicDamage { get; private set; }
        public DamageType FavoriteDamageType { get; private set; }
    
        public Monster(double health, double meleeDamage, double rangeDamage, double magicDamage, DamageType favoriteDamageType)
        {
            Health = health;
            MeleeDamage = meleeDamage;
            RangeDamage = rangeDamage;
            MagicDamage = magicDamage;
            FavoriteDamageType = favoriteDamageType;
        }
    
        public void AttackTo(Monster monster, DamageType damageType)
        {
            switch (damageType) // используется switch
            {
                case MonsterType.Melee: monster.Health -= MeleeDamage; break;
                case MonsterType.Range: monster.Health -= RangeDamage; break;
                case MonsterType.Magic: monster.Health -= MagicDamage; break;
            }
        }
    
        public void AttackTo(Monster monster)
        {
            AttackTo(monster, FavoriteDamageType);
        }
    }


    То же самое, но со стратегией
    public class Monster
    {
        public double Health { get; set; }
        public double MeleeDamage { get; private set; }
        public double RangeDamage { get; private set; }
        public double MagicDamage { get; private set; }
        public IDamageStrategy FavoriteDamageStrategy { get; private set; }
    
        public Monster(double health, double meleeDamage, double rangeDamage, double magicDamage, IDamageStrategy favoriteDamageStrategy)
        {
            Health = health;
            MeleeDamage = meleeDamage;
            RangeDamage = rangeDamage;
            MagicDamage = magicDamage;
            FavoriteDamageStrategy = favoriteDamageStrategy;
        }
    
        public void AttackTo(Monster monster, IDamageStrategy damageStrategy)
        {
            damageStrategy.Attack(this, monster); // не используется switch
        }
    
        public void AttackTo(Monster monster)
        {
            AttackTo(monster, FavoriteDamageStrategy);
        }
    }
    
    
    public interface IDamageStrategy
    {
        void Attack(Monster attacker, Monster defender);
    }
    public class MeleeDamageStrategy : IDamageStrategy 
    {
        public void Attack(Monster attacker, Monster defender)
        {
            defender.Health -= attacker.MeleeDamage;
        }
    }
    public class RangeDamageStrategy : IDamageStrategy 
    {
        public void Attack(Monster attacker, Monster defender)
        {
            defender.Health -= attacker.RangeDamage;
        }
    }
    public class MagicDamageStrategy : IDamageStrategy 
    {
        public void Attack(Monster attacker, Monster defender)
        {
            defender.Health -= attacker.MagicDamage;
        }
    }

    Отличие класса Monster только в коде первого метода AttackTo. Ну и свойства FavoriteDamageType или FavoriteDamageStrategy.

    Стратегия может быть полезна, если код атаки, в зависимости от типа, сильно отличается, используя внешние данные (не из класса монстра), например, день или ночь, ясно/дождь и пр. Использование стратегии переносит часть кода из класса монстра (и так сложного класса) в несколько простых классов.
    Ответ написан
    1 комментарий
  • Call to undefined function checkFields(), как исправить?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Возможно, речь идет о коде, который я как-то на ходу сочинял здесь для кого-то.
    Только понятное дело, весь смысл давно улетучился, и остался голимый, эталонный карго-культ, самолеты из соломы.

    Там шла речь о примитивном ORM по паттерну Table Gateway, чтобы упростить и обезопасить базовые CRUD операции.

    abstract class BasicTableGateway
    {
        protected $db;
        protected $table;
        protected $fields;
        protected $primary = 'id';
    
        public function __construct(\PDO $db)
        {
            $this->db = $db;
        }
        public function read($id): ?array
        {
            $stmt = $this->db->prepare("SELECT * FROM `$this->table` WHERE `$this->primary`=?");
            $stmt->execute([$id]);
            return $stmt->fetcn();
        }
        public function insert($data): int
        {
            $this->checkFields($data);
    
            $fields = '`'.implode("`,`", array_keys($data)).'`';
            $placeholders = str_repeat('?,', count($data) - 1) . '?';
    
            $sql = "INSERT INTO `$this->table` ($fields) VALUES ($placeholders)";
            $this->db->prepare($sql)->execute(array_values($data));
    
            return $this->db->lastInsertId();
    
        }
        // и так далее
        protected function checkFields($data)
        {
            $diff = array_diff(array_keys($data), $this->fields);
            if ($diff) {
                throw new \InvalidArgumentException("Unknown field(s): ". implode($diff));
            }
        }
    }


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

    class UserGateway extends BasicTableGateway {
        protected $table = 'gw_users';
        protected $fields = ['email', 'password', 'name', 'birthday'];
    }
    $userGateway = new UserGateway($pdo);
    
    $data = [
        'email' => 'foo@bar.com',
        'password' => 123,
        'name' => 'Fooster',
    ];
    $id = $userGateway->insert($data);


    Получается быстро удобно и безопасно.

    Но в текущем варианте удобство, осмысленность и безопасность улетучились, остались только какие-то невнятные идеи.
    Ответ написан
    2 комментария
  • Как избавиться от большого количества else if?

    Adamos
    @Adamos
    let variants = [
      { condition: (tries === 0), alert: 'У вас закончились попытки' },
      { condition: (value == number), alert: 'Поздравляю, вы угадали', returnValue: true },
      { decreaseTries: true }
    ];
    for(let i = 0; i < variants.length; ++i) {
      let v = variants[i];
      if(typeof v.condition === 'undefined' || v.condition) {
        if(v.alert) {
          alert(v.alert);
        }
        if(v.decreaseTries) {
          tries--;
          triesSpan.textContent = declOfNum(tries, ['попытка', 'попытки', 'попыток']);
          triesTitle.textContent = `У вас осталось ${tries} ${triesSpan.textContent}`;
        }
        return v.returnValue || false;
      }
    }

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

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Парадигмы нужны для управления сложностью. Соответственно их надобность начинаешь замечать и понимать в действительно сложных проектах. Причём просто скачать откуда-то сложный код взрослой системы вряд ли будет достаточно, надо несколько лет поддерживать и развивать такую систему в большой команде, часть которой за эти несколько лет ещё и сменится.
    Ответ написан
    3 комментария
  • Проекты для DBA и как их презентовать?

    Melkij
    @Melkij
    PostgreSQL DBA
    и деморализующий ответ от postgresql DBA

    Вливаюсь в администрирование(в postgres на данном этапе)

    То есть опыта системного администрирования нет?
    А сколько лет опыта в разработке?
    Если оба ноль - выберите себе цель более реальную.
    Я не знаю ни одного DBA, у которого за плечами не было бы заметного опыта или системного администрирования или в разработке (у меня вот до сих пор больше лет опыта собирания граблей в разработке, чем опыта DBA).
    И, что для вас куда хуже, не имею представлений для какой работы может понадобится DBA без существенного багажа знаний, который подразумевает эта работа. Открыл вот HH и почему-то не могу найти вообще ни одной вакансии junior DBA. Да что говорить - полный результат поиска вакансий postgresql DBA укладывается в одну страницу.

    Таковы реалии DBA. Обычно будущий DBA выглядит или как опытный сисадмин, вникающий в работу SQL или как разработчик, к которому приходят коллеги с вопросами про работу СУБД.

    примеры проектов, которые не оторваны от реальности.

    1. доклад на конференции
    2. тут бы я написал sql ru, но его больше нет. Попробуйте отвечать на q&a хабра или ru.so. По моим наблюдениям они бесполезны и активность тут никого не интересует, в отличии от sql ru. Но зато некоторого опыта набраться можно, попутно потренировав ключевой навык любого IT - поиск информации
    3. посты на хабре
    4. вменяемый bug report (в самом postgresql или широко известных штуках рядом), впоследствии исправленный


    Что DBA может показать на гитхабе? Не знаю, postgres/postgres коммит с упоминанием своего имени, разве что.
    Дамп какой-то базы? Если только с детальным описанием предметной области и задач. А читать это всё хоть кто-то будет?
    Ответ написан
    Комментировать
  • Почему кв.матрица — nxn?

    @deliro
    Это троллинг такой? У квадрата все стороны равны, верно? Вот и у квадратной матрицы количество столбцов равно количеству строк. А причём тут индекс — я могу только догадываться. Почему трёхэтажный дом по 3 квартиры на каждом этаже называют девятиквартирным, если у каждой квартиры есть свой номер?
    Ответ написан
    2 комментария
  • Какие главы важнее всего почитать в книге Дмитрия и Игоря php7 наиболее полное руководство?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Кроилово ведёт к попадалову. Учебники пишутся с расчётом на системную подачу материала и его последовательное усваивание читателем. Так что читайте всё.
    Ответ написан
    Комментировать
  • Есть ли какие-то сервисы или форумы, куда можно выложить свой код, чтобы его могли оценить и оптимизировать другие люди?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Если код выполняет свою задачу и устраивает бизнес - значит достаточно хороший.

    Если хотите расти как разработчик - читайте стандарты, переписывайте код чтобы он им соответствовал (name convention или для питона вообще PEP 8)

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

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

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

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    Ну вот такой синтетический пример можно придумать:
    function factory () {
      $number = 17;
    
      return function($multiplier) use($number) {
        echo $number * $multiplier;
      };
    }
    
    $showNumber = factory(42);
    
    $showNumber();


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

    GavriKos
    @GavriKos
    WakeOnLan +нечто мониорящее ваш сайт на предмет нажатости кнопки
    Ответ написан
    Комментировать
  • Для чего нужен Promise.resolve, если он не срабатывает в Promise?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Чтобы new Promise() куда-то сдвинулся,
    надо вызвать одну из двух функций, передаваемых во внутрь:

    new Promise((resolve, reject) => {
      // что угодно происходит
      // и в какой-то момент
      resolve(value);
    });


    А то, что внутри вдруг создали новый промис, который сразу в ресолвнутом состоянии – всем безразлично.
    Ответ написан
    Комментировать
  • Как практиковать ООП?

    AgentSmith
    @AgentSmith
    Это мой правильный ответ на твой вопрос
    Только опыт и практика.
    Пиши как можно больше.
    Со временем будешь понимать, что год назад ты писал плохо и можно переписать намного лучше с применением ООП и шаблонов проектирования, которые освоил.
    Других советов нет.
    Никаких курсов и уроков.
    Ответ написан
    1 комментарий
  • Как правильно реализовать подобную функцию?

    MvcBox
    @MvcBox
    Software Developer [C/C++/JS(for Node.js)/etc]
    async function asyncFunctions(){
        const [x, y] = await Promise.all([f1(), f2()]);
        console.log(x, y);
    }
    
    async function f1(){
        console.log("f1");
        return "f1";
    }
    
    async function f2(){
        console.log("f2")
        return "f2";
    }
    
    asyncFunctions().catch(console.error);
    Ответ написан
    4 комментария