Você está louco, você "envenenou" o código?

Você está louco, você "envenenou" o código?

 

I. Introdução

Não consegue se lembrar do código aprendido? Você não consegue se lembrar da maneira errada, você se lembra!

  • Git : Ir ao banheiro não é chamado de ir ao banheiro, é puxar um galho!
  • Soquete : O banheiro é o servidor, e o poço é a porta!
  • Fila : Ligue para a fila quando for ao banheiro, primeiro a entrar, primeiro a sair!
  • Zhan : Vá para a cozinha e chame Jin Zhan, o último a entrar primeiro a sair!
  • Arquitetura : O layout de três quartos é chamado MVC, e o layout de quatro quartos é chamado DDD!
  • Teoria : A estrutura do sistema está bem desenhada, e não há problemas com alguns bugs, ela pode ser alterada. Esta é a diferença entre Mao Keng e banheiro.

Exceto por uma pequena amostra, não me lembro dessa vez . O processo de programação e escrita de código e os exemplos de nossa vida diária são geralmente assim. Com objetos reais que podem ser tocados, será mais fácil entender a programação. , É difícil esquecer. Mas ele pode apenas rir enquanto escreve o código!

Além desses exemplos de aprendizado de energia positiva, vamos dar uma olhada no código tóxico a seguir!

2. O código é venenoso!

O código a seguir é bom para promoção e aumento de salário, mas não é bom para expulsão!

1. Nomenclatura do método

public List<UserInfo> queryBitchUserInfo(String req) {
    return null;
}

  • Índice: ★★★
  • Desintoxicação: irmão mais novo deve ser escrever um nome do método de consulta do lote do usuário, os resultados do lote ( lote ), cadela escrita ( cadela )
  • Comentário: A interface é escrita de manhã e as pessoas saem à tarde!

2. Melhor Classificação

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();    }}

  • Índice: ★★★
  • Desintoxicação: Sempre classifique por sono digital, quem acordar cedo dará a saída primeiro.
  • Comentário: A ideia é muito estranha, se não fosse essa espera desse dia, o chefe não poderia chutá-lo!

3. Pequenos cérebros

@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));
}

  • Índice: ★★★★★
  • Desintoxicação: Esta é uma função que define o negócio de armazenamento HashMap para realizar a chave e chama o serviço por meio da chave. Mas a chave aqui só é útil para insinceros, e as outras são serviços não implementados. Você vê algum problema? À primeira vista, não há nada de errado com este código, mas se você entendeu, há arsênico no código! Seu propósito é um, colocar todas as chaves em uma lista vinculada e colocá-las no HashMap, e colocar chaves úteis no final da lista vinculada, aumentando o demorado get!  Primeiro de tudo, new HashMap <> (64); Por que inicializar 64 comprimentos por padrão? Como o comprimento padrão é 8, ao inserir elementos, quando o comprimento da lista vinculada é 8, a expansão e a árvore da lista vinculada serão avaliadas. Neste momento, a chave original será processada em hash e todas as chaves não podem ser transformadas em alta complexidade Lista vinculada. Em segundo lugar, todas as chaves são selecionadas deliberadamente, porque quando calculam o índice no HashMap, o valor do índice é 0, idx = (size-1) & (key.hashCode () ^ (key.hashCode ()> >> 16)), de modo que todas as chaves podem ser processadas no mesmo local para colisão. E a palavra insincero significa; insincero, insincero!  Por fim, as 7 primeiras chaves são, na verdade, chaves inúteis e não têm efeito. Apenas a última chave tem serviço. Dessa forma, muitas dessas listas de colisão demoradas podem ser construídas no HashMap, é claro, o fator de carga de 0,75 deve ser atendido e o HashMap não deve ser expandido. O efeito geral é mostrado abaixo, a chave não é uniformemente hash;
  • Comentário: Se você consegue escrever este tipo de código, o salário não é suficiente, aguardando a otimização do código para aumentar o salário!

4. Soma do Mistério

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

  • Índice: ★★
  • Desintoxicação: O resultado final de num é 0 e num ++ não tem efeito algum. Porque depois de ++, o resultado é usado primeiro e a operação ++ não atribuirá um valor. A escrita correta é: num = ++ num;
  • Comentários: Esse tipo de erro é como dirigir em um sinal vermelho, variando de deduções e multas até ruína.

5. Fantasia

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

  • Índice: ★
  • Desintoxicação: o código pode ser executado, mas pode ser otimizado para retornar idade> 18 anos.
  • Comentário: Sua empresa atinge o desempenho com base no número de linhas de código? Sem formatação, desordenado ou dicas IDEA, o código é escrito para que as pessoas vejam! O que é isso!

6. Número de julgamento

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

  • Índice: ★★
  • Desintoxicação: Julgue se é um número, não lance uma exceção ou lance uma exceção. Isso pode ser julgado usando o kit de ferramentas StringUtils ou você mesmo pode escrever julgamentos regulares.
  • Comentário: Este código está realmente queimado, use exceções para negócios. Isso não é dar cogumelos aos cães? Se o cachorro não está morto, você come cogumelos, você come goubaba.

7. Código robusto

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

  • Índice: ★★★
  • Desintoxicação: embrulhe o código que pode lançar exceções com tryCatch, continue em execução e execute quando encontrar exceções. Se você encontrar uma exceção neste momento, precisará fazer algum processamento de processo, pelo menos, log e alarme.
  • Comentário: O desenvolvimento de negócios é frequentemente usado para resolver processos anormais, assim como 80% da área de fricção de papel é para proteger as mãos. Como derrubar, vejo seu código, deve estar quebrado!

8. Otimização de desempenho

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

  • Índice: ★★★
  • Desintoxicação: Não há nada para desintoxicar, um quilograma de Crane Dinghong adicionado a um gole de água!
  • Comentário: Não posso comentar, vamos abri-lo quando você pegar!

9. Registros inúteis

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

  • Índice: ★
  • Desintoxicação: Somente exceções são inseridas no log, e nenhuma informação de parâmetro é inserida.Quando seu método tem um grande número de chamadas, é difícil localizar o problema rapidamente.
  • Comentário: Da próxima vez, lembre-se de registrar o gerente de produto também e morram juntos!

10. Travessia demorada

@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);
    }
    
}

  • Índice: ★★★★
  • Desintoxicação: à primeira vista, pode parecer que não há problema, mas essa travessia e soma serão muito lentas. Principalmente por causa da estrutura de dados da lista vinculada, cada list.get (i) é pesquisado a partir do cabeçalho da lista vinculada. Ao contrário de ArrayList, LinkedList tem uma complexidade de tempo de O (n). Portanto, se você não sabe se a outra parte foi aprovada em LinkedList ou ArrayList, você pode realmente julgá-la por instância de lista de RandomAccess. ArrayList é implementado em acesso aleatório, mas LinkedList não. Você também pode usar o loop for aprimorado ou o Iterator para atravessar.
  • Comentário: O alicerce não é forte, o chão treme! Com um pouco de conhecimento, eu coloco o ferro velho!

Três, resumo

O código bom é o mesmo, o programa ruim valoriza e aumenta o salário! Esses códigos tóxicos demonstraram vividamente os talentos excepcionais dos programadores e também suspeitaram seriamente que o dinheiro foi dado menos!

Acho que você gosta

Origin blog.csdn.net/python8989/article/details/108468390
Recomendado
Clasificación