Держи траву, ты на самом деле отравил код!

Java
Держи траву, ты на самом деле отравил код!

Автор: Брат Сяофу
Блог:bugstack.cn - 原创专题文章汇总

Осаждайте, делитесь, растите и позвольте себе и другим что-то получить! 😄

Введение

学过的代码记不住?方式不对才记不住,你这么记!

  • Git: Поход в туалет называется не поход в туалет, это называется дергать за ветку!
  • Socket: Туалет - сервер, а яма - порт!
  • очередь: Иди в туалет 🚽 Звони в очередь, первый пришел первый вышел!
  • куча: Иди на кухню 🥣 и зови в стек, ЛИФО!
  • Архитектура: Планировка с тремя спальнями называется MVC, а планировка с четырьмя спальнями называется DDD!
  • теория: Структура системы хорошо проработана, с небольшим багом проблем нет, его можно изменить. В этом разница между конурой и туалетом.

За исключением небольшого вкуса, на этот раз я не помню, Процесс программирования и написания кода и примеры нашей повседневной жизни часто соотносят таким образом.С реальными объектами, которые можно потрогать, будет легче понять программирование и трудно забыть.Но, возможно, писать код и хихикать!

В дополнение к этим примерам обучения положительной энергии, давайте посмотрим, какой ядовитый код!

Во-вторых, код ядовит!

以下代码用好了升职加薪,用不好开除走人!

1. Именование методов

public List<UserInfo> queryBitchUserInfo(String req) {

    return null;
}

  • Индекс: ⭐⭐⭐
  • Детоксикация: младший брат должен захотеть написать имя метода для пользователей пакетного запроса, и результатbatch(партия), записывается какbitch(сука)
  • Комментарии: Интерфейс пишется утром, а люди уходят днем!

2. Лучшая сортировка

public static void main(String[] args) {
    int[] numbers = new int[]{2, 30000000, 1, 6, 40000000, 5};
    for (final int number : numbers) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(number);
                    System.out.println(number);
                } catch (InterruptedException ignore) {
                }
            }
        }).start();
    }
}

  • Индекс: ⭐⭐⭐
  • Детоксикация: используйте цифровой сон, чтобы всегда сортировать: тот, кто проснется раньше, выведет первым.
  • Комментарий: Мысль ясна, если бы не эта сортировка на сутки, босс не смог бы его выгнать!

3. Немного выжигает мозги

@Test
public void test_idx_hashMap() {
    Map<String, String> map = new HashMap<>(64);
    map.put("alderney", "未实现服务");
    map.put("luminance", "未实现服务");
    map.put("chorology", "未实现服务");
    map.put("carline", "未实现服务");
    map.put("fluorosis", "未实现服务");
    map.put("angora", "未实现服务");
    map.put("insititious", "未实现服务");
    map.put("insincere", "已实现服务");
    
    long startTime = System.currentTimeMillis();
    for (int i = 0; i < 100000000; i++) {
        map.get("insincere");
    }
    System.out.println("耗时(initialCapacity):" + (System.currentTimeMillis() - startTime));
}

  • Индекс: ⭐⭐⭐⭐⭐
  • Детоксикация: вот определениеHashMapСохраните ключ бизнес-реализации и вызовите сервисную функцию с помощью ключа. но здесьkey,ТолькоinsincereПолезно, все остальное - нереализованный сервис. Так ты видишь, что не так?
    • На первый взгляд в этом коде нет ничего плохого, но если вы видите это ясно, в коде есть мышьяк!Его цель только одна: собрать все ключи в связанный список и поместить их в HashMap, а полезные ключи поместить в конец связанного списка, чтобы увеличить время получения!
    • Во-первых,new HashMap<>(64);Почему 64 длины инициализируются по умолчанию? Поскольку длина по умолчанию равна 8, при вставке элемента, когда длина связанного списка равна 8, будет оцениваться расширение и дерево связанного списка.В это время исходный ключ будет хеширован, а все ключи не может быть сформирован в связанный список высокой временной сложности.
    • Во-вторых, всеkeyвыбираются сознательно, потому что ониHashMapПри вычислении индекса значение индекса равно 0, idx =(size - 1) & (key.hashCode() ^ (key.hashCode() >>> 16)), так что всеkeyВсе хэши в одно и то же место для коллизий.и словоinsincereозначает;不诚恳的、不真诚的!
    • Наконец, первые 7 клавиш фактически бесполезны.key, не действует, обслуживается только последний ключ. Затем, конечно, в HashMap можно построить много таких трудоемких списков, связанных с коллизиями, чтобы удовлетворить потребности.0.75коэффициент загрузки, не позволяйте HashMap расширяться.
    • Общий эффект показан на рисунке ниже, ключи хешированы неравномерно;
  • Комментарий: Уметь писать такой код - это то, что зарплаты не хватает, жду оптимизации кода, чтобы поднять зарплату!

4. Итог тайны

