"Это 4-й день моего участия в ноябрьском испытании обновлений, ознакомьтесь с подробностями события:Вызов последнего обновления 2021 г.".
предисловие
Хорошие привычки разработки могут помочь нам достичь вдвое большего результата, затрачивая половину усилий в нашей повседневной работе по разработке, повысить читабельность и надежность кода, а также уменьшить количество лазеек в коде.
спецификация кода
- После написания кода проверьте себя
- Входные параметры метода максимально проверяются
- Для сложной логики кода добавьте четкие комментарии
- После использования потока ресурсов ввода-вывода его необходимо закрыть
- Код предпринимает шаги, чтобы избежать ошибок во время выполнения (таких как переполнение границ массива, деление на ноль и т. д.).
- Старайтесь не выполнять удаленные вызовы или операции с базой данных в цикле и отдавать приоритет пакетам.
- Получите свойства объекта, сначала определите, является ли объект пустым
- Если ключ в коллекции Set или коллекции Map является настраиваемым объектом, переопределите методы equals и hashCode объекта.
-
避免使用双括号
New Person{{setName("xxx")}} используется для создания экземпляров объектов. Хотя этот метод является кратким, он будет генерировать анонимные внутренние классы, которые легко могут вызвать утечку памяти. - Не пишите сложные выражения в условных суждениях
- Использование условного суждениязаявление охраны, для повышения удобочитаемости и надежности кода
- При использовании метода equals() константа (с определенным значением) ставится первой
- Spring официально рекомендует использовать
构造器注入
- Старайтесь не использовать try-catch в цикле, он должен быть размещен в самом внешнем слое.
- Константы объявляются static final и называются в верхнем регистре.
- Не создавайте неиспользуемые объекты, не импортируйте неиспользуемые классы
- Не приводить к примитивным типам данных вне области видимости
Оптимизация кода
- Попробуйте указать модификаторы final для классов, методов и переменных.
- Максимально возможное повторное использование объектов
- По возможности используйте локальные переменные
- Минимизируйте двойной подсчет переменных
- Попробуйте использовать стратегию ленивой загрузки
- Если длину содержимого массива и коллекции можно оценить, длину следует указать при создании
- При копировании больших объемов данных используйте System.arraycopy()
- Умножение и деление с использованием операций сдвига
- Массивы имеют приоритет перед списками
- Попробуйте использовать синглтоны там, где это уместно.
- Старайтесь избегать использования статических переменных
- Старайтесь избегать использования отражения
- использовать как можно больше
池化技术
(пул соединений с базой данных, пул потоков) - Операции ввода-вывода с использованием буферизованных входных и выходных потоков
- Не используйте слишком много параметров в общедоступных методах.
- Используйте наиболее эффективный способ обхода карты (рекомендуется использовать обход entrySet())
спецификация интерфейса
- Интерфейсы должны учитывать идемпотентность
- Входные параметры интерфейса необходимо проверить, рекомендуется использовать фреймворк проверки @valid или @validated.
- Параметр интерфейса не может быть значением перечисления или любым объектом pojo, содержащим значение перечисления.
- При модификации старого интерфейса учитывайте совместимость интерфейса
- При вызове стороннего интерфейса необходимо учитывать обработку исключений, безопасность и повторные попытки с течением времени.
параллельное программирование
- В случае многопоточности рассмотрим линейную задачу безопасности
- После написания кода подумайте, что происходит при многопоточном выполнении, и обратите внимание на проблему параллелизма и согласованности.
- Многопоточный асинхронный отдает приоритет соответствующему пулу потоков вместо нового потока и учитывает, изолирован ли пул потоков.
- использовать
ThreadPoolExecutor构造器创建线程池
, чтобы избежать создания пулов потоков с использованием статических методов Executors - Попробуйте синхронизировать блоки кода при использовании синхронизированных
- Минимизируйте область блокировки при использовании блокировки
Кэш (редис)
- При использовании кеша учитывайте согласованность между кешем и БД.
- Учитывайте проникновение в кеш, лавину кеша, поломку кеша и проблемы с горячими точками кеша.
- Избегайте использования функции транзакций redis
- Использование в Интернете запрещено
keys
, flushhall, flushdb и т. д., отключите команду через механизм переименования redis или используйте метод сканирования для прогрессивной обработки - Используйте команды пакетной обработки для повышения эффективности
- Отклонить большой ключ (разделить ключ, использовать соответствующий тип данных)
- Контролировать жизненный цикл ключа (децентрализованная настройка срока действия)
- Дизайн имени ключа должен быть читабельным, управляемым, кратким и не должен содержать специальных символов.
- Установите соответствующую стратегию вывода из эксплуатации памяти
база данных
- После того, как вручную напишете SQL бизнес-кода, отнесите его в базу данных и запустите, а также объясните план выполнения.
- Учитывать проблему задержки master-slave базы данных (при необходимости принудительно читать базу данных master)
- Избегайте выполнения операций с базой данных в циклах