• Почему не уничтожается ViewModel и ViewModelStoreOwner при повороте экрана?

    @WaterSmith
    Android-разработчик. Java, Kotlin
    Для того чтобы точно ответить на ваш вопрос, нужно видеть ваш код.
    А вообще, все объекты уничтожаются не сразу, а периодически, сборщиком мусора. И уничтожает он только те объекты, на которые не ссылаются другие объекты.
    После onDestroy ваша активити тоже уничтожается не сразу, а если вы например подисали её как слушатель на какой-нибудь сервис, или сохранили в переменной класса Application или еще где-нибудь, то она так и будет болтаться в памяти, а вместо нее создасться другая активити, и таким образом количество таких активити будет расти с каждым переворотом экрана, это называется утечка памяти.
    Ответ написан
    Комментировать
  • Что эффективней, чтение из файла или массив?

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

    Возможно многие и не слышали, но тем не менее существуют т.н. In-memory database (по-русски это, кажется, называется "Резидентная база данных", но я не уверен). Применяются такие системы как правило в высоконагруженных приложениях - в системах провайдеров телекоммуникационных услуг, когда-то читал - что в системах он-лайн биржевой торговли и пр. Там где данных очень много и доступ к ним нужен очень быстро. И главное - владелец таких данных оччччеееень богатенький, что-бы позволить себе приобрести оборудование с объемом оперативной памяти сопоставимым с объемом внешней памяти для "обычных" серверов баз данных. И вот тогда, для таких задач все данные СУБД, включая все индексы и другой служебно-вспомогательной информации, загоняются в оперативную память, обеспечивая и нужную скорость доступа и удобство доступа, которое обычно присуще СУБД.
    Главнейшая проблема, которую решают разработчики таких систем - как обеспечить целостности базы данных при внезапной перезагрузке систем. Это влияет на производительность In-memory database, заставляя тратить часть вычислительных ресурсов на синхронизацию данных в ОП и резервных копий на внешней памяти.
    Список таких систем можно, кстати, найти даже в Википедии:
    https://en.wikipedia.org/wiki/List_of_in-memory_da...

    Если же "спуститься" с небес на землю и учесть финансовые возможности "нормального" пользователя, то например, в языке программирования Python есть такой модуль - Pandas. По сути он дает удобство доступа к данным, почти такое-же (а может и еще большее) как SQL, сохраняя таблицы в ОП. А скорость обработки - сопоставимую с реализацией на "голых" массивах, а для сложных поисковых запросов - и еще большую. Естественно, что объем таблиц (DataFrame в терминологии Pandas) не может быть слишком большим. И не смотря на то, что есть прямой шлюз для перехода от DataFrame к SQL-структурам СУБД и обратно, скорость работы "в памяти" на много выше, чем скорость работы с теми-же данными, выгруженными в БД. Поэтом программист может комбинировать работу DataFrame для скорости обработки и СУБД для долговременно энергонезависимого хранения, найдя приемлемый для своего приложения компромисс.
    Ответ написан
    2 комментария
  • Что эффективней, чтение из файла или массив?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Вопрос не глупый а вполне себе хороший.

    Его плавное развитие приводит к концепции баз данных. Самое главное что можно сказать тезисно это
    1) Пока памяти хватает (массив) - используй смело память
    2) Диск - больше и дешевле памяти
    3) С памятью работать легко. С диском - очень неудобно и надо обрабатывать IOExceptions почти всегда.
    Диски внезапно полны сюрпризов. Могут быть сетевыми дисками.
    4) Разные диски имеют скорость на порядки разную.
    5) Диски ведут себя очень плохо на random access. От этого даже метрика IOPS появилась.
    Ее очень любят обсуждать админы баз данных.
    6) Существуют структуры данных которые спецом создавались только для дисков (B+Tree)
    7) Диск - переживает выключение питания.
    8) Самые разумные решения - сочетают в себе и диск и память в тех частях кода где это нужно.
    9) Есть интерфейсы программирования которые виртуализирут диск как память. Этим пользуется
    SQLite например.
    10) Диск может достигать очень высокой последовательной скорости чтения или записи в файл
    при условии отсутствия конкурирующих записей в данный момент. Этим пользуются в БД
    для журналирования событий.

    В принципе если современный программист просто будет использовать только оперативную память
    то никто ему не сможет ударить по рукам или подойти с какой-то метрикой и чего-то там измерив
    сказать что он неправ. Тут уж только падения по OOM и потери информации и performance issues
    могут быть каким-то значимым аргументом.
    Ответ написан
    3 комментария
  • Для чего нужна аннотация @Serializable в либах Java/Kotlin?

    mayton2019
    @mayton2019 Куратор тега Java
    Bigdata Engineer
    С точки зрения Java language, аннотации ничего не делают. Они - как каменты в коде. Но они могут быть подсказками для фреймворков которые в compile time, classloader или runtime могут что-то выполнить над кодом. 99%
    это какие-то ORM/JSon подказки которые разъясняют фреймворку что делать. Например @Table(name="emp")
    подсказка JPA то класс относится к таблице emp.

    Ваш вопрос про либы Java/Kotlin слишком общий. Ничего конкретного нельзя сказать. Но по отношению к
    Serializable, можно предположить что это гарантия что класс можно сериализовать во внешнюю память
    (оперативная или диск) и это не нарушит никакой бизнес логики. Например это DTO которая полностью
    самодостаточная. Не все сущности вообще реально сохранить. Некоторые сущности - как орграф опутывают
    всю память Java и сохранять их накладно. Как корневой объект хипа. Дешевле дампнуть всю память чем
    сохранять такие объекты поштучно. Некоторые - имеют связи с внешними ресурсами Files/Sockets и вне контекста они не имеют смысла. Есть ключевые слова языка (transient) которые запрещают сериализацию для полей.
    Есть также проблема версионности для Serializable. Сохраненная структура не трекает ваши изменения
    по коду уже после того как вы что-то сохранили. Грубо говоря это не JSON. Если вставили новое поле - можете
    старый файл и не прочитать. В качестве маркера проблемы там заводят специальное поле типа versionId или
    что-то такое. Просто для детектирования.

    Если вы хотите иметь тотальный контроль над сохранением - то определяйте Externalizable и там будут 2
    метода в которых вы контролируете Output/Input streams и сами пишете что сохранять и читать. А еще
    лучше брать библиотеки Kryo/Protobuf/Avro e.t.c. У них еще и есть оптимизации по скорости и по сжатию.
    Вы к этому придете эволюционным путем если будете писать систему где сохранение во вне - важно.

    Сериализация во внешнюю память это огромная проблема когда мы пытаемся подружить разные
    технологии (32-64 бит целые числа или разный порядок байт в машинном слове). Даже простое
    сохранение даты или строки может быть ошибочным если вы сохранили в Java а пытаетесь читать в C++.
    Нужна 100% бинарная совместимость всех структур. Вот библиотеки Протобуф и Авро
    как раз для этого создавались.
    Ответ написан
    Комментировать
  • Как интерпретировать центр масс?

    ProgrammerForever
    @ProgrammerForever
    Учитель, автоэлектрик, программист, музыкант
    Берём векторы всех точек, умножаем на их массы, складываем, сумму делим на общую массу.
    Причём вектором может быть любой вектор направления. Задайте их как декартовы координаты или сферические, в любом случае это сработает.
    Ответ написан
    3 комментария
  • Меняют ли аннотации данные в коде?

    @Akela_wolf
    Extreme Programmer
    Давайте по порядку.

    Что такое аннотация? Аннотация - это некоторые произвольные метаданные, которые программист может присоединить к некоторому объекту. И только. Данные, ничего кроме. Никакого поведения сама по себе аннотация не добавляет.

    То есть аннотация ничего не делает? Да, именно так. Сама по себе аннотация ничего не делает.

    Тогда зачем она вообще нужна? Для того чтобы аннотация оказала какое-то влияние на программу нужен процессор аннотаций. Процессор аннотаций бывает двух видов: первый работает во время компиляции программы. И аннотации оказывают влияние именно на процесс компиляции. Это может повлиять на итоговой код программы, либо изменить логику работы компилятора, например, добавить какие-то дополнительные проверки.

    Второй вид процессоров аннотаций работает во время выполнения программы. Через механизм рефлексии он анализирует аннотации, которые добавил программист, и выполняет логику в соответствии с аннотации и содержащимися в них даннми. Так, например, работает Spring, который в соответствии с аннотациями @Service, @Scope, @Autowired, @Controller и т.п. инициализирует компоненты приложения и запускает его в нужной конфигурации.

    У Эккеля написано неточно (либо это неточный перевод, такое тоже часто бывает). Переменные никакого значения не получают, получает значение поле в аннотации (аннотация в Java - это тоже объект и тоже имеет поля). А затем уже процессор аннотаций значение этого поля как-то использует (в приведенном примере - устанавливает соответствие с колонкой в таблице базы данных соответствующего типа и, при необходимости, создает её).

    У Шилдта написано корректнее - сами по себе аннотации никак семантику программы не затрагивают, для того чтобы они заработали требуется дополнительный код.
    Ответ написан
    1 комментарий
  • Как установить библиотеку котлин?

    @jershell
    1. Перевести проект на gradle. Для этого сначала ставим этот самый градл, потом создаем папку, переходим туда в консоли и пишем
    gradle init
    Будет что-то такое.
    Starting a Gradle Daemon (subsequent builds will be faster)
    
    Select type of project to generate:
      1: basic
      2: application
      3: library
      4: Gradle plugin
    Enter selection (default: basic) [1..4] 2
    
    Select implementation language:
      1: C++
      2: Groovy
      3: Java
      4: Kotlin
      5: Swift
    Enter selection (default: Java) [1..5] 4
    
    Select build script DSL:
      1: Groovy
      2: Kotlin
    Enter selection (default: Kotlin) [1..2] 2
    
    Project name (default: rm_me): moy_proekt


    Это сгенерирует дефолтный проект gradle для kotlin

    2. Далее мы можем подключать любые зависимости, какие захотим. Для этого в сгенерированном проекте открываем файл build.gradle.kts и в секцию dependencies добавляем
    dependencies {
      implementation("io.ktor:ktor-server-netty:1.3.2")
    }


    тут более подробно, но используется gradle синтаксис, а не kts
    https://ktor.io/quickstart/quickstart/gradle.html

    и почти всё тоже самое, но чуть чуть подробнее тут https://github.com/jershell/kotlin_slow_start
    В общем сама цель перевести сначала проект на gradle, поскольку у котлина зависимости почти все через него и подключаются.
    Ответ написан
    1 комментарий
  • Как сменить сменить счет или юр лицо в Google Play Console?

    AgentSmith
    @AgentSmith
    Это мой правильный ответ на твой вопрос
    нельзя поменять.
    надо создавать новый акк
    Ответ написан
    2 комментария
  • Стоит ли получать второе высшее в IT для релокации в США?

    alexgp13
    @alexgp13
    Руководитель ИТ-проектов
    Если рассматриваете второе высшее как корочку-бонус для релокации - не тратьте время, высшее образование не для этого. Отдельный вопрос - будут ли в будущем вообще признавать образование, полученное в РФ? Сейчас в любом случае гораздо больше смотрят на опыт работы. Опыт работы также обычно вполне замещает образование, т.е., грубо говоря, 4 года опыта работы примерно приравниваются к бакалавру.
    Виза H1B - лотерея, причем очень сложная для работодателя. Наверное, некоторые компании и могут перевезти по ней, но по факту шансу почти нулевые. Чаще, насколько знаю, применяется релокация через промежуточную страну и дальнейший перевод внутри компании (вроде виза L1), там нет квот и соответственно лотереи. Но в любом случае компания должна быть реальзо заинтересована в таком работнике. Времена, когда перевозить были готовы почти кого угодно, давно прошли.
    Виза O1 - по сути, единственный рабочий пока вариант, но, опять же, для нее нужен спонсор, готовый ради Вас заморачиваться.
    Я бы посоветовал рассмотреть другие страны, куда уехать пока что реальнее, например, ту же Канаду (а оттуда, кстати, при желании, если оно еще останется, можно будет и в США перебраться). Правда, сейчас и с Канадой непросто, так как пока нет возможности в РФ сдать экзамен на знание языка (английский или французский в зависимости от провинции).

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

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Этот факт никому не нравится, но шанс устроиться в иностранную компанию по собственной инициативе чрезвычайно мал. Если это настоящая иностранная компания, а не стартап из трёх белорусов, работающих во Вьетнаме. Большинство тех, кто работает в иностранных компаниях, не отправляли в неё резюме, а откликнулись на приглашение рекрутёра. Чтобы привлечь внимание иностранных рекрутёров, надо сначала дорасти до сеньорского уровня, работая в компаниях родной страны. Обычно, это занимает лет 7-8, если работать в крупных и известных компаниях. Либо быть гениальным студентом, которого заметят и схантят через кафедру. В любом случае придётся быть лучше миллионов других желающих жить в США и в разы лучше местных соискателей на рабочее место. А учитывания нынешние политические события, шансы из околонулевых превратились в буквально нулевые.
    Ответ написан
    3 комментария
  • Как вы делаете code-review?

    sfi0zy
    @sfi0zy
    Creative frontend developer
    У code review должна быть цель. В моей практике обычно проекты небольшие и там нет отдельных тестировщиков. Получается, что code review отвечает на три вопроса:

    1. Соответствует ли функционал ТЗ?
    2. Создает ли код проблемы команде?
    3. Есть ли тут какой-то специфичный для проекта опыт, который лучше задокументировать, пока мы еще в контексте?


    Получается что-то такое:

    • До выполнения задачи: проводится анализ задачи, формулируется ТЗ. Бывает, что нужно подключиться и помочь с требованиями, с контекстом, в котором все делается. Чем более подробный анализ мы делаем и чем лучше мы понимаем контекст на этом этапе, тем больше вероятность, что потом весь процесс выполнения задачи пойдет как по маслу и code review будет чистой формальностью в конце.
    • До ревью: линтеры проверяют код на соответствие стилю, на отсутствие синтаксического бреда.
    • Дальше - проверка на соответствие функционала ТЗ. Это защита от глупых ошибок в продакшене, которые коснутся пользователей.
    • Потом - на сответствие принятым соглашениям по коду, если они есть в проекте. Обычно это архитектурные паттерны и что-то про зависимости, смотрим не создает ли код проблем окружающим, а то разные глупости порой случаются. Особенно это важно в коде, который не сам в себе, а затрагивает много чего вокруг. Иногда возникает конфликт интересов, когда что-то явно устарело, и соглашения дополняются чем-то. Чем лучше был анализ в начале, тем меньше вероятность, что тут будет, что обсуждать.
    • Дальше уточняющие вопросы по странным местам, если они есть. Это больше с целью узнать контекст задачи, почему приняты те или иные решения. Происходит передача специфичных для проекта знаний в сторону команды. Возможно там же будут какие-то рекомендации по поводу практик, на что стоит обратить внимание в следующий раз. Это будет передача опыта от команды.


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

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    1. Найти работу до достижения 18-и лет почти нереально.
    2. Найти первую работу разработчиком очень тяжело.
    3. Найти работу в геймдеве, не имея опыта разработчика, почти нереально.
    4. Найти работу с GameMaker почти нереально.

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

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

    de-iure
    @de-iure
    just a crazy lawyer
    Да вы хороший работник... не шучу. Как правило критический срок 3 мес. - это испытательный срок.
    Причины вашего ухода с предыдущих мест будут волновать в основном только эйчаров, так они частично оценят некоторые ваши качества относительно умения общаться не на профессиональные темы (так сказать - зрелость вашего мышления...), при этом же все эйчары понимают что в 80% случаев ответы кандидатов чаще ложь чем истина... но это нужно чтобы отсеять кандидатов, которые "не подросли" но нужного уровня.
    Так что не парьтесь относительно этих двух мест работы, если вас лично что-то не устраивает в обосновании причин ухода, придумайте иное разумное объяснение.

    К примеру у меня же одно время было четыре официальных места работы, которые не было возможности скрыть... вот тут было трудно объяснить как такое возможно и почему я одновременно везде уволился...
    Ответ написан
    Комментировать
  • Частая смена мест работы. Как вести себя при поиске?

    opium
    @opium
    Просто люблю качественно работать
    Это нормально в первый год я сменил по моему четыре работы
    Ответ написан
    Комментировать
  • Частая смена мест работы. Как вести себя при поиске?

    @kristenstewartdadada
    Frontend Developer
    Я за 1,5 года сменил 2 места, и спокойно нашел третье, индустрия к этому нормально относится
    Ответ написан
    2 комментария
  • "Частая" смена работы. Нормально ли это?

    @HellWalk
    "бегунков" не любят

    Не любят. Но программисты нужны. Прокачивайте свои навыки, демонстрируйте свой уровень (например, кодом на github), и это перевесит вашу частую смену работы.

    У всех есть плюсы и минуты. Нужно чтобы плюсы перевешивали минусы.
    Ответ написан
    Комментировать
  • "Частая" смена работы. Нормально ли это?

    @antonwx
    "Бегунков" не любят те шарашкины конторы, от которых есть поводы бегать. Если же фирма нанимает специалиста и предлагает справедливые условия труда и оплаты и адекватное руководство, то такая фирма знает, что действительно хороший специалист не будет иметь повода уйти кроме личного. Так что это даже плюс, своеобразный дополнительный фильтр тех, с кем связываться не стоит.
    Ответ написан
    1 комментарий
  • Как отследить момент закрытия приложения пользователем?

    alexgp13
    @alexgp13
    Руководитель ИТ-проектов
    Гарантированных методов нет, самое простое решение - периодически дергать Service (можно сказать пинговать), при отсутствии запросов определенное время (скажем, пропущено десять запросов) - Service закрывать, считая, что приложение закрыли.
    Ответ написан
    Комментировать
  • Как передать через Extra стандартный андроидовский объект типа BluetoothDevice?

    zagayevskiy
    @zagayevskiy Куратор тега Android
    Android developer at Yandex
    Немного неожиданно, но BluetoothDevice implements Parcelable. Так что просто putParcelable.
    Ответ написан
    Комментировать