Как обещал сегодня на стриме, выкладываю пост из закрытого чата для
CODE BRO о том, что нужно знать junior .net-developer
1. Основные принципы работы .net clr, il и jit в том числе.
2. Основные структурные составляющие и зачем они нужны (классы, структуры, свойства, поля, методы, события, делегаты)
3. Уметь писать код и работать с visual studio
4. Зать типы примитивные типы данные и популярные типы FCL. Обязательно знание различий ссылочных и значимых типов (соответственно стек и куча тоже нужны)
5. Знать операторы (математические, логические, бинарные, унарные, побитовые)
6. Уметь приводить типы данных (апкаст, даункаст)
7. Условные операторы (if/else, switch/case, быстрая проверка)
8. Циклы (for, while, do/while, foreach, break, continue)
9. Коллекции (array, list<t>, dictionary<t, tt>, queue<t>, stack<t> - и обязательно иметь представление о соответствующих структурах данных. хеш-таблица и как она работает, очередь, стек, связный список и чем list отличается от linkedlist)
10. Методы (передача по ссылке и по значению, ref, out, params, return, рекурсия)
11. Перечисления enum и зачем они нужны, const и readonly переменные
12. ООП во всей красе. Знать и понимать парадигмы (инкапсуляция, наследование, полиморфизм), модификаторы доступа (public, internal, protected, private), перегрузка методов, статические методы и поля, абстрактные классы, интерфейсы и их различия, переопределения методов, пространства имен.
13. обобщенные типы (дженерики)
14. Исключительные ситуации, их отлавливание и обработка (throw, try/catch/finally), создание своего типа исключения. порядок блоков catch, как правильно пробрасывать исключение
15. Иметь приблизительное понимание, что такое делегаты, уметь работать с событиями, уметь писать лямбда-выражения, знать action, func, predicate
16. Методы расширения
17. Чтение и запись в файлы, сериализация и десериализация, типы файлов binary, xml, json, хорошо уметь работать с gzipstream, уметь писать безопасную работу с файлами (и через try/catch, и через using)
18. Знать про сборщик мусора GC, о трех поколениях и как они работают. уметь в ручную вызвать сборку мусора.
19. Знать о существовании типа dynamic и почему его лучше не использовать
20. Знать что такое сборка и домен
21. Иметь хотя бы общие представление о парралельном и асинхронном программировании. Уметь работать с thread, async/await
22. Знать что такое отражение/рефлексия. Знать что такое атрибуты, зачем они нужны и уметь использовать существующие
23. Хорошо знать linq и его методы.
24. Знать что такое домен приложения
25. Знать что такое ленивая загрузка
26. Знать основы баз данных, основные команды (insert, update, delete, select, join), знать что такое индексы и зачем они нужны (часто спрашивают различие кластерного и некластерного индекса)
27. Если web, то обязательно html, css, js. Знать про блочную верстку, уметь отцентровать элемент по вертикали и горизонтали, обновить значение в поле
28. Знать про модульные тесты и уметь их писать. Черный и белый ящик.
29. умение работать с системами контроля версий (git чаще всего)
30. Иметь общее представление об agile/scrum. Хорошо, если работал с jira, но не принципиально