предисловие
Вдохновение для этой статьи пришло несколько месяцев назад, когда я не был занят на работе (рыбалка).Всегда мчаться вперед в одиночку неинтересно.Мне нужно придумать способ повысить эффективность команды и улучшить счастье команды.(улучшается эффективность, и чем больше кода пишется в единицу времени, тем будет вам счастье😜) После нескольких месяцев исследований я сделал вывод о нескольких мелких моментах.Если у вас есть способ лучше, добро пожаловать обсудить вместе~
Постоянное решение Я не знаю, какая версия
Продукты нашей компании в основном делятся на Saas и частные платформы, которые развертываются в общедоступной сети и частной среде клиента соответственно.Давайте сначала поговорим о частной среде:Не знаю фактическую развернутую версию проектаНелепо говорить, что студенты, занимающиеся эксплуатацией и обслуживанием, должны были записывать версии кода каждого клиента при развертывании, но это так нелепо, что иногда они допускают ошибки, которые могут быть связаны с тем, что процесс обновления неидеален, или с ошибками в работе и т. д. , Короче говоря, думать о решении.
Люди ненадежны, но код есть.GitОн стал стандартом де-факто для управления кодом, так что особо нечего сказать.GitНачни с себя, и потихоньку отдавай все зависимости проекта(POM.XML) добавить плагин:
<!-- Git Version插件 -->
<plugin>
<groupId>pl.project13.maven</groupId>
<artifactId>git-commit-id-plugin</artifactId>
<version>4.0.0</version>
<executions>
<execution>
<id>get-the-git-infos</id>
<phase>initialize</phase>
<goals>
<goal>revision</goal>
</goals>
</execution>
</executions>
<configuration>
<dotGitDirectory>${project.basedir}/.git</dotGitDirectory>
<verbose>false</verbose>
<dateFormat>yyyy-MM-dd HH:mm:ss</dateFormat>
<prefix>git</prefix>
<generateGitPropertiesFile>true</generateGitPropertiesFile>
<generateGitPropertiesFilename>${project.build.outputDirectory}/${project.name}.build.json</generateGitPropertiesFilename>
<format>json</format>
<gitDescribe>
<skip>false</skip>
<always>false</always>
<dirty>-dirty</dirty>
</gitDescribe>
</configuration>
</plugin>
Плагин будет генерировать файл, связанный с версией, каждый раз при сборке со следующим содержимым:
{
"git.branch" : "master",
"git.build.host" : "Kerwin",
"git.build.time" : "2020-08-12 23:24:59",
"git.build.user.email" : "34807944+kkzhilu@users.noreply.github.com",
"git.build.user.name" : "kkzhilu",
"git.build.version" : "1.0.0-SNAPSHOT",
"git.closest.tag.commit.count" : "",
"git.closest.tag.name" : "",
"git.commit.id" : "4981afb5dfeee6f835dcf9a7a135083d8e973090",
"git.commit.id.abbrev" : "4981afb",
"git.commit.id.describe" : "4981afb",
"git.commit.id.describe-short" : "4981afb",
"git.commit.message.full" : "Commit git-version",
"git.commit.message.short" : "Commit git-version",
"git.commit.time" : "2020-08-04 18:18:47",
"git.commit.user.email" : "34807944+kkzhilu@users.noreply.github.com",
"git.commit.user.name" : "kexianming",
"git.dirty" : "false",
"git.local.branch.ahead" : "0",
"git.local.branch.behind" : "0",
"git.remote.origin.url" : "https://github.com/kkzhilu/KerwinBoots.git",
"git.tags" : "",
"git.total.commit.count" : "9"
}
Название плагина:git-commit-id-plugin, что касается деталей, вы можете искать самостоятельно.Эффект, который он может достичь, заключается в том, чтобы генерировать соответствующую информацию, связанную с Git, каждый раз, когда он упакован, так что независимо от того, неправильно ли одноклассники по эксплуатации и обслуживанию обновляют код, мы можем знатьКакая версия кода
В будущем я наконец-то не услышу болтовню между коллегами из-за версии кода 🤪
Навсегда решить проблему как обойтись без логирования
Возвращаясь к только что упомянутой производственной среде Saas, по разным причинам нашей команде часто приходится поддерживать проекты, которые мы не писали сами, во многих случаях некоторые детали и логика полностью запутаны, а логи отсутствуют. Самое страшное, что тестовая среда по-прежнему не работает, что теперь делать?
Предыдущее решение состояло в том, чтобы вызывать людей разными способами, затем смотреть код, чтобы найти контекст, и найти подсказки как можно больше.Короче говоря, эффективность очень трогательная.Если обработка будет медленной, это будет случайность, и весь персонал будет раскритикован что мне делать? Я долго искал решение этой проблемы, и наконец нашел артефакт:Arthas
Люди, которые использовали этот инструмент, знают, насколько он мощный.арт has.git ee.IO/commands.contracts…
Мы можем передать некоторые из предоставляемых им команд, например:tt
,Получить пространственно-временной туннель данных выполнения метода, который может записывать входные параметры и возвращать информацию о каждом вызове указанного метода., подумайте, как это полезно,Запишите входные и выходные параметры каждого метода, Если вы действительно столкнулись с ситуацией, когда нет журнала, вы можете быстро найти проблему, если знаете эту информацию с кодом, поэтому, друзья, которые никогда не слышали о нем, попробуйте, это действительно непобедимо.
В следующий раз, когда у коллеги проблемы, вы можете использовать этот инструмент, чтобы помочь ему, он может пригласить вас на обед🍗
Навсегда решить проблему, которая занимает так много времени
Эта проблема связана с тем, что предыдущий коллега переписал часть бизнес-логики, в результате слой онлайн-презентации занимает около 30 секунд, о, мой Бог! В тестовой среде это явно момент, что мне делать?
Причина этой проблемы должна заключаться в том, что SQL плохо написан, или в бизнес-обработке много ненужных действий (у нас нет тестов в градациях серого), но рабочую среду нельзя случайно переместить или отладить на месте. точки останова Из журнала я вижу только, что это занимает много времени, но я не знаю, где медлительность.
Когда метод проходит через N внутренних методов, вы не знаете, какой из них вызывает такие большие временные затраты.Что делать, если его невозможно воспроизвести? На самом деле, используйте вышеуказанный инструментArthas, все та же командаtt, он может не только записывать входную и выходную информацию,Вы также можете записать время, затрачиваемое на каждый метод., какой мощный.
Итак, я здесь, чтобы еще раз напомнить, что эти функции простоArthasНемного меха, мы должны научиться разумно использовать инструменты с открытым исходным кодом
Аннотация не выражает решение эффекта блок-схемы
Комментарии — это текст, и сложно выразить общий эффект блок-схемы, так что же нам делать? Я нашел два решения, которые в настоящее время очень хорошо работают в проекте, первое — использоватьИнструмент для аннотаций ASCII, адрес инструмента:asciiflow.com/
Эффект следующий:
Примечания следующие:
+-------------------------------+
| |
| +-------------------------+ |
| | | |
| | Demo | |
| | | |
| | | |
| +------------+------------+ |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| +------> False |
| | |
| | |
| True <---+ |
| |
+-------------------------------+
Изображения, нарисованные этим устройством, могут быть напрямую скопированы в текст, и большинство ситуаций можно решить, контролируя размер.Также возможно, что некоторые очень странные комментарии в Интернете были нарисованы с помощью этого инструмента или того же принципа. из предыдущей статьи:
**Как воспроизвести глубокое пейджинг с сотнями миллионов данных? Совместимость с MySQL + ES + MongoDB:**Наггетс.Талант/пост/685003…
На момент написания этой статьи картина моего собственного плана еще не была нарисована, поэтому многие друзья спрашивали меня, чего я не могу добиться с id.На этот раз я кстати покажу свой план.
Второе решение заключается в использованииMarkDownРодная функция рисования, я не знаю, поддерживает ли платформа для публикации статьи или нет, поэтому вместо этого я использовал скриншоты (Типора Поддержка)
Кто не знает, ищите.MarkDownСинтаксис отрисовки, просто возьмите подходящую модификацию, учить ее не нужно, просто вставьте в код, чтобы увидеть эффект:
есть небольшойTips, при использовании IDEA,Используйте клавишу прокрутки мыши для копирования по блокам, чтобы можно было копировать непосредственно в указанное содержимое комментария., затем скопируйте его в любой нормальныйMarkDownВ инструменте вы можете отобразить блок-схему. Она не должна быть слишком идеальной. Друзья, которые хотят протестировать, могут скопировать следующий код и попробовать его в некоторых инструментах. Вам нужно установить тип кода:mermaid
sequenceDiagram
Note over Boot: 启动类
Note over PDFThread: 线程类
Note over PDFWorker: 执行类
Boot->>PDFThread: Boot类启动线程
PDFThread->>PDFWorker: 线程类调用真正工作Worker
loop 队列处理
PDFThread->PDFThread: 考虑成功与失败情况处理方案
end
PDFWorker-->>PDFThread: Worker响应执行结果
Note right of PDFWorker: 注意参数校验 <br/>文件格式校验
Ваш будущий коллега влюбится в вас при соблюдении кода, а может и женится на вас, если это будет девушка🧡
Я представляю, что в один прекрасный день придет ваш начальник и спросит, какие комментарии вы написали, а потом вы скопируете и вставите, и получится картинка! Следующее повышение зарплаты будет без вас?
(Всё равно я поднялся, а их ещё много 😎)
PS: я подумываю написать тот, который поддерживает прямое копирование, а затем рендеринг в блок-схему.Плагин IDEA, если у вас есть, пожалуйста, свяжитесь со мной, чтобы я мог написать, хе-хе✌
Решение мусорного SQL
Наша компания не имеет специальногоDBA
,такSQL
Качество постановки только в руках разработки и руководителя группы разработки.Иногда вещей слишком много,или вы невнимательны,или модули не очень важны,и легко быть невнимательным.Когда есть это большая проблема в производственной среде, решение этой ситуации все же найти инструменты, типа, присматриваюсьВзлет Сяоми
адрес проекта:github.com/XiaoMi/soar
Официальное введение:
- Кроссплатформенная поддержка
- В настоящее время поддерживается только оптимизация SQL протокола семейства синтаксиса MySQL.
- Поддерживает оптимизацию операторов на основе эвристики.
- Поддерживает оптимизацию индекса с несколькими столбцами для сложных запросов (UPDATE, INSERT, DELETE, SELECT).
Выложи фото для демонстрации эффекта:
Этот инструмент можетSQLОцените и дайте несколько предложений одновременно.Мы еще не исследовали верхний предел его возможностей, но нижний предел все еще определен, поэтому нам нужно только обратить на него внимание позже.показательПравильно ли он используется, остальное оставьте этому инструменту, если он меньше 90 баллов, меняйте его!
PS: этот проект с открытым исходным кодом рекомендуется использоватьdockerУстановка, простая и грубая, мозгов нет, экономия времени, команда следующая:
# 安装镜像
docker pull becivells/soar-web
# 运行
docker run -d --name Soar-web -p 5077:5077 becivells/soar-web
Думая, что есть инструмент, который будет проверять качество SQL, это более серьезно при написании, полно советов по счастью, ха-ха~😁
Решение для ленивых писать документацию
Документ дизайна решения не может быть написан инструментом, но простое сопоставление полей базы данных или документ интерфейса не нужно разрабатывать и писать, верно? Тоже так же щупал и щупал, и нашел несколько опенсорсных проектов, которые не подходят, но отодвинуты на второй план, например:
**апидок:**GitHub.com/API doc/Abida…
RESTful web API Documentation Generator.
**JAPiDocs:**GitHub.com/Y Eda/J AP…
A magical api documentation generator without annotation for springboot.
**APIАвто:**GitHub.com/Томми лимон/…
Тестирование машинного обучения, автоматическая генерация кода, автоматическая статическая проверка, автоматическая генерация документов и комментариев и т. д., чтобы стать самым передовым инструментом управления интерфейсом.
Потому что ситуация каждого проекта разная, но я не хочу вносить кардинальные изменения, поэтому могу только сказать, что он отложен, не на 100% подходит, но с этими проектами с открытым исходным кодом я могу переписать код в нем на сделать его подходящим для текущего проекта. Схема аннотаций и т. д. всегда позволяет сэкономить немалую часть времени на написание документации.
Решение повторяющегося кода
Это действительно большая яма.Кто сделал нас CRUD-программистами?Нам часто нужно писать очень повторяющийся код,но там немного другой код.Мое решение здесь-использовать шаблоны+более подходящие инструменты для его решения,если это просто база данных операции Есть много слоев повторяющегося кода, мы можем использовать его полностьюmybatis-plusИнструменты для уменьшения дублирования кода или написанияобщедоступный операционный слойУменьшите повторяющийся код.
Когда это невозможно сделать с помощью инструментов, я буду использовать шаблоны, например, я написал простой проект с открытым исходным кодом напрямую:
**Похоже, отличный генератор! Завершите проект за секунду:**nuggets.capable/post/684490…
Основные идеи и требования заключаются в следующем:
- Получить необработанные данные из базы данных
- Создание работоспособного проекта SpringBoot на основе шаблона + исходные данные, интерфейс поддержки + базовое добавление, удаление, изменение и проверка
- Предоставляет расширяемый интерфейс для создания новых файлов без изменения кода.
Используя эту идею, действительно можно написать более открытый шаблон генерации кода, например, в соответствии с переданнымJSON
сообщение для разбора данных в соответствии с переданным模板
Чтобы генерировать данные таким образом, вы можете решить значительную часть повторяющихся инструментов, которые вы заслуживаете иметь.
PS: Точно так же, собственно, документ сопоставления полей базы данных можно использовать и таким образом, это занимает всего одну секунду, это не слишком удобно 🤷♂️
Код скрипта для повторяющихся операций
На самом деле, все об этом знают, но иногда кажется, что этим мало пользуются.dockerКонтейнеры, если вы используете командную строку, вам нужно пройти как минимум два шага кода, что занимает более десяти секунд.Если вы пишете скрипт, для входа в контейнер в будущем требуется всего одна секунда, поэтому я написал куча таких скриптов для команды.На самом деле я не в начале,во всяком случае,просто скопируйте один и измените его,следующая записьдокер-контейнериз
#使用说明,用来提示输入参数
usage() {
echo "Usage: sh 执行脚本.sh [rpcapp|tomcat|nginx|mysql]"
exit 1
}
rpcapp(){
DOCKER_ID=$(docker ps | grep "rpcapp" | awk '{print $1}')
docker exec -it $DOCKER_ID bash
}
tomcat(){
DOCKER_ID=$(docker ps | grep "tomcat" | awk '{print $1}')
docker exec -it $DOCKER_ID bash
}
nginx(){
DOCKER_ID=$(docker ps | grep "nginx" | awk '{print $1}')
docker exec -it $DOCKER_ID bash
}
mysql(){
DOCKER_ID=$(docker ps | grep "mysql" | awk '{print $1}')
docker exec -it $DOCKER_ID bash
}
#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
"rpcapp")
rpcapp
;;
"tomcat")
tomcat
;;
"nginx")
nginx
;;
"mysql")
mysql
;;
*)
usage
;;
esac
Я искал в Интернете и нашел проект с открытым исходным кодом для записи часто используемых скриптов.
**полезные скрипты:**GitHub.com/старая крыса Ли/U…
Если вы можете сделать это автоматически, не пишите это каждый раз вручную, разве вы не чувствуете себя счастливым, экономя время на рыбалку 👏
Наконец
Это артефакт тайм-менеджмента, который я так долго обобщал: сэкономленное время используется, чтобы учиться у рыбы, повышать эффективность и способности в цикле и формировать положительную обратную связь.
это того не стоитпоставить лайк👍👍👍? хехе~
Кроме того, вы можете выполнить поиск в общедоступном аккаунте "это Кервин", совершенствуйтесь вместе!
также посмотретьДомашняя страница Кервина на GitHub, обратите внимание на прогресс маленького белого программиста, этот парень недавно бросает Go~