|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
На днях ходил на встречу, где был заданы всего два вопроса: автор1) Что Вам не нравится в приведенном коде: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
автор2) Как организовать доступ к объекту (dict, из примера выше, надо поправить тело метода GetValue) несколькими потоками? Ответ на первый вопрос заключался в том, что вместо Код: c# 1. 2.
нужно использовать Код: c# 1. 2. 3.
Если честно, я всегда использовал 1й вариант и по 2му у меня какие-то сомнения возникли, я не понял выгоды, чем 1й вариант, хуже 2го. Написал небольшую утилиту чтобы проверить время выполнения первого и второго куска. В словарь было добавлено 40 млн записей, разницы в производительности никакой, вообще. Возможно на слабом железе что-то и проявится, но в моем случае поиск в обоих случаях выполняется за одинаковое кол-во временных единиц. Кто-то может объяснить преимущество одного варианта над другим? По второму вопросу ответ дам чуть позже, хочется услышать ваши решения. Я так же озвучу, какой вариант я предложил. Он был неправильным, мне сказали, что существует только одно решение задачи. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 12:59 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
ИМХО первый вариант от второго ничем не отличается. Два поиска key в dict Может правильно все-таки Код: c# 1. 2. 3.
так один поиск будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 13:12 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Dima TИМХО первый вариант от второго ничем не отличается. Два поиска key в dict Может правильно все-таки Код: c# 1. 2. 3.
так один поиск будет. да, value. Это очепятка, код тут набивал ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 13:13 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Супер_Пав, Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
как видишь, разница по сути 0вая, просто с TryGetValue код "удобочитамее". Но как по мне, пофигу вообще, не принципиально. хотя с учётом современных версий C# код должен выглядеть след. образом: Код: c# 1. 2.
+ если данный в многопоточной среде лучше не применять ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 13:14 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Вот результат поиска GetValueI start at:06-06-2017 10:14:26.330 Guid = 0df051e7-c221-468b-aca6-85f514a723dd GetValueI end at:06-06-2017 10:14:26.332 GetValueII start at:06-06-2017 10:14:26.333 Guid = 0df051e7-c221-468b-aca6-85f514a723dd GetValueII end at:06-06-2017 10:14:26.333 Continue test? (Y/N) :>Y GetValueI start at:06-06-2017 10:14:35.483 Guid = 9b88cf75-64fa-4297-98e8-00a85cf67863 GetValueI end at:06-06-2017 10:14:35.484 GetValueII start at:06-06-2017 10:14:35.484 Guid = 9b88cf75-64fa-4297-98e8-00a85cf67863 GetValueII end at:06-06-2017 10:14:35.484 Continue test? (Y/N) :>Y GetValueI start at:06-06-2017 10:14:36.459 Guid = 4b0b3251-32ad-4f94-857a-9185635aedbe GetValueI end at:06-06-2017 10:14:36.460 GetValueII start at:06-06-2017 10:14:36.460 Guid = 4b0b3251-32ad-4f94-857a-9185635aedbe GetValueII end at:06-06-2017 10:14:36.460 Continue test? (Y/N) :>Y GetValueI start at:06-06-2017 10:14:37.499 Guid = 40f25a6f-5e68-496d-9e68-b7aca8e02a71 GetValueI end at:06-06-2017 10:14:37.500 GetValueII start at:06-06-2017 10:14:37.500 Guid = 40f25a6f-5e68-496d-9e68-b7aca8e02a71 GetValueII end at:06-06-2017 10:14:37.501 Continue test? (Y/N) :>Y GetValueI start at:06-06-2017 10:14:38.620 Guid = 929bd12d-bd1f-4d8e-8d0a-1e87e981c14b GetValueI end at:06-06-2017 10:14:38.621 GetValueII start at:06-06-2017 10:14:38.622 Guid = 929bd12d-bd1f-4d8e-8d0a-1e87e981c14b GetValueII end at:06-06-2017 10:14:38.623 Continue test? (Y/N) :>Y GetValueI start at:06-06-2017 10:14:39.445 Guid = 53144be1-66f3-4266-bcda-9fb7acb00086 GetValueI end at:06-06-2017 10:14:39.446 GetValueII start at:06-06-2017 10:14:39.448 Guid = 53144be1-66f3-4266-bcda-9fb7acb00086 GetValueII end at:06-06-2017 10:14:39.448 Continue test? (Y/N) :>Y GetValueI start at:06-06-2017 10:14:40.630 Guid = 061bcf94-3bdb-4fc8-b100-2220f0c8547f GetValueI end at:06-06-2017 10:14:40.631 GetValueII start at:06-06-2017 10:14:40.632 Guid = 061bcf94-3bdb-4fc8-b100-2220f0c8547f GetValueII end at:06-06-2017 10:14:40.632 Continue test? (Y/N) :>Y GetValueI start at:06-06-2017 10:15:16.180 Guid = 07587b42-2937-4d01-afbb-27efa1f61059 GetValueI end at:06-06-2017 10:15:16.180 GetValueII start at:06-06-2017 10:15:16.181 Guid = 07587b42-2937-4d01-afbb-27efa1f61059 GetValueII end at:06-06-2017 10:15:16.182 Continue test? (Y/N) :>N Press Enter GetValueI - это первый вариант поиска, GetValueII - это второй. Как видно, разницы нет ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 13:17 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Супер_Пававтор2) Как организовать доступ к объекту (dict, из примера выше, надо поправить тело метода GetValue) несколькими потоками? Блокировкой Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 13:19 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Roman Mejtesудобочитамее по мне, так дело вкуса. Мне больше первый вариант нравится: проверил, выполнил. Во втором случает лишняя переменная появляется. Имхо, дело вкуса. Я просто под небольшим впечатлением от того, что мне говорили, мол второй вариант лучше. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 13:21 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Dima TСупер_Павпропущено... Блокировкой Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Это был мой вариант. Блокировка им не понравилась. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 13:22 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
В первом варианте метод GetValue меняет состояние коллекции, что печально. Либо переназвать, либо не добавлять элемент в коллекцию ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 13:26 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Супер_ПавGetValueI - это первый вариант поиска, GetValueII - это второй. Как видно, разницы нет Кривой замер. Чтобы разницу заметить общее время теста должно быть хотя бы сотни миллисекунд, лучше несколько секунд. Также вопрос какие значения искались, если GetValue() вызывалось каждый с новым значением, т.е. происходило добавление, то разницы не будет. Как уже написал - разница в количестве поисков по dict Код: c# 1. 2.
Код: c# 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 13:26 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Dima TСупер_ПавGetValueI - это первый вариант поиска, GetValueII - это второй. Как видно, разницы нет Кривой замер. Чтобы разницу заметить общее время теста должно быть хотя бы сотни миллисекунд, лучше несколько секунд. Также вопрос какие значения искались, если GetValue() вызывалось каждый с новым значением, т.е. происходило добавление, то разницы не будет. Как уже написал - разница в количестве поисков по dict Код: c# 1. 2.
Код: c# 1. 2.
Разница понятна, но по мне, так оба варианта приемлемы. Не могу понять, зачем об этом спрашивать, коль 2 вариант правильные. GetValueI и GetValueII вызывались с одним ключом по разу, ключе менялся, снова был вызов. Я не вижу смысла менять замер, коль разницы нет, оба куска кода отрабатывают очень быстро. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 13:31 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
По поводу второго вопроса. lock забраковали, мол блокирует потоки. Единственное решение задачи - это класс ReaderWriterLockSlim ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 13:32 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Dima T, авторКак уже написал - разница в количестве поисков по dict дануна.... по кишкам имхо однохуйственно ( гляньте ктнонитьрефлекторм) первый имхо даже живее будет ? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 13:45 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Где-то в степиDima T, авторКак уже написал - разница в количестве поисков по dict дануна.... Кишки уже привели выше 20543115 в дополнение Код: c# 1. 2. 3. 4. 5.
два вызова FindEntry() для исходного кода и один для TryGetValue() ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 13:51 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Dima TГде-то в степиDima T, пропущено... дануна.... Кишки уже привели выше 20543115 в дополнение Код: c# 1. 2. 3. 4. 5.
два вызова FindEntry() для исходного кода и один для TryGetValue() Не могу понять Вас, вы просто объясняете различия или утверждаете, что второй способ лучше? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 13:55 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Супер_ПавDima Tпропущено... Кишки уже привели выше 20543115 в дополнение Код: c# 1. 2. 3. 4. 5.
два вызова FindEntry() для исходного кода и один для TryGetValue() Не могу понять Вас, вы просто объясняете различия или утверждаете, что второй способ лучше? Второй - быстрее, т.к. поиск (вызов FindEntry()) достаточно тяжелая операция. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 14:03 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Dima TСупер_Павпропущено... Не могу понять Вас, вы просто объясняете различия или утверждаете, что второй способ лучше? Второй - быстрее, т.к. поиск (вызов FindEntry()) достаточно тяжелая операция. А я утверждаю, что нет разницы. Проверил на 40 млн записях. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 14:05 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Dima T, тогда да, но надо смотреть чистый код, имхо в первом случае оптимизатор может порвать этот примитив на раз с двумя вызовами - хотя к делу мало относится. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 14:06 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Roman Mejtesпросто с TryGetValue код "удобочитамее" код с параметрами out - сомнительная удобночитаемость ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 14:31 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Супер_ПавDima Tпропущено... Второй - быстрее, т.к. поиск (вызов FindEntry()) достаточно тяжелая операция. А я утверждаю, что нет разницы. Проверил на 40 млн записях. Хреново ты проверял Исходник Код: c# 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.
Результат Код: plaintext 1. 2. 3. 4.
Второй вариант на 30% быстрее. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 14:38 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Если несколько потоков, то надо использовать ConcurrentDictionary https://msdn.microsoft.com/ru-ru/library/dd287191(v=vs.110).aspx ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 14:41 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Dima TСупер_Павпропущено... А я утверждаю, что нет разницы. Проверил на 40 млн записях. Хреново ты проверял Исходник Код: c# 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.
Результат Код: plaintext 1. 2. 3. 4.
Второй вариант на 30% быстрее. Хорош. Вы суммарное время работы со 100к элементов указали, разница в 1.5 секунды не впечатляет. А если сперва заполнить словари (о чем говорилось на собеседовании, было условие, что 99% записей существуют в словаре), то поиск не отличается. Код: c# 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. 68. 69.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 15:47 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Супер_ПавПо поводу второго вопроса. lock забраковали, мол блокирует потоки. Единственное решение задачи - это класс ReaderWriterLockSlim Блокирует не надолго, поэтому засомневался что тут поможет ReaderWriterLockSlim, RW блокировки на самом деле достаточно тормозные. Делал по примеру из хэлпа . Исходник Код: c# 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. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137.
Результат Код: plaintext 1. 2. 3. 4. 5. 6.
lock() на 20% быстрее оказался. И как правильно замечено выше: надо использовать ConcurrentDictionary(), но в той постановке вопроса это не разрешается. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 15:48 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Супер_ПавОтвет на первый вопрос заключался в том, что вместо Код: c# 1. 2.
нужно использовать Код: c# 1. 2. 3.
Молотком по пальцам таким собеседователям. Логика разная у кода, второй всегда что то вернет, как минимум default(Guid). ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 15:48 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Dima TСупер_ПавПо поводу второго вопроса. lock забраковали, мол блокирует потоки. Единственное решение задачи - это класс ReaderWriterLockSlim Блокирует не надолго, поэтому засомневался что тут поможет ReaderWriterLockSlim, RW блокировки на самом деле достаточно тормозные. Делал по примеру из хэлпа . Исходник Код: c# 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. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137.
Результат Код: plaintext 1. 2. 3. 4. 5. 6.
lock() на 20% быстрее оказался. И как правильно замечено выше: надо использовать ConcurrentDictionary(), но в той постановке вопроса это не разрешается. Ничего с потолка не взял. О чем сказали на собеседовании, то и привел. Я обычно забываю такие встречи, но тут прям сомнения закрались, что мне воду в уши льют. Удивило еще, что обошлись одним вопросом. Вакансию нашел в разделе Вакансии сего сайта ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 15:54 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Молотком по пальцам таким собеседователям. Супер_ПавПо поводу второго вопроса. lock забраковали, мол блокирует потоки. Единственное решение задачи - это класс ReaderWriterLockSlim А если один резво пишет, другие никогда не прочитают. Вообще каждый случай должен разбираться отдельно, но лучший вариант из коробки Cat2Если несколько потоков, то надо использовать ConcurrentDictionary https://msdn.microsoft.com/ru-ru/library/dd287191(v=vs.110).aspx ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 15:59 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Супер_Пав, 1. Метод GetValue(), который модифицирует коллекцию -- вот, что должно не нравиться в этом коде. GetOrAddValue() -- куда ни шло. Ну и TryGetValue() внутри, да. 2. Порочный вопрос. Нужно использовать ConcurrentDictionary, а не переизобретать колесо. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 16:02 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Супер_ПавХорош. Вы суммарное время работы со 100к элементов указали, разница в 1.5 секунды не впечатляет. А если сперва заполнить словари (о чем говорилось на собеседовании, было условие, что 99% записей существуют в словаре), то поиск не отличается. Внимательнее смотри. Основной цикл Код: c# 1. 2. 3. 4. 5.
словарь изначально пустой, в процессе работы наполняется 100к элементами, но итераций цикла 50 050к, т.е. в 99.8% случаев записи были найдены. Разницу надо не в секундах смотреть, а в процентах. Но не забывать погрешность таймера учитывать. Там 1 мс погрешность, поэтому твои замеры с результатом 0-2 мс это погрешность. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 16:07 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
НахлобучСупер_Пав, 1. Метод GetValue(), который модифицирует коллекцию -- вот, что должно не нравиться в этом коде. GetOrAddValue() -- куда ни шло. Ну и TryGetValue() внутри, да. 2. Порочный вопрос. Нужно использовать ConcurrentDictionary, а не переизобретать колесо. 1. Название метода не важно. 2. Потоки появились во втором вопросе, в первом случает вопрос был больше по поиску. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 16:07 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Супер_Пав1. Название метода не важно. Не о названии речь ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 16:09 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
автор1) Что Вам не нравится в приведенном коде: название метода ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 18:46 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
ЕвгенийВМолотком по пальцам таким собеседователям. Супер_ПавПо поводу второго вопроса. lock забраковали, мол блокирует потоки. Единственное решение задачи - это класс ReaderWriterLockSlim А если один резво пишет, другие никогда не прочитают. Вообще каждый случай должен разбираться отдельно, но лучший вариант из коробки Cat2Если несколько потоков, то надо использовать ConcurrentDictionary https://msdn.microsoft.com/ru-ru/library/dd287191(v=vs.110).aspx +1 ТС не расстраивайтесь, клоунада полнейшая. Очередные математеги, хорошо что про расчет цикломатической сложности неспрашивали. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 21:29 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Супер_ПавПо поводу второго вопроса. lock забраковали, мол блокирует потоки. Единственное решение задачи - это класс ReaderWriterLockSlim Если это единственное решение, то Вы походу нам условия задачи озвучили не полностью. Опустили важный момент :) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 23:16 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
skyANAСупер_ПавПо поводу второго вопроса. lock забраковали, мол блокирует потоки. Единственное решение задачи - это класс ReaderWriterLockSlim Если это единственное решение, то Вы походу нам условия задачи озвучили не полностью. Опустили важный момент :) я вообще не понял, вот этой фразы "блокируются потоки". Какие потоки и где блокируется. Типа при RWLS и ConcurentDictionary они не блокируются и все операции атомарны :) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 23:42 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Roman MejtesskyANAпропущено... Если это единственное решение, то Вы походу нам условия задачи озвучили не полностью. Опустили важный момент :) я вообще не понял, вот этой фразы "блокируются потоки". Какие потоки и где блокируется. Типа при RWLS и ConcurentDictionary они не блокируются и все операции атомарны :) В документации жеж все расписано... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 23:50 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Если коротко, то ReaderWriterLockSlim рекомендуется когда до фига чейтателей и один чукча :) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2017, 23:57 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Супер_ПавВакансию нашел в разделе Вакансии сего сайта А дайте тынц.. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2017, 00:04 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Здесь сравниваются обычный лок, ReadWriteLockSlim, ConcurrentDictionary в двух граничных ситуациях Mostly Misses/Mostly Hits. По результатам получается, что для "Mostly Misses" лучше обычный лок, а для "Mostly Hits" - ConcurrentDictionary. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2017, 00:25 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Супер_ПавПо поводу второго вопроса. lock забраковали, мол блокирует потоки. Единственное решение задачи - это класс ReaderWriterLockSlimReaderWriterLockSlim потоки не блокирует? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2017, 07:01 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Алексей КСупер_ПавПо поводу второго вопроса. lock забраковали, мол блокирует потоки. Единственное решение задачи - это класс ReaderWriterLockSlimReaderWriterLockSlim потоки не блокирует?если нет писателей, то не должен, вернее вероятность этого очень близка к нулю ЕвгенийВ, на одном проце разницы почти нет, ну а вообще на другом вдруг будет - потому идиологически, конечно, 2-й вариант правильнее я memorize в питоне вообще через обработку исключений делал и это было быстрее ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2017, 07:57 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
kealon(Ruslan)Алексей Кпропущено... ReaderWriterLockSlim потоки не блокирует? если нет писателей, то не должен, вернее вероятность этого очень близка к нулюЯ в курсе, только в утверждении не было никаких если. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2017, 09:13 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Алексей Кkealon(Ruslan)пропущено... если нет писателей, то не должен, вернее вероятность этого очень близка к нулюЯ в курсе, только в утверждении не было никаких если. А разве где-то выше утверждалось, что ReaderWriterLockSlim не блокирует потоки? :) Не тратьте время на домыслы... ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2017, 09:51 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
skyANAСупер_ПавВакансию нашел в разделе Вакансии сего сайта А дайте тынц.. тынц З.Ы. по поводу доп условия....ну если только, что 99% ключей, передаваемых в метод, существуют. Больше никаких. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2017, 10:24 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Все верно что не взяли. Судя по обсуждению, знания у соискателя слабые. Ну и что, что тестирование содержит провокационный вопрос? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2017, 10:42 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Супер_Павпо мне, так дело вкуса. Мне больше первый вариант нравится: проверил, выполнил. Во втором случает лишняя переменная появляется. так тебе эта переменная все равно нужна Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
или, кому религия запрещает больше одного return'а Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
а вообще, хорошая тема благодаря твоему собеседованию много для себя узнал у меня завтра очередное )) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2017, 10:59 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
yabsСупер_Павпо мне, так дело вкуса. Мне больше первый вариант нравится: проверил, выполнил. Во втором случает лишняя переменная появляется. так тебе эта переменная все равно нужна Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
или, кому религия запрещает больше одного return'а Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
а вообще, хорошая тема благодаря твоему собеседованию много для себя узнал у меня завтра очередное )) Собеседования вообще полезные мероприятия, иногда, что-то новое узнаешь =) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2017, 11:05 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
А что вам не нравиться в этом коде? Код: c# 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2017, 11:12 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
ЕвгенийВА что вам не нравиться в этом коде? Код: c# 1.
Если вопрос мне, то ничего против не имею. А что вам не нравится в? Код: c# 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2017, 11:17 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
ЕвгенийВА что вам не нравиться в этом коде? Код: c# 1.
Для того булевы придумали, чтобы на равенство не проверять. Кстати, я бы "зарезал" только за утверждение ТС1. Название метода не важно. И еще потребовал документировать заголовок в стиле Доксигена итп На практике это получается потом гораздо важнее говнокода внутри. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2017, 11:45 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
SiemarglЕвгенийВА что вам не нравиться в этом коде? Код: c# 1.
Для того булевы придумали, чтобы на равенство не проверять. Кстати, я бы "зарезал" только за утверждение ТС1. Название метода не важно. И еще потребовал документировать заголовок в стиле Доксигена итп На практике это получается потом гораздо важнее говнокода внутри. пытаетесь казаться умным? Название не важно было в приведенном примере. В тесте, который давали, имя метода было другое, какое, я не помню. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2017, 12:30 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Супер_ПавНазвание не важно было в приведенном примере. Вопрос был: "что вам не нравится в приведенном коде". Ответ: название метода не соответствует его действиям. Если бы было: "что вам не нравится, кроме названия", тогда ок ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2017, 12:41 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
PallarisСупер_ПавНазвание не важно было в приведенном примере. Вопрос был: "что вам не нравится в приведенном коде". Ответ: название метода не соответствует его действиям. Если бы было: "что вам не нравится, кроме названия", тогда ок Я буквально сразу указал на то, что названия метода в данном вопросе не играет роли. Но почему-то особо тугие пытаются казаться очень умными. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2017, 12:47 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Супер_ПавЯ буквально сразу указал на то, что названия метода в данном вопросе не играет роли. Ажно на второй странице. Ладно, пофиг тащемта ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2017, 12:50 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Супер_Пававтор1) Что Вам не нравится в приведенном коде: Код: c# 1.
Инициализация поля на самом деле будет осуществлена в конструкторе. Компилятор, видя такой код, переместит код инициализации во все конструкторы. Если конструкторов не один, а много и если иницииализируемых полей много, то это приведёт к распуханию кода. Конечно, это не имеет значения, если конструктор всего один. Но в общем случае, как завещал Рихтер, следует код инициализации выносить в конструктор, инициализирующий поля по умолчанию. А потом вызывать его из всех других конструкторов. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2017, 13:07 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
По поводу тормознутости ReaderWriterLockSlim не высказывался только ленивый. Уж сколько было тестов, замеров и бенчмарков, в которых наивный lock побивал его. Поэтому, имхо, работодатели не совсем правы, что это единственный вариант. Опять же, можно реализовать ручную блокировку (вернее, ожидание) на спинах, что будет быстрее лока (не всегда, но во многих случаях). Впрочем, это уже реализовано в ConcurrentDictionary, который тут уже предлагали. Вот в первую очередь его и взять. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2017, 13:15 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
petalvikОпять же, можно реализовать ручную блокировку (вернее, ожидание) на спинах, что будет быстрее лока (не всегда, но во многих случаях). lock() реализован на Critical Section , это комбинация спинлока и мутекса. Поэтому чистые спины будут чуть быстрее пока работающих потоков не станет больше чем ядер. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2017, 13:25 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Dima TpetalvikОпять же, можно реализовать ручную блокировку (вернее, ожидание) на спинах, что будет быстрее лока (не всегда, но во многих случаях). lock() реализован на Critical Section , это комбинация спинлока и мутекса. Поэтому чистые спины будут чуть быстрее пока работающих потоков не станет больше чем ядер. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Код: c# 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2017, 14:38 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
ЕвгенийВ, это к чему? Надо не IL-код смотреть, а реальную реализацию System.Threading.Monitor::Enter, какое WinAPI он вызывает. Не помню где я вычитал что критические секции используются, т.е. вызов EnterCriticalSection() Погуглил, возможно я ошибаюсь и тут просто игра слов, т.к. в документации критической секцией называют блок кода внутри lock() https://msdn.microsoft.com/ru-ru/library/system.threading.monitor(v=vs.110).aspx#CriticalSection The critical section Use the Enter and Exit methods to mark the beginning and end of a critical section. ... Не знаю можно ли считать достоверным источником, но вот что пишут https://stackoverflow.com/questions/14156349/critical-section-in-c-sharp Why you want to use WinAPI Critical section? In .NET there are class Monitor which encapsulates WinAPI Critical section – Hamlet Hakobyan ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2017, 15:14 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Супер_Пав, не читал тред. 1 очевидно трайгетвалью, но метод(public Guid GetValue(stringkey)) сам по себе убог так как семантически предполагает обязательное возвращение значения, так что совсем тру - просто дикт[] и падать при отсутствии, заодно лямбдой запишешь. 2 все кроме конкарентдикта не жизненно, возможно хотели услышать ридер райтер лок, но ни разу не встречал в проде чтоб он обгонял обычный лок, так что или конкарентдикт, или, как говорил солист группы Бредер...:) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2017, 16:34 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Dima T, Я тоже иногда вангую, но лучше прочитать документ из первых рук и посмотреть реальный код. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2017, 16:36 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Супер_Пав...я не понял выгоды, чем 1й вариант, хуже 2го ну там скорее всего возвращался валю и выгода довольно очевидная, а в последнем шарпе еще и пишется симпатично. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2017, 16:37 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
ЕвгенийВDima T, Я тоже иногда вангую, но лучше прочитать документ из первых рук и посмотреть реальный код. Собственно вот что там пишут авторMonitor is implemented as a "hybrid lock;" it has features of both a spin-lock and a kernel-based lock like a Mutex. The idea is that most locks are held only briefly, so it takes less time to simply spin-wait for the lock to be released, than it would to make a call into the kernel to block the thread. It is important not to waste CPU cycles spinning, so if the lock has not been acquired after a brief period of spinning, the implementation falls back to blocking in the kernel. Вот что пишут про критические секции https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms682530(v=vs.85).aspx A thread uses the InitializeCriticalSectionAndSpinCount or SetCriticalSectionSpinCount function to specify a spin count for the critical section object. Spinning means that when a thread tries to acquire a critical section that is locked, the thread enters a loop, checks to see if the lock is released, and if the lock is not released, the thread goes to sleep. Тот же самый подход: некоторое количество спинлоков затем освобождение проца, если установить блокировку не удалось. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2017, 17:06 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
PallarisСупер_ПавНазвание не важно было в приведенном примере. Вопрос был: "что вам не нравится в приведенном коде". Ответ: название метода не соответствует его действиям. Какие мелочи. А если метод назвать GetUniqueValue вам всё нравится? А если метод называется GetValue и принадлежит классу UniqueValueFactory ? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2017, 17:43 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
mikronА если метод назвать GetUniqueValue вам всё нравится? А если метод называется GetValue и принадлежит классу UniqueValueFactory ? 1. Нет 2. Нет ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2017, 18:37 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
ЕвгенийВА что вам не нравиться в этом коде? Код: c# 1.
Я от него наоборот тащусь )) И чтобы два раза не вставать товарищу, который против сравнения с false, отвечу На мой взгляд восклицательный знак в начале очень легко не заметить, поэтому я пишу так ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2017, 22:31 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
yabsНа мой взгляд восклицательный знак в начале очень легко не заметить, поэтому я пишу тактогда лайфхак: пиши !=true - так еще заметнее ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2017, 22:47 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
petalvikСупер_Павпропущено... Код: c# 1.
Инициализация поля на самом деле будет осуществлена в конструкторе. Компилятор, видя такой код, переместит код инициализации во все конструкторы. Если конструкторов не один, а много и если иницииализируемых полей много, то это приведёт к распуханию кода. Конечно, это не имеет значения, если конструктор всего один. Но в общем случае, как завещал Рихтер, следует код инициализации выносить в конструктор, инициализирующий поля по умолчанию. А потом вызывать его из всех других конструкторов.Отключать "инлайнинг" методов Рихтер тоже завещал? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2017, 05:52 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
НахлобучМетод GetValue(), который модифицирует коллекцию -- вот, что должно не нравиться в этом коде +1 НахлобучНужно использовать ConcurrentDictionary +1, но он потормознее ИМХО варианта с lock Супер_ПавЕдинственное решение задачи - это класс ReaderWriterLockSlim Это будет верно только если а) многопоточные обращения к методу действительно интенсивные б) обращения в основном читающие, и изредка пишущие. В вашем случае одновременно проводится и чтение и запись, в таком случае lock по любому будет выстрее ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2017, 11:21 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Arm79+1, но он потормознее ИМХО варианта с lock Не заморачивались бы с ним тогда. Кстати ConcurrentDictionary использует lock внутри но лочит только часть данных, которые удовлетворяют значению хеша. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2017, 11:51 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
if (condition == false), с точки зрения получаемого кода, после оптимизации, вряд ли будет чем то отличаться от if (!condition) Denis. все кроме конкарентдикта не жизненно, возможно хотели услышать ридер райтер лок, но ни разу не встречал в проде чтоб он обгонял обычный лок, так что или конкарентдикт, или, как говорил солист группы Бредер...:) всё зависит от задачи, если операции очень короткие, то будет медленее, если операции чтения и записи длительные, то будет лучше. этот как и с Parallels, далеко не всегда будет прирост, а если операция очень короткая, будет только тормознее. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2017, 12:23 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Arm79НахлобучНужно использовать ConcurrentDictionary +1, но он потормознее ИМХО варианта с lock Я намерил в 2+ раза побыстрее 20543813 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2017, 12:38 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Dima TArm79пропущено... +1, но он потормознее ИМХО варианта с lock Я намерил в 2+ раза побыстрее 20543813 Сценарии для ReaderWriterLockSlim - один пишет, 100500 читают! ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2017, 12:47 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
ЕвгенийВDima Tпропущено... Я намерил в 2+ раза побыстрее 20543813 Сценарии для ReaderWriterLockSlim - один пишет, 100500 читают! ReaderWriterLockSlim там тоже был в замере. Тормознее всех оказался. Проблема одной общей блокировки в том что идет постоянное перекидывание кэш-линии проца между разными ядрами, в итоге тормоза. Тут замерял 20429620 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2017, 13:02 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Dima TArm79пропущено... +1, но он потормознее ИМХО варианта с lock Я намерил в 2+ раза побыстрее 20543813 ' Сколько там потоков для теста?)))) 100? Да, в условиях большого количества потоков по любому ConcurrentDictionary получше будет за счет снижения блокировок. Но там прикладная логика, которая будет неактуальна, когда потоков всего 2-3. Lock построен на критической секции, и в условиях отсутствия конкуренции за ресурсы практически ничего не стоит. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2017, 14:17 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Arm79Dima Tпропущено... Я намерил в 2+ раза побыстрее 20543813 ' Сколько там потоков для теста?)))) 100? Да, в условиях большого количества потоков по любому ConcurrentDictionary получше будет за счет снижения блокировок. Но там прикладная логика, которая будет неактуальна, когда потоков всего 2-3. Lock построен на критической секции, и в условиях отсутствия конкуренции за ресурсы практически ничего не стоит. 3 потока. В исходник под спойлером можно было заглянуть Код: c# 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2017, 14:31 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Как уже выше написали ЕвгенийВКстати ConcurrentDictionary использует lock внутри но лочит только часть данных, которые удовлетворяют значению хеша. За счет этого он быстрее, т.к. это тот же lock() но на часть данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2017, 14:40 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Dima T3 потока. В исходник под спойлером можно было заглянуть Точно, недосмотрел. Увидел краем глаза j += 100 и поспешил ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2017, 15:11 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Программирование потому и является искусством, по крайней мере пока, что нет четких правил, когда что применять нужно. К решению ведет тысяча путей, но надо выбрать лучший. Ну хотя бы не худший. Насчет того, что потенциальные работодатели считали лучшим решением использование ReadWriteLockSlim. Это часто бывает. Кто-то однажды решил частную задачу красивым способом и горд им. Те, кто решает ее не так - лохи. Только вот все меняется с бешеной скоростью. Вчерашнее отличное решение для Windows XP становится отстоем на вин 10-64 со 128 гигов оперативы и 16 ядерным процессором. Ну, вчерашнее - это для меня. Для кого-то XP - глубокая древность =================== И еще одно мое мнение. Если алгоритм не удается надежно реализовать - надо менять алгоритм. Если нет хорошего решения с использованием Словаря - надо искать решение без Словаря ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2017, 21:11 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Cat2Для кого-то XP - глубокая древность Суровая реальность. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2017, 05:18 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Алексей КCat2Для кого-то XP - глубокая древность Суровая реальность. Ты еще счастливчик! Тут парни на .NET делают ПО для управления своими железками. Там реально покоцанный Linux и скудные возможности по вычислительным ресурсам и памяти. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2017, 10:30 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Cat2Насчет того, что потенциальные работодатели считали лучшим решением использование ReadWriteLockSlim. Если обладать знанием и опытом, то можно обрисовать многопоточные сценарии, когда они окажутся правы, когда нет. Рассказать про возможные альтернативы и т. д. Но знание увеличивает грусть. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2017, 10:34 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
Алексей КCat2Для кого-то XP - глубокая древность Суровая реальность. светлое будущее! ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2017, 11:40 |
|
Впечатления от собеседования (связано с .Net)
|
|||
---|---|---|---|
#18+
ЕвгенийВЯ намерил в 2+ раза побыстрее 20543813 Сценарии для ReaderWriterLockSlim - один пишет, 100500 читают![/quot] И когда код, находящийся под локом, выполняется существенно дольше, чем вызов Enter/Exit ReadLock ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2017, 11:52 |
|
|
start [/forum/topic.php?all=1&fid=20&tid=1399861]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
161ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
120ms |
get tp. blocked users: |
1ms |
others: | 292ms |
total: | 617ms |
0 / 0 |