предисловие
Я не могу вспомнить, сколько читателей спрашивали:
Блогер, как ты узнал? Есть дельный совет для такой ситуации, как моя?
Не знаю, когда я на самом деле стал лайф-коучем. Конечно, я не исключаю этих вопросов, и общение с вами — это процесс обучения.
Поэтому, может быть, Нуо подготовит статью по обучению, так эта статья готовилась давно, и объем относительно большой, все терпеливо ее читают и надеются что-то почерпнуть.
Следующий контент представляет собой только соответствующий опыт, который я накопил с тех пор, как начал свою карьеру Я постараюсь изо всех сил объяснить, что я думаю об аспектах жестких навыков и мягкой силы.
“不那么差的程序员”
Какие навыки нужно делать.
дерево способностей
Как квалифицированный рабочий, который кодирует, как это сделать, все еще техническая работа.
Поскольку это техническая работа, профессиональная сила должна быть отличной.Далее я расскажу о том, что мы должны освоить в соответствии с соответствующими категориями.
Основы компьютера
Работа, связанная с компьютерами, а компьютеры — это инструменты, на которые мы полагаемся, чтобы выжить. Таким образом, мы должны и должны овладеть некоторыми базовыми навыками.
Например, знания, связанные с сетью.
Среди них протокол TCP, который отличается от UDP. Необходимо понять значение трехстороннего рукопожатия TCP,распаковать, приклеитьИ другие вопросы.
Конечно, самый распространенный HTTP на верхнем уровне тоже нужно понимать, даже знакомо.
Это произведение рекомендует«Иллюстрированный HTTP»Эта книга.
Тогда есть знания, связанные с операционной системой.
Поскольку большая часть кода, который вы пишете после работы, выполняется на сервере Linux, вы также должны быть знакомы с этим.
Например, такие понятия, как процесс, поток, память и т. д., общие команды, используемые сервером, в этом нет никакой хитрости, нужно чаще стучать и резюмировать.
Я тоже раньше полгода подрабатывал в эксплуатации и обслуживании, и я относительно знаком с этой сферой.
Linux, естественно, рекомендуется и очень известен в отрасли.«Линукс-кухня Brother Bird».
Изучая эти вещи в качестве новичка, это определенно будет скучно, и университеты обычно изучают эти базовые предметы перед преподаванием профессиональных курсов. Я считаю, что большинству студентов не следует очень внимательно слушать лекции, потому что это правда, что даже если эти вещи выучить и запомнить, прямой мотивации не так много.
Но когда вы поработаете несколько лет, вы обнаружите, что пока вы все еще выполняете работу, связанную с компьютером, они неизбежны.Когда однажды эти знания непреднамеренно помогут вам, вы будете рады, что сделали правильный выбор.
Структуры данных и алгоритмы
Далее идет еще один скучный класс: структуры данных.
Кроме того, это был самый непопулярный курс в колледже, и это был единственный предмет, который я провалил.
Я помню, что каждый раз, когда я был на уроке, учитель просил всех практиковать упражнения в книге на языке C. Когда я увидел буквы, которые я знал, когда открывал их, я не узнавал их. вверх.
Это также заставляет меня время от времени смотреть на бинарные деревья, красно-черные деревья, стеки, очереди и другие знания, чтобы углубить свое впечатление.
Я действительно не имею права говорить об алгоритме, я настоял на том, чтобы некоторые части были очищены ранее.LeetCodeБольшинство тем остается на начальном и среднем уровне.
Но, как и базовые алгоритмы поиска и сортировки, я думаю, вам все равно нужно их знать, вам не нужно писать их вручную, но вы должны понимать их идеи.
такнастоятельно рекомендуетсяСтуденты, которые еще учатся в колледже, активно участвуют в некоторых соревнованиях ACM, что, безусловно, станет бонусом в будущем.
Эта часть контента может сыграть большую роль в наборе новых студентов.Java Web
Если она будет развита, то вероятность баловаться этой штукой все равно относительно невелика.
Однако, как только вы знакомитесь с дизайном модели, промежуточным ПО, эффективным хранилищем, запросами и т. д., эти препятствия также нельзя обойти.
Эта часть контента похожа на компьютерную основу выше.Для нашей разработки Java, я думаю, в дополнение к более частому чистке LeetCode, чтобы усилить впечатление, каждый раз, когда вы выбираете контейнер для хранения данных в ежедневной разработке, думайте о том, почему вы его выбираете. ? Есть ли лучший способ сохранить его? Насколько эффективно писать и запрашивать?
Если вы будете упорствовать в том же духе, то обязательно получите много товаров в будущем.
Также рекомендуетсяАлгоритмы (4-е издание)
Основы Java
Большинство читателей здесь связаны с Java, поэтому этот сильный навык очень важен.
Основы Java — единственный способ перейти к продвинутому уровню Java.
Помимо базовой грамматики здесь, мы сосредоточимся на часто встречающихся вещах в практической работе.
- Базовые контейнеры, такие как: HashMap, ArrayList, HashSet, LinkedList и т. д., нужно не только использовать, но и понимать принципы. Таким образом, оптимальный дизайн может быть выбран в различных сценариях.
- IO и NIO тоже нужно освоить. Большая часть ежедневной разработки связана с дисками и сетями (ведение журналов, базы данных, Redis), которые являются процессами ввода-вывода.
- Общие шаблоны проектирования, такие как: прокси, фабрика, обратный вызов и шаблон построителя, очень полезны для разработки гибких и расширяемых приложений.
- Многопоточность Java — очень важная функция, и для нее ежедневно ведется множество разработок. Поймите модель многопоточности, плюсы и минусы многопоточности и как ее избежать.
- Хорошие привычки одиночного теста, многие люди считают, что бессмысленно тратить время на написание одного теста. Но именно с помощью одного теста можно заранее выявить многие проблемы, снизить вероятность переделки теста и улучшить качество кода.
- Хороший стандарт программирования, это может относиться к «Руководству по разработке Java для Alibaba» и основанной на нем оптимизации."Руководство по Java для Vipshop"
"Основная технология Java, том I"Рекомендуемые.
многопоточное приложение
Когда у вас будет прочная основа, давайте поговорим о многопоточности и параллелизме.
Если вы хотите добавить к своему титулу слово «продвинутый», вы должны пройти параллельное крещение.
Параллелизм, обсуждаемый здесь, в основном относится к сценариям в одном приложении.Для нескольких приложений вы можете увидеть распределенный контент ниже.
Появление многопоточности в основном связано с улучшением использования ЦП и эффективности выполнения задач. Но не обязательно использовать многопоточность для достижения этого эффекта, потому что это тоже приносит некоторые проблемы:
- переключатель контекста
- Поделиться ресурсом
- Наглядность, атомарность, упорядоченность и т.д.
При использовании многопоточности она определенно станет более сложной и неуправляемой, чем однопоточные программы, и даже при неправильном использовании будет медленнее, чем однопоточные программы. Так что подумайте, действительно ли вам нужна многопоточность.
После его использования вы также должны подумать, почему многопоточность имеет такие проблемы.В это время вам нужно понять такие точки знаний, как модель памяти и видимость.
Какие одинаковые решения? Плюсы и минусы каждого из них тоже нужно понимать.
Когда дело доходит до многопоточности, мы должны упомянуть следующее содержимое пакетаjava.util.concurrent
.
Наиболее часто используемые и требующие освоения:
- Атомарный класс: Атомарные операции для параллельных сценариев.
- очередь. Он часто используется для развязки, и необходимо понимать принцип его реализации.
- Инструменты параллелизма, такие какConcurrentHashMap,CountDownLatchИспользование и принципы таких инструментов, как .
- использование пула потокови связанные с ними принципы.
- Заблокировать связанный контент:synchronized,ReentrantLockиспользование и принципы.
Содержание этого раздела, конечно, заключается в том, что мы знаем идею написания JDK Daniel для работы с параллелизмом, и это также очень полезно для нас, чтобы писать высококачественные многопоточные программы.
рекомендоватьИскусство параллельного программирования на JavaХорошая вводная книга по параллелизму.
Виртуальная машина JVM
Если вы хотите углубиться в Java, JVM незаменима. Для большинства разработчиков, проработавших от 1 до 3 лет, прямое знакомство с этим содержимым относительно невелико.
На этапе от 3 до 5 лет вы должны понимать, я думаю, что следующее содержание должно быть освоено:
- разбиение памяти JVM,Знайте, какая память хранит что; Потокобезопасность или нет; как бороться с нехваткой памяти и т.д.
- в разных ситуацияхпереполнение памяти, переполнение стекаи решения по позиционированию.
- Стратегия сборки мусора поколений.
- Обнаружение проблемы в Интернете и связанные с ней решения.
- Весь процесс загрузки класса, создания объекта, сборки мусора и выгрузки класса.
Овладение ими действительно полезно при практическом анализе проблемы.
Настоятельно рекомендую это"Углубленное понимание виртуальной машины Java», эта книга была прочитана несколько раз снова и снова, и каждый этап чтения имеет разные результаты.
база данных
Студенты, занимающиеся разработкой WEB-приложений, должны иметь много дел с базами данных, и вообще говоря, первое узкое место системы — это база данных, не будет преувеличением сказать, что база данных — это последняя капля системы.
Так что владение базой данных тоже очень необходимо. Возьмем в качестве примера базу данных MySQL, которая широко используется в Интернете. Некоторые необходимые знания:
- Структура данных и принцип работы индекса, какие поля должны быть проиндексированы.
- Идеи оптимизации для медленного SQL.
- Решение горизонтального и вертикального разделения базы данных требует знания промежуточного программного обеспечения, такого как MyCAT и шардинг-сферы, обычно используемого в отрасли.
Для повседневного использования обратитесь к главе о базе данных в "Руководстве по разработке Java для Alibaba". Если вы хотите узнать больше о MySQL, вы должны порекомендовать классический«Высокопроизводительный MySQL»Книга.
распределенная технология
С развитием Интернета традиционные монолитные приложения все меньше подходят для существующих сценариев.
Поэтому появились распределённые технологии, которые охватывают слишком много контента, и с ограниченным опытом я могу перечислить только часть контента, которым пользуюсь каждый день:
- Во-первых, это некоторые базовые теории, такие как: теорема CAP, знание некоторых проблем, которые принесут распределенные системы, и вес каждого приложения.
- Разберитесь в определениях, источниках и сравнениях микросервисов, которые стали популярными в последние годы, и прочитайте, если сможете.
martin fowler
оригиналMicroservices, или вы можете выполнить поиск соответствующих внутренних переводов. - Для использования распределенных фреймворков, таких как Dubbo и SpringCloud, лучше всего понять принцип.
- Следующим шагом является предложение решений проблем, вызванных распространением. какРаспределенная блокировка,Распределенное ограничение тока, распределенные транзакции,Распределенный кеш, распределенный идентификатор, промежуточное ПО для сообщений и т. д.
- Также разберитесь в некоторых алгоритмах распределенной нагрузки: вес, хэш, согласованный хеш, отказоустойчивость,LRUЖдать.
- Лучше всего делать такую практику, как:Архитектурная практика Секилла
Существует распределенный связанный компонент решения с открытым исходным кодом до:
Также порекомендуйте вводную науку«Техническая архитектура больших сайтов», время публикации немного раннее, из чего можно почерпнуть некоторые идеи.
понять архитектуру
Я считаю, что каждый мечтает стать архитектором.
Архитектор создает впечатление, что он рисует чертежи, строит полку, а персонал внизу добавит кирпичи и плитку к конечному результату.
Но на самом деле внутренние навыки тоже очень глубокие, нужно освоить все вышеперечисленное, от нижнего слоя до операционной системы и алгоритмов, верхний слой до приложений и фреймворков, нужно быть очень опытным. (кроме архитекторов PPT)
У меня нет большого опыта в архитектуре, поэтому я могу дать только ограниченный совет.
В первую очередь нужно освоить дистрибутив, ведь большинство архитектур основаны на распределенных.
Среди них необходимо выбрать согласованность или доступность в соответствии с теорией CAP в сочетании с ситуацией проекта и как хорошо поработать над выбором технологии, подходящей для существующей команды.
Здесь мы рекомендуем мистера Кай Тао«Основная технология архитектуры веб-сайта со 100-миллионным трафиком», перечислено множество примеров архитектуры, но в интернете отзывы неоднозначные, зато есть много знаний для тех, кто только начинает знакомство с архитектурой.
как научиться
После разговора о дереве навыков, давайте поговорим о том, как учиться, что также является одной из наиболее часто задаваемых тем.
А самая большая дискуссия об обучении — это просмотр видео или чтение книг?
видео
Должен признать, видео — самый удобный источник знаний, ведь оно содержит картинки, тексты и звуки.
На самом деле, я несколько лет плохо посещал профессиональные курсы в колледже.Помню, когда я действительно увлекся Java, я проводил дома два месяца каждый день, просматривая дома видеоуроки «Солдата Ма». на тот момент тоже были очень старые, и я помню это как будто это видео 2007 года (или гугла).
В то время я вставал рано и ложился спать поздно, и я практиковал то, чему научился каждый день, и я чувствовал большое чувство выполненного долга в моем сердце. Позже, после начала школы, он стал «студенческим хулиганом» в глазах одноклассников.
Сейчас включаю свой 12-летний компьютер, а на жестком диске лежат десятки гигабайт обучающих видео.
чтение
Время после работы действительно драгоценно, а в студенческой жизни совершенно нет свободы учиться и учиться. Так что сейчас мой основной источник знаний – это книги.
Вот книги, которые я недавно прочитал:
Чтение книг также будет включать в себя разницу между электронными книгами и бумажными книгами Лично я предпочитаю бумажные книги. В конце концов, я могу легко делать заметки и переключать главы в любое время. Самое главное – привычка нюхать книги с детства.
платить за знания
Плата за знания в последние годы становится все популярнее, к ним присоединились и многие воротилы, и люди постепенно привыкают платить за знания.
Честно говоря, очень сложно написать хорошую статью и снять видео, но при положительном поощрении автор может продолжать выпускать более качественный контент.
Я думаю, что эта часть лучше сделана в Китае, и я также плачу за нее, например, Geek Time, Big Brother's Knowledge Planet и т. Д.
Эти три пункта не являются абсолютно хорошими или плохими, на самом деле видно, что я смотрел видео, когда только начинал, а после работы читал книги и платил за знания.
Преимущество видео в том, что вы можете шаг за шагом следовать идеям учителя.
Однако из-за длинного содержания читатели не могут знать ключевые моменты и даже не решаются перемотать вперед, опасаясь пропустить какие-либо важные знания. неравномерно качественно и бессистемно.
Читая книгу, вы можете выборочно просматривать интересующие вас главы, а непонятный контент также легко перечитывать повторно.
Поэтому рекомендуется, чтобы студенты, которые только начинают, могут посмотреть видео и следить за обучением.После участия в работе в течение определенного периода времени они могут попытаться прочитать больше книг.
Конечно, это не абсолютно, просто найдите способ обучения, который вам подходит. Но будь то видео или книга, вам нужно много практиковаться.
Создайте личный бренд
Кажется, что личный бренд никак не связан с профессией программиста, но в нынешнюю эпоху Интернета он очень важен для всех.
В прошлом, когда мы писали резюме или оценивали резюме других людей, мы часто не думали о поиске его личной информации в Интернете, но в эту эпоху информационного взрыва можно найти любой отпечаток, который вы оставили в Интернете.
блог
Поэтому нам нужно вести свои собственные визитные карточки, например, сначала создать собственный личный блог.
Я несколько раз говорил о преимуществах ведения блога. Неважно, будет ли меньше людей, вовлеченных на ранней стадии. Важно проявлять настойчивость. Когда вы напишете 50 или 100 статей, вы обнаружите, что у вас должно быть улучшилось в процессе.
GitHub
Второй пункт больше относится к техническим людям: участвуйте в поддержании собственного GitHub.
Благодаря особым свойствам GitHub он может лучше строить личный бренд после обслуживания.
Talk is cheap. Show me the code
Не случайно.
Если вы хотите сохранить его, вы можете начать с нескольких аспектов:
- Участвуйте в проектах других людей, будь то кодовая база или база знаний, и в первую очередь интегрируйтесь в сообщество.
- Инициируйте свой собственный проект с открытым исходным кодом, будь то небольшая проблема в обычном процессе разработки или хорошо организованная точка знаний.
Но есть несколько вещей, о которых следует помнить во время этого процесса:
- Нам нужно следовать социальному этикету GitHub. Используйте английский как можно чаще, особенно на зарубежных фабриках.
- Делайте как можно меньше вещей, не связанных с работой с кодом, я не думаю, что это улучшит ваш бренд.
-
别去刷 star
. Это стало популярным только в последнее время.Я не знаю, почему некоторые люди всегда пользуются такой лазейкой, и популярность кисти не улучшилась.
Вот статья, написанная иностранным боссомHow to build your personal brand as a new developer
:
medium.free код camp.org/building-yo…
Английский очень важен
Давайте поговорим о важности английского языка, я помню, когда я впервые поступил в колледж, преподаватели и некоторые учебные заведения говорили:
Не бойтесь, что вы не сможете научиться программированию из-за плохого английского, эти слова действительно часто используются.
Несмотря на то, что это предложение правильное, английский по-прежнему может добавить очков в ИТ-индустрию.
Комментарии к исходному коду в общем JDK тоже на чистом английском.Если английский не плохой, то некоторые вещи Spring можно выучить самостоятельно.Вы можете проверить их прямо на официальном сайте Spring.Даже SpringCloud, который публикуется позже, это лучший учебник.
Затем, когда вы обычно проверяете информацию, вы можете попытаться использовать ее, если у вас есть условия.Google + 英文
Ищите, и вы найдете новые миры.
В противном случае не будетGoogle/Stack Overflow
программирование.
Я не боюсь студентов, хорошо владеющих английским, так что мне делать, если они не очень хороши?
Как и я, но я застрял со следующим:
- Все мобильные телефоны и компьютерные системы заменены на английский язык, чтобы сформировать привычку (но есть и неприятные случаи, когда меню не может быть найдено).
- Подпишитесь на некоторые еженедельные журналы на английском языке, такие как «Bay Area Daily».
- регулярно идти что-то вродеmedium.com/Такие влиятельные зарубежные сообщества читают статьи.
Хотя я не могу сказать, насколько это хорошо сейчас, я также усердно работаю в данный момент, и я надеюсь, что все будут упорствовать вместе.
Посоветуйте недавнюю книгу "Programmer's English".
Оставайтесь конкурентоспособными
Технологическая индустрия быстро развивается и меняется слишком быстро.Каждый год бесчисленное количество выпускников из смежных отраслей вступают в конкуренцию.Если вы не будете осторожны, вас догонят или даже превзойдут.
Так что мы должны оставаться конкурентоспособными все время.
Рассказывать особо не о чем, могу рассказать только о том, чем сейчас занимаюсь:
- Заложить фундамент. Дело не в том, что вы забываете это после того, как выучите его, вам нужно продолжать смотреть на него и закреплять его.Основа та же.
- Посмотрите на исходный код, поймите принцип и не оставайтесь в сфере тюнера.
- Обращайте внимание на развитие отрасли, новые технологии и новые тренды, чтобы хотя бы не устареть.
- Старайтесь публиковать одну техническую статью в неделю.
- Активно участвовать в проектах с открытым исходным кодом.
карта разума
В сочетании с вышеизложенным получается более интуитивно понятная карта разума.
Суммировать
Эта статья объединяет часть собственного опыта и перечисляет некоторые методы, которые не могут быть эффективными для всех и должны оцениваться сами по себе.
Я также писал его снова и снова в течение недели, надеясь сыграть какую-то роль в этой дороге и моих друзьях, которые находятся в дороге.
Большинство из них просто говорят об идеях, на самом деле в каждом отдельном чате можно написать очень много. У каждого пункта есть рекомендуемая книга, и если у вас есть предложения получше, оставьте сообщение для обсуждения.
Большинство из вышеперечисленных пунктов знаний хранятся на GitHub, и заинтересованные друзья могут их проверить:
Ваши лайки и ретвиты — лучшая поддержка.