Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Опять завалил собеседование
|
|||
|---|---|---|---|
|
#18+
Специализируюсь на разработке архитектуры, ООП, юзаю Qt. Когда прихожу на собеседование на вакансию с++, по части ООП не спрашивают кроме того баянистого примера с переменной массива в классе и отсутствием конструктором копирования. На ООП всем насррать. Спрашивают про оптимизацию при работе с контейнерами STL. 1)Какую книгу прочитать, где достаточно полно описаны аспекты оптимизации при работе с STL? 2)Не люблю возиться с оптимизацией. Может следует отказаться от карьеры разработчика с++? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2014, 11:03 |
|
||
|
Опять завалил собеседование
|
|||
|---|---|---|---|
|
#18+
cucaracha2014, начни с этого: эффективное использование stl ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2014, 11:15 |
|
||
|
Опять завалил собеседование
|
|||
|---|---|---|---|
|
#18+
egorych, спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2014, 11:28 |
|
||
|
Опять завалил собеседование
|
|||
|---|---|---|---|
|
#18+
1)Какую книгу прочитать, где достаточно полно описаны аспекты оптимизации при работе с STL? меерс, effective stl 2)Не люблю возиться с оптимизацией. Может следует отказаться от карьеры разработчика ну, в общем да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2014, 12:59 |
|
||
|
Опять завалил собеседование
|
|||
|---|---|---|---|
|
#18+
Добавлю, что я ТОЖЕ не люблю возиться с оптимизацией. И не нужно этим вообще заниматься, нужно сразу пытаться писать код с оглядкой на производительность. Только это не заключается в подсчёте IF-ов и WHILE-ов, а в знании стоимостей операций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2014, 13:32 |
|
||
|
Опять завалил собеседование
|
|||
|---|---|---|---|
|
#18+
egorychcucaracha2014, начни с этого: эффективное использование stl Ну, собственно, этим можно и закончить, потому что чтение этой книги вполне достаточно для того, чтобы вправить мозги по этой теме раз и навсегда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2014, 13:33 |
|
||
|
Опять завалил собеседование
|
|||
|---|---|---|---|
|
#18+
MasterZiv, благодарю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2014, 17:13 |
|
||
|
Опять завалил собеседование
|
|||
|---|---|---|---|
|
#18+
MasterZivДобавлю, что я ТОЖЕ не люблю возиться с оптимизацией. нужно сразу пытаться писать код с оглядкой на производительность. а это не одно и то же? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2014, 17:14 |
|
||
|
Опять завалил собеседование
|
|||
|---|---|---|---|
|
#18+
cucaracha2014MasterZivДобавлю, что я ТОЖЕ не люблю возиться с оптимизацией. нужно сразу пытаться писать код с оглядкой на производительность. а это не одно и то же? Нет. Одно дело синтетические тесты во время разработки, другое - тормоза у юзера в реале из-за непредвиденных объемов данных или непредвиденного способа использования ПО. Сразу все предвидеть невозможно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2014, 20:13 |
|
||
|
Опять завалил собеседование
|
|||
|---|---|---|---|
|
#18+
Dima T, Сразу всё можно предвидеть на 80%, а это уже неплохо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2014, 22:24 |
|
||
|
Опять завалил собеседование
|
|||
|---|---|---|---|
|
#18+
MasterZivDima T, Сразу всё можно предвидеть на 80%, а это уже неплохо. Верно, я про оставшиеся 20%, их приходится переписывать. Хотя чем больше предвидишь, тем меньше потом переписывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2014, 22:31 |
|
||
|
Опять завалил собеседование
|
|||
|---|---|---|---|
|
#18+
А еще бывает что для оптимизации ты специально везде писал Код: plaintext 1. а потом в 2011 году оказалось что Код: plaintext 1. все равно быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2014, 23:30 |
|
||
|
Опять завалил собеседование
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, да ладно, это мелочи... однако ты бы поделился опытом, в отдельном топике... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2014, 11:40 |
|
||
|
Опять завалил собеседование
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyА еще бывает что для оптимизации ты специально везде писал Код: plaintext 1. а потом в 2011 году оказалось что Код: plaintext 1. все равно быстрее. почему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2014, 07:23 |
|
||
|
Опять завалил собеседование
|
|||
|---|---|---|---|
|
#18+
MasterZivв отдельном топике. лень :) alex_kпочему? Потому что, если нам надо сохранить строку, то имея const std::string& мы ее можем только скопировать, а имея std::string мы можем перенести ее содержимое без копирования. Для строк это не сильно заметно, т.к. многие реализации строк имеют copy-on-write(COW). А например с объектами, где нет COW, ускорение при отказе от конст. ссылок может быть в разы. Но естественно, будет ли ускорение зависит от алгоритма. Во многих случаях конст. ссылки быстрее. Но суть в том что эта зависимость неочевидна, т.к. опирается на многие факторы, такие как инлайн-функции, выведение типов, RVO, rvalue-ссылки, std::move. Поэтому программист заменяя значения ссылками фактически гадает, а не оптимизирует. Хотя конечно в большинстве случаев угадывает :) В качестве бонуса привожу код, в котором при замене типа аргумента с конст. ссылки на значение (в остальном код одинаковый), происходит ускорение с 3.6 сек до 2.18 сек, т.е. в 1.65 раз. (Linux x64, G++ 4.8.2, -O2) (Расход памяти 1ГБ) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2014, 10:42 |
|
||
|
Опять завалил собеседование
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, Это камень в огород C++. Еще одна причина почему C++ неможет быть системным языком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2014, 17:03 |
|
||
|
Опять завалил собеседование
|
|||
|---|---|---|---|
|
#18+
c++ конечно сакс и маздай, но ничего лучше долгое время не было. и все же: авторПотому что, если нам надо сохранить строку, то имея const std::string& мы ее можем только скопировать, а имея std::string мы можем перенести ее содержимое без копирования. Что значит "перенести(1) ее содержимое без копирования(2)" ведь (1) взаимоисключает 2. Не пойму. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2014, 18:02 |
|
||
|
Опять завалил собеседование
|
|||
|---|---|---|---|
|
#18+
chabapok, теперь есть move constructor, и xvalue и stl контейнеры, видать, все это хорошо кушают :) но это частный случай, который не говорит против передачи параметров по ссылкам, а говорит в пользу более тщательного изучения нового стандарта :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2014, 18:25 |
|
||
|
Опять завалил собеседование
|
|||
|---|---|---|---|
|
#18+
OoCcЭто камень в огород C++. Еще одна причина почему C++ неможет быть системным языком Это не является причиной почему C++ не может быть системным языком. И С++ может быть системным языком. :) chabapokЧто значит "перенести(1) ее содержимое без копирования(2)" ведь (1) взаимоисключает 2. Не пойму. Большинство реализаций больших объектов держат данные в куче, а в самом объекте хранят только указатель на данные. Копирование - это создание второго экземпляра данных в куче с копированием всех данных. Перемещение- это копирование только указателя, а в исходном объекте указатель очищается, так что только новый объект указывает на эти данные. Это операция намного быстрее чем копирование. Так как перемещение меняет исходный объект, то оно не может быть применено к константным объектам или ссылкам на них. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2014, 18:30 |
|
||
|
Опять завалил собеседование
|
|||
|---|---|---|---|
|
#18+
Но ведь и до этих ваших std::move можно было просто скопировать указатель, без копирования кучи. Тот же std::string это делал совершенно спокойно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2014, 18:43 |
|
||
|
Опять завалил собеседование
|
|||
|---|---|---|---|
|
#18+
И вообще у вас тест некорректен, т.к. непонятно что с чем вы сравниваете - у вас в первом и втором вариантах на выходе, если я правильно понял, получаются разные данные. Там где move данных - у вас исходный обьект разрушается, а во втором случае нет. То есть вы сравниваете функционально разные процедуры. (если я правильно понял как оно работает) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2014, 18:53 |
|
||
|
Опять завалил собеседование
|
|||
|---|---|---|---|
|
#18+
В идеале бы universal reference: template<typename T> void add1(T&& s); Если уж C++11 (std::move, emplace_back(), ...), то и rvalue reference: авторtime = 3.1 sec time = 2.2 sec time = 2.2 sec time = 2.1 sec Anatoly Moskovsky Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2014, 19:10 |
|
||
|
Опять завалил собеседование
|
|||
|---|---|---|---|
|
#18+
А если уж C++03, то для производительности по другому делается. Через ссылку и своп - 240мс Через ссылку и копирование - 450мс Через передачу по значению с двойным копированием объекта - 640мс Получается в любом случае через ссылку больше возможностей к оптимизации :) авторtime = 0.35 sec time = 0.43 sec time = 0.64 sec time = 0.24 sec time = 0.45 sec time = 0.63 sec Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2014, 19:36 |
|
||
|
Опять завалил собеседование
|
|||
|---|---|---|---|
|
#18+
Вася Уткин, Я привел пример для const& - стандартной идиоме для передачи объектов в функции. Просто & не годится для временных объектов. chabapokИ вообще у вас тест некорректен, т.к. непонятно что с чем вы сравниваете - у вас в первом и втором вариантах на выходе, если я правильно понял, получаются разные данные. Там где move данных - у вас исходный обьект разрушается, а во втором случае нет В моем тесте исходный объект (gen_value()) разрушается в обоих случаях. Но со ссылкой это происходит медленнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.02.2014, 20:02 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=65&tid=2019710]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
15ms |
get forum data: |
3ms |
get page messages: |
73ms |
get tp. blocked users: |
1ms |
| others: | 15ms |
| total: | 182ms |

| 0 / 0 |
