1.Double比较问题

public class Double比较问题 {
	public static void main(String[] args) {
		Double a = 0.10000000000000001;
		Double b = 0.10000000000000000;
		//直接比较不行
		if (a > b) {
			System.out.println("xxx");
		}
		//这样ok
		if (a.compareTo(b) >= 0) {
			System.out.println("sssssss");
		}
        //这样ok
        if (compareTo(a, b) >= 0) {
			System.out.println("ssssss");
		}
		/**
		 * 因为double的精度为16位,超过16位词方法不行 了。
		 * 不过一般生产不存在16精度的数据。
		 */
		if (a.doubleValue() > b.doubleValue()) { 
			System.out.println("11111111111111");
		}
	}
	   /**
     * 比较两个double数据类型
     * @param d1
     * @param d2
     * @return
     * 2018年4月16日
     */
    public static int compareTo(Double d1, Double d2) {
    	 BigDecimal data1 = new BigDecimal(d1); 
		 BigDecimal data2 = new BigDecimal(d2);
		 return data1.compareTo(data2);
    }
}

2.代码优化问题

iterator速度>普通for循环>foreach循环

个人觉得都是扯淡,主要看循环里面的业务逻辑是否耗时。

string str=“1”+“2”+“3”

创建了 对象1 对象12 对象123 三个对象

vector 底层是数组,移除最后一个快,移除第一个要调整其他的下标,慢。
for循环优化

for(int i=0;i<a.size();i++) 一次;多次;多次 for(int i=0,int length=a.size();i<lenth;i++)

for循环内的对象先在外部声明,减少堆栈内存的使用。for循环内创建string字符串是一个常量,符合懒加载策略,常量不会影响性能。

3.判断是否手机微信浏览器打开

java代码
	/**
	 * 判断是否从微信端进入
	 */
	protected boolean isWechatAccess() {
		boolean isWechat = true;
		String agent = getRequest().getHeader("user-agent");
		if (agent == null || !agent.contains("MicroMessenger")) {
			isWechat = false;
		}
		return isWechat;
	}
js
function isWeiXinClient() {
    var ua = navigator.userAgent.toLowerCase(); 
    if (ua.match(/MicroMessenger/i)=="micromessenger") { 
        return true; 
    } else { 
        return false; 
    }
}

alert(isWeiXinClient());

4.label绑定input触发事件

通过点击label事件来触发选择,获取焦点。使用label的for绑定id点击标签即可触发选择对应id的input。

1552468853223.png

<html>
<body>

<p>请点击文本标记之一,就可以触发相关控件:</p>

<form>
<label for="male">Male</label>
<input type="radio" name="sex" id="male" />
<br />
<label for="female">Female</label>
<input type="radio" name="sex" id="female" />
</form>

</body>
</html>

5.jq获取checkedbox选中的值

使用 jquery 获取一组或者单个 checkbox 的选中状态的值。下面通过一个示例进行说明,假设现有一页面有一组 checkbox 的 name 的值为 id ,那么获取这组 name=id 的checkbox的值的方法如下: Js代码

var id_array=new Array();  
$('input[name="id"]:checked').each(function(){  
    id_array.push($(this).val());//向数组中添加元素  
});  
var idstr=id_array.join(',');//将数组元素连接起来以构建一个字符串  
alert(idstr);  

另外 jquery 判断单个 checkbox 是否选中以及获取选中值的方法如下:

Js代码 收藏代码

if($("#id").is(":checked")){//选中  
    alert($("#id").val());//打印选中的值  
}  
<script>
	function submit(){
		$('input[type="checkbox"]:checked').each(function(){
			console.log($(this).attr('name'));
		});
	}
	
</script>

6.jq 定时器

var timer = setInterval(function(){
		$.ajax({ 
	         type : "get",  //提交方式  
	         url : "ajaxWXFontActive?outTradeNo=" + '${outTradeNo}',//路径  
	         data : {  
	        	
	         },
	         dataType: 'json',
	         success : function(result) {//返回数据根据结果进行相应的处理
					/* result=eval('('+result+')'); */  //单个数据才需要使用
					console.log(result);
	             if (result.result == 'success') {  
	            	$('.title').html("您的终端:" + result.tid + " 激活成功");
	            	$('#img').attr("src","${pageContext.request.contextPath}/build/wechat/images/ok_icon.png");
	            	clearInterval(timer);
	             } else {  
	                 console.log(result);
	             }  
	         },
	         error : function(error){
	         console.log(error);
	        } 
	     });
	},5000);

7.毫秒转换为秒

long time1 = System.currentTimeMillis();
Thread.sleep(2000);
long time2 = System.currentTimeMillis();
System.err.println(TimeUnit.MILLISECONDS.toSeconds(time2 - time1));


long time11 = System.nanoTime();
Thread.sleep(2000);
long time22 = System.nanoTime();
System.err.println(TimeUnit.NANOSECONDS.toSeconds(time22 - time11));


用 currentTimeMillis 好点,后者不准

8.字符串写成流


 




String text = "hello";
InputStream inputStream = new ByteArrayInputStream(text.getBytes("UTF-8"));	

//文件流变字符串
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("D:\\qinshipeng\\dom4j\\student.xml")));		

9.File路径新建文件夹创建

  // 指定路径如果没有则创建并添加
File file = new File("d:\A\B\C\xxx.excel");
//获取父目录
File fileParent = file.getParentFile();
//判断是否存在
if (!fileParent.exists()) {
创建父目录文件
fileParent.mkdirs();
}
file.createNewFile();


mkdirs创建多层路径。 mkdir 前面路径如果不存在就 返回 false

10.导出zip

java poi 导出 excel 压缩成 zip 格式



 





OutputStream out = response.getOutputStream();
ZipOutputStream zip = new ZipOutputStream(out);
ZipEntry entry = new ZipEntry("xx.xls");
zip.putNextEntry(entry);
workbook.write(zip);
zip.flush();
zip.close();

11.相对路径的复制和使用

一个具体文件的文件夹,和相对路径直接取绝对路径。

        File parentFolder = new File("F:\\hexo\\vuepress\\docs\\Java学习\\IDEA学习\\README.md");
        File b = new File(parentFolder.getParent(), "../../assets/mul_thread.gif");
        String absolute = b.getCanonicalPath();
        System.out.println(absolute);
 //F:\hexo\vuepress\docs\Java学习\assets\mul_thread.gif
上次更新时间: 2024/5/7 05:59:02