JavaRush /Blog Jawa /Random-JV /Tingkat 38. Wangsulan pitakonan wawancara babagan topik t...
lichMax
tingkat
Санкт-Петербург

Tingkat 38. Wangsulan pitakonan wawancara babagan topik tingkat

Diterbitake ing grup
Level 38. Wangsulan pitakonan wawancara babagan topik level - 1Halo. Maneh, katon ora ana jawaban kanggo pitakonan saka level iki. Dadi, kaya biasane, aku ngirim postinganku. Dumadakan, ana sing bakal nulungi (utawa ana sing bakal nambah utawa njawab luwih apik). Dadi pitakonan kasebut:
  1. Apa Agile?
  2. Apa Scrum?
  3. Apa Peran Scrum Sampeyan Ngerti?
  4. Apa iku sprint? Marang kita karo rincian
  5. Sapa sing QAs?
  6. Sapa sing duwe produk?
  7. Nerangake hirarki pangecualian
  8. Apa sing kudu ditindakake yen JVM mbuwang kesalahan?
  9. Apa inovasi ing wilayah pengecualian ing Jawa 7 sing sampeyan ngerti?
  10. Napa anotasi dibutuhake? Kepiye cara nggunakake?
Lan saiki wangsulanku:
  1. Agile minangka seri pendekatan kanggo pangembangan piranti lunak sing fokus ing panggunaan pangembangan iteratif, pambentukan syarat sing dinamis lan njamin implementasine minangka asil interaksi ing kelompok kerja sing ngatur dhewe sing kalebu spesialis saka profil sing beda-beda. Ana sawetara teknik sing ana gandhengane karo metodologi pangembangan fleksibel, utamane program ekstrem, DSDM, Scrum, FDD.

    Konsep dhasar metode agile:

    • wong lan interaksi luwih penting tinimbang proses lan piranti;
    • produk sing bisa digunakake luwih penting tinimbang dokumentasi lengkap;
    • kerjasama karo pelanggan luwih penting tinimbang setuju karo syarat kontrak;
    • kekarepan kanggo ngganti luwih penting tinimbang tetep ing rencana asli.

    Prinsip dhasar pendekatan iki uga dirumusake:

    • kepuasan pelanggan liwat pangiriman awal lan tanpa gangguan saka piranti lunak sing terkenal;
    • nampa owah-owahan ing syarat malah ing mburi pembangunan (iki bisa nambah daya saing produk ing pasar);
    • Kiriman piranti lunak sing kerep digunakake (saben sasi utawa saben minggu, utawa malah luwih kerep);
    • cedhak, komunikasi saben dina antarane customer lan pangembang ing saindhenging project;
    • proyek kasebut ditindakake dening individu sing duwe motivasi sing diwenehake karo kahanan kerja, dhukungan lan kepercayaan sing dibutuhake;
    • Cara sing dianjurake kanggo ngirim informasi yaiku obrolan pribadi (pasuryan);
    • piranti lunak sing digunakake minangka ukuran kemajuan sing paling apik;
    • sponsor, pangembang lan pangguna kudu njaga jangkah pancet tanpa wates;
    • manungsa waé pancet kanggo nambah kaunggulan technical lan desain pangguna-loropaken;
    • kesederhanaan - seni ora nindakake karya sing ora perlu;
    • syarat technical paling, arsitektur lan desain teka saka tim poto-diatur;
    • adaptasi pancet kanggo owah-owahan kahanan.

    Masalah utama pangembangan diakoni yen ora ana peserta ing tahap apa wae sing duwe informasi lengkap babagan apa sing kudu ditindakake.

  2. Scrum minangka salah sawijining teknik pangembangan tangkas. Iku fokus ing kontrol kualitas proses pembangunan. Fitur utama Scrum yaiku divisi proses pangembangan dadi iterasi kanthi durasi sing jelas (biasane 2-6 minggu; diarani "sprint").

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

    Перед самым первым спринтом заказчик (or его представитель) формирует список требований, предъявляемых к будущему продукту. Такие требования называются "user story", а самого заказчика называют "product owner". Также в этом списке заказчик (PO) указывает приоритет для каждой задачи. Сначала будут реализовываться задачи с более высоким приоритетом. Весь список называется "product backlog", or "резерв продукта".

    Кроме product owner, среди участников ещё выделяют scrum-мастера: он проводит все совещания, следит за соблюдением всех принципов скрама, разрешает противоречия и защищает команду от отвлекающих факторов. Обычно в качестве скрам-мастера выступает кто-то из команды.

    На первом совещании в начале спринта каждой задаче, кроме того, что назначается приоритет, даётся ещё приблизительная оценка в "абстрактных человеко-днях", которые ещё называют "story point". Затем команда решает, сколько она успеет выполнить задач за время спринта. Например, заказчик отобрал 7 задач, а команда сможет сделать только 5. Тогда остальные две задачи пойдут на следующий спринт. Если заказчику это не нравится, он может повысить их приоритет, но тогда другие задачи выпадут из спринта. Кроме того, скрам-мастер может разбить некоторые задачи на более мелкие и расставить им различные приоритеты, чтобы заказчик остался доволен.

    Список отобранных задач на спринт называются "sprint backlog", or "резерв спринта". Для лучшей наглядности обычно составляется table, в которой указываются задачи, которые нужно реализовать, которые находятся в процессе реализации, и те которые уже выполнены. Также строится диаграмма "сгорания задач". Она графически показывает, сколько ещё задач осталось выполнить. В идеале график сгорания задач к концу спринта должен опустится до нуля.

    Также в течение спринта каждый день or через день проводятся небольшие совещания внутри команды на 5-15 minutes, где каждый участник команды рассказывает, что сделал за этот день (or эти два дня), что ещё ему предстоит сделать, а также рассказывает о том, что ему мешает что-то сделать.

    Когда спринт завершается, scrum-master проводит demo, на котором демонстрируется список всего, что fully сделано. Затем проводится «разбор полетов» — совещание тоже на пару часов. На нем обычно пытаются выяснить, что было сделано хорошо, а что (и How) можно было сделать лучше.

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

    Также в середине спринта, иногда еще проводят «вычесывание» — совещание посвященное планированию следующего спринта. На нем обычно уточняют приоритеты задач, а так же могут разбить некоторые задачи на части и/or добавить новые задачи в product backlog – резерв продукта.

  3. В скрам участников делят на "свиней" и "кур". "Свиньи" fully задействованы в процессе, "куры" — только частично. К категории "свиней" относят следующие роли:

    • Скрам-мастер (проводит совещания, следит за выполнением принципов скрама и пр.; это кто-то из команды, produst owner не может быть скрам-мастером);
    • Владетелей продукта (Product Owner) (представляет интересы конечных пользователей и других заинтересованных в продукте сторон);
    • Команда разработки (Development Team) (кросс-функциональная команда, состоящая из специалистов разных профилей: разработчиков, тестировщиков, дизайнеров, архитекторов и т.д. Размер команды в идеале составляет от 3 до 9 человек. Команда является единственные fully вовлечённым участником разработки и отвечает за результат How единое целое. Никто, кроме команды, не может вмешиваться в процесс разработки на протяжении спринта).

    К "курам" относятся следующие роли:

    • Пользователи (Users)
    • Клиенты, продавцы (Stakeholders) (лица, которые инициируют проект и для кого проект будет приносить выгоду. Они вовлечены в скрам только во время обзорного совещания по спринту (Sprint Review));
    • Управляющие (Managers) (люди, которые управляют персоналом);
    • Эксперты-консультанты (Consulting Experts).
  4. Спринт — это одна итерация цикла разработки программного обеспечения в Скраме. Обычно спринт жёстко фиксирован по времени. Продолжительность спринта выбирается на основании размера команды, специфики работы, требований, размера проекта. Чаще всего это подбирается опытным путём, на основании проб и ошибок. В среднем спринт может быть продолжительность от 2 недель до 4 (хотя в некоторых компания его продолжительность бывает равна и 6 неделям). Для оценка объёма работ в спринте может быть использована предварительная оценка, измеряемая в очках истории. Предварительная оценка фиксируется в беклоге проекта.

  5. QA расшифровывается How Quality Assuarance (то есть "Гарантия качества", если перевести дословно). К этой категории относятся тестировщики. Это люди, которые выявляют в программе баги и ошибки. Для этого они используют разные средства, How ручные, так и автоматические. После выявления багов и ошибок они сообщают об этом разработчикам, и те исправляют эти ошибки.

  6. Product Owner (владелец проекта) — это заказчик or представитель заказчика. Это либо кто-то со стороны клиента (сторонняя фирма or физ.лицо), либо Howой-то другой сотрудник фирмы, определяющий требования к конечному продукту и следящий за их выполнением (например, бизнес-аналитик). Как уже было сказано, он определяет требования к продукту и задачи, которые должна решить команда разработки, чтобы получить конечный продукт. Список требований (or задач) он оформляет в определённым порядке и с заданным приоритетом для каждого требования (задачи). Обычно он участвует в планировании спринта (перед началом спринта) и в демонстрации результатов спринта (после окончания спринта).

  7. Во главе иерархии исключений в Java стоит класс Throwable. От не наследуются два класса: Error и Exception. Объекты первого класс выбрасываются, когда возникают Howие-то серьёзные ошибки в работе программы и java-машины в целом (а также в работе ОС и аппаратной части компьютера), так, что программа больше не может продолжать работать и закрывается. Это может быть недостаток памяти (OutOfMemoryError) or переполнение стека (StackOverflowError).

    Экземпляры второго класса могут выбраться при самых различных исключительных ситуаций. Собственно от этого класса наследуется класс RuntimeException и все остальные классы. Первый класс так выделяют, потому что, во-первых, исключительные ситуации такого типа являются непроверяемые (unchecked), а, во-вторых, к данным исключительным ситуациям относятся ошибки выполнения программы. Обычно это возникает из-за несовершенства codeа. Все остальные исключительные ситуации обычно являются следствием непредвиденного стечения обстоятельств, например, ошибки ввода-вывода.

    Также исключения делятся на проверяемые (checked) и непроверяемые (unchecked). Первые необходимо либо отлавливать в блоке try-catch, либо указывать в качестве выбрасываемых в сигнатуре метода (используя слово throws). Непроверяемые этого не требуют, и выбор остаётся за программистом. К проверяемым относятся исключения типа Throwable (а также наследуемые от него) и типа Exception (и наследуемые от него, кроме исключений типа RuntimeException). К непроверяемым относятся исключения типа Error (а также наследуемые от него) и исключения типа Runtime (и наследуемые от него).

  8. Ничего, программа просто закроется. Обычно это критические ошибки, не всегда возникшие по вине программиста (например, выход из строя жёсткого диска or сбой операционной системе). Правда, среди них есть две ошибки, которые могу следствием несовершенства codeа — это StackOverflowError и OutOfMemoryError. Первый тип ошибок возник, при переполнении стека вызовов — то есть, когда вызывается слишком много методов и стек вызовов становится слишком больший (типичный пример — бесконечная рекурсия or рекурсия с большим количеством итераций). Вторая ошибка — OutOfMemoryError — возникает, когда переполняет память отведённая под an objectы, то есть когда создаётся слишком много тяжеловесных an objectов, и они все держатся в памяти (or когда сборщик мусора не успевает их уничтожать).

  9. В Java 7 в плане исключение были введены три новых "вещи":

    • Multicatching. Это когда в одном catch-блоке сразу обрабатывается несколько исключений:

      try {
       } catch (Exception1|Exception2|Exception3| ... | ExceptionN ex) {}

      В таком случае параметр ex будет неявно иметь модификатор final. Кроме того, byte-code, сгенерированный компиляцией такого codeа (с единым catch-блоком) будет короче, чем byte-code, сгенерированный компиляцией codeа с несколькими catch-блоками.

    • Try-with-resources. Эта конструкция позволяет после слова try в скобках указать открываемые ресурсы, которые сами закроются после окончания конструкции try () {} catch{}. В качестве ресурса в данной конструкции может быть использован любой an object, реализующий интерфейс AutoCloseable.

      Во время закрытия ресурсов тоже может быть брошено исключение. В try-with-resources добавлена возможность хранения "подавленных" исключений, и брошенное try-блоком исключение имеет больший приоритет, чем исключения, получившиеся во время закрытия. Получить последние можно вызовом метода getSuppressed() от исключения, брошенного try-блоком.

    • Rethrowing. Перебрасывание исключений с улучшенной проверкой соответствия типов.

      Компилятор Java SE 7 тщательнее анализирует перебрасываемые исключения. Рассмотрим следующий пример:

      static class FirstException extends Exception { }
      static class SecondException extends Exception { }
      
      public void rethrowException(String exceptionName) throws Exception {
          try {
              if ("First".equals(exceptionName)) {
                  throw new FirstException();
              } else {
                  throw new SecondException();
              }
          } catch (Exception ex) {
              throw e;
          }
      }

      В примере try-блок может бросить либо FirstException, либо SecondException. В versionх до Java SE 7 невозможно указать эти исключения в декларации метода, потому что catch-блок перебрасывает исключение ex, тип которого – Exception.

      В Java SE 7 вы можете указать, что метод rethrowException бросает только FirstException и SecondException. Компилятор определит, что исключение Exception ex могло возникнуть только в try-блоке, в котором может быть брошено FirstException or SecondException. Даже если тип параметра catchException, компилятор определит, что это экземпляр либо FirstException, либо SecondException:

      public void rethrowException(String exceptionName) throws FirstException, SecondException {
           try {
               // ...
           } catch (Exception e) {
               throw e;
           }
       }

      Если FirstException и SecondException не являются наследниками Exception, то необходимо указать и Exception в объявлении метода.

    • Anotasi digunakake kanggo nyelehake ing jejere kelas, lapangan, metode utawa variabel sawetara informasi layanan tambahan (metadata) sing ana gandhengane. Kanggo nunjukake anotasi, sampeyan kudu nulis jeneng anotasi (kelas anotasi) sawise judhul @ kelas utawa metode, utawa deklarasi kolom utawa variabel, contone:

      ...
      @Override
      public void doSomeThing() {
      }
      ...

      Kajaba iku, anotasi bisa nduweni sifat; padha dituduhake ing kurung, dipisahake karo koma, ing wangun pasangan "kunci = nilai", ing ngendi kunci kasebut minangka jeneng properti, lan nilai kasebut minangka nilai nyata sing properti iki. kudu njupuk. Katon kaya mangkene:

      @CatInfo(manager=Catmanager.class, unique=true)
      class Cat {}

      Yen sampeyan nemtokake nilai mung siji properti, jeneng properti lan tandha witjaksono bisa diilangi: @SuppressWarnings("unchecked").

      Sampeyan uga bisa ngilangi tanda kurung kabeh yen ora ana properti sing diwenehi nilai.

      Kanggo nggawe anotasi dhewe, sampeyan kudu nemtokake modifier akses, banjur sawise spasi tembung kunci " @interface " banjur maneh sawise spasi jeneng anotasi (wiwitan nganggo huruf kapital). Sabanjure teka awak anotasi ing kurung kriting. Ing njero awak, properti kasebut ditemtokake ing wangun deklarasi metode (kaya ing antarmuka). Sampeyan uga bisa nemtokake nilai standar kanggo properti (bakal nampa yen, nalika nemtokake anotasi ing panggonan sing bener, properti iki ora diwenehi nilai). Kabeh bebarengan katon kaya iki:

      @interface CatManager
      {
       Class manager();
       boolean unique();
       String name() default "Unknown Cat";
      }

      Anotasi nindakake fungsi ing ngisor iki:

      • nyedhiyani informasi sing perlu kanggo compiler;
      • menehi informasi menyang macem-macem alat kanggo generate kode liyane, konfigurasi, etc.;
      • bisa digunakake nalika kode mlaku;
      • nambah kode readability lan pangerten dening programer.
      Saiki, kompiler nggunakake telung anotasi: @Deprecated, @Overridelan @SuppressWarnings. Anotasi pisanan menehi tandha cara lan kelas sing ora disaranake digunakake (kompiler nampilake bebaya babagan kasebut). Anotasi kapindho diselehake ing cara sing ditindhes saka kelas turunan (iki ngidini sampeyan ngontrol sambungan antarane metode asli lan sing ditindhes). Anotasi katelu ngidini sampeyan nyuda (ora nyithak) sawetara bebaya sing luar biasa sing biasane ditanggepi dening compiler babagan cara utawa kelas tartamtu (contone, yen wis ora digunakake lan ora digunakake).

Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION