分类 JAVA 下的文章

Integer 源码方法学习_


求 32位无符号整数 前导0个数

注意使用场景,一般会用该方法的前导0个数不会少

汇编中逻辑右移可直接用指令 SHR reg/men ,n 即物理上 a>>2 比 (a>>1)>>1 快

首先想到的肯定是循环遍历

public static int numberOfLeadingZerosByLoop(int i){
        if(i==0)return 32;
        int n=0;
        while(i>>31==0){
            n++;
            i<<=1;
        }
        return n;
    }

实现简单,但平均时间略高


动手写一个并发缓存框架 历程


首先给上我们的耗时任务,和简单web框架搭建

提供一个0-20的数字,计算前n项和,为了不使得计算太快 每加一次 sleep

package com.france.servlet;

import java.io.IOException;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class TaskServlet implements Servlet{

    @Override
    public void service(ServletRequest req, ServletResponse resp)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
            try {
                int num=Integer.valueOf(req.getParameter("num"));
                if(num<=0)throw new Exception("数字<=0");
                if(num>=20)throw new Exception("数字>=20");
                int sum=calculateSumWithSleep(num,500);
                System.out.println("计算得到的结果是:"+sum);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    }
    private int calculateSumWithSleep(int num,long ms){
        int sum=0;
        for(int i=0;i<=num;i++){
            sum+=i;
            try {
                Thread.sleep(ms);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return sum;
    }

    @Override
    public void destroy() {
        // TODO Auto-generated method stub

    }

    @Override
    public ServletConfig getServletConfig() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public String getServletInfo() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void init(ServletConfig arg0) throws ServletException {
        // TODO Auto-generated method stub

    }

}


Java Executors 学习笔记


创建ThreadPoolExecutor

  • ThreadPoolExecutor executor=(ThreadPoolExecutor)Executors.newCachedThreadPool();
    • 为每个接收到的任务创建一个线程(如果池中没有空闲的线程)
    • 提交大量的任务,并且它们有很长的(执行)时间,会使系统过载和引发应用程序性能不佳的问题
  • ThreadPoolExecutor executor=(ThreadPoolExecutor)Executors.newFixedThreadPool(5);
    • 创建固定大小例如5的ThreadPoolExecutor
    • 提交超过最大线程数的任务,剩下的任务将会被阻塞,直到有空闲的线程来处理它们


记一次帮小波的洗锅过程


起步

本来是不需要碰到的坑,出于意外还是碰上了,问题处理了一晚上,太晚就没记录了,今天记录下。

起源

这是一个javeEE的SSH搭建过程引发的血案。本案的真凶小波,按照网上的教程开开心心搭建框架。运行,结果很OK,没有报错,过了几天,当他往框架里开始书写Action,和我说他登录就差界面改一下了(其实他都还没运行过)。小波根据以往的经验正常的往struts.xml写着配置,写着beans。启动后雪崩。。。。。


java与设计模式


  所谓设计模式(design pattern)指的是在软件设计中总结的成功的经验方法,这些方法可以帮助软件开发者开发出高效的的软件,即通过前人经验的总结以节约时间和避免不必要的错误。   设计模式不同于架构模式,它是一种中层的模式,即对局部问题给出解决方案。每一种设计模式都可以通过:名称,问题,解决方案及效果来确定。   同时,众多设计模式又可以分为:创建型模式,结构型模式,行为型模式。他们的区别在于侧重点不同,创建型侧重于对象的创建方式,结构型侧重于对象间的关联方式,行为型侧重于算法和对象间的责任分配以及对象间的交互。

  1. 创建型模式:工厂方法和抽象工厂模式,生成器模式,单例模式
  2. 结构型模式:组合模式,适配器模式,外观模式,桥接模式
  3. 行为型模式:迭代器模式,访问者模式,命令模式,中介者模式,策略模式,状态模式