Как создать крупные приложения

1) верно 2 ^ 16 ВА и 2 ^ 18 Па

Страницы - это термины для виртуальных адресов и фреймы страниц для физических адресов.

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

Если у вас есть 8-битное смещение и 16-битный виртуальный адрес, адрес страницы составляет 8 бит, и есть 2 ^ 8 страниц. Аналогично для физических адресов адреса фреймов страниц имеют 10 битов, а фреймы страниц размером 2 ^ 10.

И размер страницы или фрейма страницы составляет 2 ^ 8 байт (адреса всегда относятся к байту).

28
задан DonQuijote 9 May 2019 в 04:29
поделиться

12 ответов

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

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

Так, что мы можем сделать?

Минимизируют связь между несвязанными частями Вашего кода. Код собирается измениться со временем способами, которыми Вы не можете ожидать - будут showstopper проблемы, интегрирующиеся с незнакомыми продуктами, изменениями требований - и те вызовут пульсацию - на изменениях. Если Вы установили стабильные интерфейсы и кодировали им, можно внести любые изменения, в которых Вы нуждаетесь в реализации без тех изменений, влияющих на код, который использует интерфейс. Вам нужно к [1 112], проводят время и усилие интерфейсы разработки, которые выдержат испытание временем - если интерфейс должен измениться также, Вы возвращаетесь к начальной ситуации.

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

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

28
ответ дан j_random_hacker 28 November 2019 в 02:36
поделиться

Одолженный от tvanfosson:

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

17
ответ дан carrier 28 November 2019 в 02:36
поделиться

Вот книга, что мы раньше вели наши стандарты кодирования и методы:

alt text Крупномасштабная Разработка программного обеспечения C++

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

я также рекомендовал бы, как был сделан прежде многими другими, Код, Завершенный и Оценка программного обеспечения Steve McConnell. Мне особенно нравится его метафора "растущего" программного обеспечения вместо того, чтобы создать или создать. Этот способ просмотреть программное обеспечение предоставляет себя лучше чему-то, что будет иметь долгий жизненный цикл.

11
ответ дан Glorfindel 28 November 2019 в 02:36
поделиться

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

Некоторые из тех проблем включают:

  • размер (такой как база данных, которая просто не будет соответствовать на единственном жестком диске)
  • сложность (от единого приложения до нескольких подсистем)
  • параллелизм (от нуля до тысяч/миллионов одновременных пользователей)
  • доступность (с 9%-го времени работы до времени работы на 99,999%)
  • надежность (от ежедневных отказов до нескольких лет MTBF)
  • скорость (с часов вниз к миллисекундам в ответ время)
  • продуктизация (от Вашего любимого проекта до sellable товара)
  • и т.д.

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

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

С наилучшими пожеланиями.

5
ответ дан Rob Williams 28 November 2019 в 02:36
поделиться
  1. Решают, какие функции являются самыми важными; забудьте, что остальные
  2. Решают, который из те функция является самой важной и забывает, что остальные
  3. Реализуют их (должен занять пару недель, в других отношениях повторные шаги 1 и 2)
  4. , Запуск
  5. Видит, какие функции работают, которые не делают и которые отсутствуют
  6. , Возвращаются к шагу 1
4
ответ дан davetron5000 28 November 2019 в 02:36
поделиться

Инкрементно, с помощью Тест Управляемый Дизайн

4
ответ дан Noel Walters 28 November 2019 в 02:36
поделиться

Крупные приложения не создаются одной ночью. Корпоративные приложения запускаются с маленьких частей, и затем они загнаны вместе. При разработке Вас, приложения являются таким путем, который может быть увеличен тогда, будет легче интегрироваться со всеми окружающими факторами как базы данных, сторонние инструменты и т.д., Если Вы войдете infoq.com , Вы найдете много большого случая исследований и материалов о масштабировании и архитектуре как MySpace, Amazon и многие другие. Только опыт приведет Вас к разработке больших крупных приложений.

4
ответ дан S.Lott 28 November 2019 в 02:36
поделиться

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

Решите, что вам нужно, чтобы построить и построить это.

Разбейте его на модули, которые выполняют задачи отдельно.

План план план план, знать, что вы строите, прежде чем начать, и построить это и ничего больше.

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

3
ответ дан Omar Kooheji 28 November 2019 в 02:36
поделиться

Действительно интересно отметить, сколько из этих комментариев говорят, что слепая итерация - единственный путь.

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

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

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

Единственное, в этом нет профессиональных программных игр - возможно, если бы они были, мы бы увидели их немного больше.

3
ответ дан Bill K 28 November 2019 в 02:36
поделиться

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

0
ответ дан Danmaxis 28 November 2019 в 02:36
поделиться

Как кто-то отвечающий за крупное приложение я сказал бы

  • Использование, неразрушающая платформа, такая как Spring
  • Уменьшает связь
  • , Создают неизменные объекты везде, где возможный - они благоприятны для потока
  • , Принимают то Ваше заявление, возможно, должен был бы быть разделен на отдельные процессы, чтобы масштабироваться лучше и запланировать это.
  • Сборка твердый комплект инструментальных средств и изучают инструменты.