@Test
public void test_add(){
    int num = 0;
    for (int i = 0; i < 100; i++) {
        num = num++;
    }
    System.out.println(num);
}

  • Индекс: ⭐⭐
  • Детоксикация: МаксимальнаяnumРезультат 0,num++Это вообще не сработало. Потому что после ++ сначала используется результат, а в операции ++ никакого присваивания не будет. Правильное написание: число = ++число;
  • Комментарий: Такая ошибка, как проехать на красный свет, начиная от вычета баллов и штрафов и заканчивая банкротством.

5. колокольчики и свистки

private boolean checkAge(int age ) {
    boolean result;
    if (age >18) 
    {
        result=true;
    } else {
        result=false;
    }
    
    
    return result;
}

  • Индекс: ⭐
  • Детоксикация: код работает, но его можно оптимизироватьreturn age > 18.
  • Комментарий: измеряет ли ваша компания производительность по количеству строк кода? Никакого форматирования, никакой чистоты, никаких всплывающих подсказок IDEA, код написан для того, чтобы люди его видели! Что не является!

6. Цифровое суждение

public boolean isNumber(String str) {
    try {
        Integer.parseInt(str);
        return true;
    } catch (Exception e) {
        return false;
    }
}

  • Индекс: ⭐⭐
  • Детоксикация: чтобы судить, является ли это числом или нет, это не исключение, и это не исключение. Это можно использоватьStringUtilsИнструментарий решения, вы также можете написать свое собственное регулярное решение.
  • Комментарии: Этот код действительно горит, делая бизнес с исключениями. Это ли не раздача 🍄 грибов собакам! 🐕Если собака не умерла, вы едите грибы, вы едите собачьи лепешки.

7. Надежный код

public void neverStop(){
    //一直循环
    while (true) {
        try {
            //业务处理流程
        } catch (Exception e) {
            //抓到异常,不处理、不打日志、就是不要停,继续跑
            continue ;
        }
    }
}

  • Индекс: ⭐⭐⭐
  • Детоксикация: оберните код, который может генерировать исключения, с помощью tryCatch, продолжайте работать и запускайте при возникновении исключений. В это время, если вы столкнулись с исключением, вам необходимо выполнить некоторую обработку процесса, по крайней мере, зарегистрировать и подать сигнал тревоги.
  • Комментарии: Развитие бизнеса часто направлено на решение нештатных процессов, таких как擦屁屁的纸80%的面积是保护手的。怎么滴,我看你这代码,是非要一直抠破呀!

8. Оптимизация производительности

// APP首页查询,优化前
public void queryInitInfo(){
    Thread.sleep(3000);
}

// APP首页查询,优化后
public void queryInitInfo(){
    Thread.sleep(500);
}

  • Индекс: ⭐⭐⭐
  • Детоксикация: детоксикации нечего, килограмм хедингхонга - глоток слюны!
  • Комментарии: Больше не могу комментировать, просто откройте, когда поймаете!

9. Бесполезные журналы

// 规则引擎校验
public boolean ruleEngine(MatterReq req) {
    try {
        // 业务流程
    } catch (Exception e) {
        logger.error(e);  // 只打异常,不打入参信息
    }
}

  • Индекс: ⭐
  • Детоксикация: в журнале есть только исключения, а информация о входных параметрах отсутствует.Когда ваш метод имеет большое количество вызовов, трудно быстро найти проблему.
  • Комментарии: не забудьте указать это в следующий раз产品经理Также попади в бревно и умри вместе!

10. Длительный обход

@Test
public void test_LinkedList() {
	// 初始化100万数据
    List<Integer> list = new LinkedList<Integer>(1000000);
    
    // 遍历求和
    int sum = 0;
    for (int i = 0; i < list.size(); i++) {
        sum += list.get(i);
    }
    
}

  • Индекс: ⭐⭐⭐⭐
  • Детоксикация: на первый взгляд может показаться, что все в порядке, но это суммирование будет очень медленным. В основном из-за структуры данных связанного списка каждый разlist.get(i)Все они ищутся в начале связанного списка, иArrayListразные,LinkedListЕго временная сложность O(n). Тогда, если вы не знаете, что передает другая сторонаLinkedListвсе ещеArrayListНу, на самом деле, черезlist instanceof RandomAccessвынести приговор.ArrayListЕсть реализации произвольного доступа,LinkedListда нет. Вы также можете использовать расширенный цикл for илиIteratorтраверс.
  • Комментарии: Фундамент не крепкий, земля трясется! Я мало в этом разбираюсь, а старое железо я кастрировал!

3. Резюме

Хороший код такой же, а плохие программы ценят и повышают зарплату!, Эти ядовитые коды наглядно демонстрируют незаурядные таланты программистов, но и серьезно сомневаются, что денег дают меньше!

стучать на доске: Хотите пойти дальше на этой дороге или надо брать корни фундамента. Поэтому я очень продвинул, чтобы прочитать следующую серию столбцов статей, консолидируйте основу, расширяют способность и улучшить горизонт;

хорошо!, эта статья здесь, там много интересных кодов, добро пожаловать, оставляйте свой код-призрак в комментариях!