Проект, который я советую каждому разработчику сделать хотя бы раз, написать свой парсер JSON, который превращает строку в нативный объект языка, например словарь.
Формат JSON настолько привычен, что мы просто пользуемся готовыми парсерами и редко задумываемся, как они устроены внутри. Вот основные шаги, если хочешь собрать такой парсер с нуля:
Разобраться со спецификацией JSON.
Написать токенайзер, который выделяет токены из строки (можно использовать Lex).
Определить грамматику JSON по спецификации с помощью Yacc.
Реализовать обработку ошибок, красивый вывод и указание позиции ошибки в строке.
Собрать нативный объект языка — словарь, hashmap и т.д.
Прогнать реализацию на тестах, чтобы убедиться в корректности.
Если хочешь усложнить задачу — не используй Lex и Yacc, а напиши токенайзер и парсер полностью вручную, специально под JSON, без универсальности.
Сделав такой проект, ты не только поймёшь, как работает JSON, но и:
почему его парсинг считается относительно медленным и затратным
как устроена стадия парсинга в любом компиляторе
насколько всё это интересно, если копнуть глубже
Этот проект реально прокачает твои навыки решения задач. Если решишься, то желаю удачи!
👉 Java Portal
Формат JSON настолько привычен, что мы просто пользуемся готовыми парсерами и редко задумываемся, как они устроены внутри. Вот основные шаги, если хочешь собрать такой парсер с нуля:
Разобраться со спецификацией JSON.
Написать токенайзер, который выделяет токены из строки (можно использовать Lex).
Определить грамматику JSON по спецификации с помощью Yacc.
Реализовать обработку ошибок, красивый вывод и указание позиции ошибки в строке.
Собрать нативный объект языка — словарь, hashmap и т.д.
Прогнать реализацию на тестах, чтобы убедиться в корректности.
Если хочешь усложнить задачу — не используй Lex и Yacc, а напиши токенайзер и парсер полностью вручную, специально под JSON, без универсальности.
Сделав такой проект, ты не только поймёшь, как работает JSON, но и:
почему его парсинг считается относительно медленным и затратным
как устроена стадия парсинга в любом компиляторе
насколько всё это интересно, если копнуть глубже
Этот проект реально прокачает твои навыки решения задач. Если решишься, то желаю удачи!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10😁5💊2
Большинство разработчиков пользуются всего парой Git команд.
Вот еще 15, которые сэкономят вам кучу времени.
👉 Java Portal
Вот еще 15, которые сэкономят вам кучу времени.
git stash → Сохранить работу без коммита. Можно прыгать по веткам, не теряя правки.
git reflog → Находит потерянные коммиты. Спасательный круг, если что-то пошло не так с git reset.
git bisect → Двоичный поиск по коммитам, чтобы вычислить баг. Гораздо быстрее ручной проверки.
git rebase -i → Причесывает историю перед пушем. Сквош, перестановка или правка коммитов.
git cherry-pick → Применяет нужные коммиты в другую ветку. Без полноценного merge.
git diff --staged → Показывает, что именно пойдет в коммит. Помогает поймать косяки заранее.
git commit --amend → Поправить последний коммит или добавить забытые файлы.
git reset HEAD~1 → Откатывает последний коммит, но оставляет изменения. Начинаешь заново, ничего не теряя.
git clean -fd → Удаляет все неотслеживаемые файлы и папки. Полная очистка, когда нужно начать на чистую.
git log --oneline --graph → Компактная визуализация истории. Ветки и слияния видно как на ладони.
git blame → Показывает, кто и когда писал каждую строку. Удобно искать момент появления бага.
git show → Детальная инфа по любому коммиту. И изменения, и метаданные.
git remote -v → Список всех удаленных репозиториев. Полезно, чтобы проверить, куда вы пушите.
git fetch --prune → Обновляет информацию о ремоутах и удаляет устаревшие ветки.
git diff branch1..branch2 → Сравнивает две ветки. Видно, что именно в них различается.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6❤5