не ПАНИКУЮТ

0
ответ дан Fortyrunner 28 November 2019 в 02:36
поделиться

Некоторые мысли о продукте и зависимости от поставщика:

  • Попытка быть как поставщик и независим от платформы как возможный. Это будет препятствовать тому, чтобы Вы имели для перереализации всего с нуля с новым продуктом/платформой/платформой и т.д.
  • , Это практически означает использовать Java SE + Java EE + и RDBMS с открытым исходным кодом как PostgreSQL, инкапсулировавший JPA от Java EE. Не пользуйтесь дополнительными библиотеками, платформы (пружина, будьте в спящем режиме...), и т.д. Таким образом, можно переключить продукты и поставщиков любое время, в котором Вы требуетесь.
  • я думаю, что можно только получить этот уровень продукта - и независимость от платформы с Java. Даже если Вы будете пользоваться библиотеками OSS и платформами, то Вы будете сожалеть, что использовали их, если Вы узнаете, что реализация не удовлетворяет Вашим потребностям, и необходимо восстановить все.
  • можно проверить независимость продукта кода с Набор Проверки JAVA-приложения .
  • Проводят некоторое время на Архитектуре заранее, но также и перепроектируют Архитектуру в течение реализации. Хорошая книга (к сожалению, только немецкий язык) является "Java EE 5 Architekturen" Adam Bien.

@j_random_hacker: На самом деле нет - я все еще думаю, что моя первая точка является аргументом в пользу использования Java в крупных приложениях, не против него. Каждый язык является ОДНИМ языком. Таким образом, всегда необходимо делать приверженность языку, конечно.

  • , Но Java SE & EE включает язык, компилятор, виртуальную машину, а также все необходимые библиотеки/платформы. Но существуют различные РЕАЛИЗАЦИИ целой Java платформа SE/EE: Java SE (JDK) от Sun, Apache, IBM, HP, Oracle, BEA. Java EE (Сервер приложений) от Sun, Apache, Red Hat, IBM, Oracle и других. .NET с C# действительно только имеет одну реализацию (от Microsoft и реализации несколько подобного языка/платформы под названием Моно).
  • PHP также имеет только одну реализацию, я думаю. Существует много различных компиляторов C++. Но они все реализуют немного отличающийся C ++-languages, и они не связываются библиотеками кто вся доля тот же API. Выбор Java, я знаю, что могу принять решение между полдюжиной реализаций Java SE и полдюжиной Серверов JAVA EE-приложения запустить программное обеспечение, которые в свою очередь работают на Linux, Солярисе, FreeBSD, HP-UX, IBM z/OS, Windows, Mac OS X и на очень большом множестве аппаратных платформ. Таким образом, я просто не должен волноваться, если бы я нахожу действительно плохую проблему реализации поздно в разработке или даже в производстве - я просто убежал бы от Sun и никогда не буду оглядываться назад. (Поэтому я рекомендовал Набор Проверки JAVA-приложения. Путем проверки источника с ним можно быть уверены, что Sun, IBM, Oracle или любая другая злая компания не стащили ни одного их собственного материала как зависимости в источник, который мог связать Вас с той компанией. Вы свободны как птица.)
  • Вы не можете сделать этого с PHP или Ruby. С теми языками необходимо было бы исправить проблему реализации собой, если никто больше не делает это, потому что пребывание в течение месяцев времени исправления ошибки в PHP или Ruby является еще меньшим усилием, чем перезапись Вашего законченного приложения.
  • Sun имеет открытый полученный оба: Java SE (полный JDK) и Java EE (сервер приложений Glassfish). Единственная вещь, которая не является "открытым исходным кодом", состоит в том, что существует обязательная спецификация языка, которая является во главе с солнцем и получает крупные вклады другими. Поэтому Вы можете захватить реализацию Java от солнца, изменить язык Java и перераспределить тот источник и двоичные файлы, но не можете больше называть тот "Java", если это не соответствует спецификации языка (Sun защищает Товарный знак Java, который только будет применен к вещам на самом деле Java). Это могло бы звучать "злым" сначала, но это на самом деле удостоверяется, что существует такая вещь как "Java": можно записать JAVA-приложение и выполнить его на любой реализации Java. Вы не можете сделать этого с C++, поскольку нет никакой спецификации C++, которая согласована каждой реализацией C++ (исходный код мог бы скомпилировать с компилятором Intel C ++, но не с GNU один), и - что еще более важно - нет никакой общей библиотеки: если я запишу программу C++ с библиотекой QT, то она не скомпилирует с библиотекой GTK, поскольку у них есть совершенно другие API.
  • , Если Вы не можете выдержать что-нибудь Sun Microsystems, но хотите Java с открытым исходным кодом, чем Вы, может просто использовать Гармония Apache (Java SE) с Apache Geronimo (Java EE) сверху его.
-2
ответ дан SAL9000 28 November 2019 в 02:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: