Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
книги хакеры / Питер_Гудлиф_Ремесло_программиста_Практика_написания_хорошего_кода.pdf
Скачиваний:
16
Добавлен:
19.04.2024
Размер:
9.23 Mб
Скачать

 

 

 

 

hang

e

 

 

 

 

 

 

C

 

E

 

 

 

X

 

 

 

 

 

-

 

 

 

 

 

d

 

F

 

 

 

 

 

 

t

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

to

 

 

 

 

w Click

 

 

 

292m

 

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

.

 

 

 

 

 

.c

 

 

p

 

 

 

 

g

 

 

 

 

df

 

 

n

e

 

 

 

 

-xcha

 

 

 

См. также

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

Глава 11. Жажда скоростиClick

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Глава 1. Держим оборону

Оптимизации, удаляющие «лишний» код, часто входят в конфликт с дополнительным защитным кодом.

Глава 4. Литературоведение

Оптимизация кода часто противоречит особенностям самодокумен% тируемого кода.

Глава 13. Важность проектирования

Высокая производительность должна закладываться в код с само% го начала проекта.

Глава 19. Спецификации

Требования к производительности должны быть тщательно опреде% лены до того, как начнется разработка, чтобы было понятно, в ка% ком объеме может потребоваться оптимизация.

Контрольные вопросы

Подробное обсуждение этих вопросов можно найти в разделе «Ответы и обсуждение» на стр. 633.

Вопросы для размышления

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

2.Посмотрите на альтернативы оптимизации, перечисленные в разде% ле «Доводы против оптимизации» на стр. 271. Опишите, допуска%

ются ли при этом компромиссы, и если да, то какие.

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

Контрольныеm

вопросы

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

293Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

3.Объясните значение следующих терминов и связь между ними:

Производительность (Performance)

Эффективность (Efficiency)

Оптимизированность (Optimized)

4.Какие наиболее вероятные узкие места могут быть в медленно рабо% тающей программе?

5.Как устранить необходимость в оптимизации? Какие методы позво% ляют избежать появления неэффективного кода?

6.Как влияет на оптимизацию наличие нескольких потоков?

7.Почему мы пишем неэффективный код? Главное, что мешает нам сразу воспользоваться высокопроизводительными алгоритмами?

8.Тип данных List реализован с помощью массива. Какова будет алго% ритмическая сложность следующих методов List в худшем случае? a. Конструктор

b. append – добавление нового элемента в конец списка

c. insert – вставка нового элемента в заданном месте между двумя существующими элементами

d. isEmpty – возвращает true, если в списке нет элементов

e. contains – возвращает true, если в списке есть указанный элемент f. get – возвращает элемент с указанным индексом

Вопросы личного характера

1.Насколько важна производительность кода в проекте, над которым вы работаете в данное время (только честно)? Чем обусловлено дан% ное требование к производительности?

2.Когда вы последний раз проводили оптимизацию:

a.Применяли ли профайлер?

b.Если да, какой прирост эффективности он показал?

c.Если нет, как вы выяснили, было ли достигнуто улучшение?

d.Проверили ли вы работоспособность кода после проведенной оп% тимизации?

e.Если да, насколько тщательно вы провели тестирование?

f.Если нет, то почему? Можете ли вы быть уверены, что код по% прежнему правильно работает во всех случаях?

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

4.В какой степени заданы требования к производительности вашей программы? Есть ли у вас конкретный план проверки того, что ваш

код удовлетворяет этим критериям?