2 Peacock__

尚未进行身份认证

记录自己学习的一点一滴

等级
博文 85
排名 7w+

HashSet判断重复原理

这个知识点完全属于今天的意外收获\(≧▽≦)/首先会调用Object的hashCode方法判hashCode是否已经存在,如不存在则直接插入元素;如果已存在则调用Object对象的equals方法判断是否返回true,如果为true则说明元素已经存在,如为false则插入元素。注:图片是借鉴他人博客,我再上面添加了一些额外标记首先我们看HashSet的源码中add方法...

2019-06-13 17:55:51

hashCode、为什么要同时重写Object的hashCode()和equals()方法

本想研究一下HashMap的实现原理,但是开篇先讲了散列函数hashCode(),于是呢........内容就转变了。hashCode是对象的哈希值,主要的作用是用来快速查找对象在哈希表中的位置,而不是内存地址。hashCode()是Java顶级对象Object中的九大方法之一,也就是说每个java对象都有自己的hashCode。通过源码可以看出hashCode()是native方法,也就...

2019-06-13 16:17:43

利用阿里EasyExcel实现excel的生成并下载

Java解析、生成Excel比较有名的框架有Apachepoi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。easyexcel重写了poi对07版Excel的解析,能够原本一个3M的excel用POIsax依然需要10...

2019-06-10 16:51:23

Bootstrap Table后台分页(Java)

由于维护的功能模块数据量较大,所以尝试把前台分页改为后台分页,提升用户体验。首先,在table加载的时候就需要指定我们必需的参数,例如:从哪一条数据开始,一次查询多少条数据,还可以附加一些定制化的参数。让表格的查询带着参数访问后台,示例如下://初始化Table$table.bootstrapTable({url:contextPath+"后台URL"...

2019-06-10 10:57:17

Mybatis自定义SQL语句设置数据以Map形式返回

最近工作中遇到需要自己通过mybatis写自定义的SQL,为了得到数据能够直接使用,需要让SQL以Map数据格式返回结果集,之前写过的自定义SQL都是直接返回查询到的数据,并没有规定Map类型,所以这次也算是个新体验^_^记录一下吧1、在Mapper中定义接口/***拓展SQL:查询全部单位信息Map*/@MapKey("id")//用于指定i...

2019-05-31 16:03:10

MySQL索引的学习与使用

最近在做的模块数据量较大,且业务需求全部是查询,所以尝试通过添加索引来提升查询速度。既然学了就记下吧。索引可以在很大程度上提升数据的检索速度。索引实际上也是一张表,这个表里会保存索引字段,并指向实体记录。MySQL只对以下操作符才使用索引:<,<=,=,>,>=,between,in,以及某些时候的like(不以通配符%或_开头的情形)。而理论上每张表里面最多可创建16...

2019-05-29 12:07:35

MySQL中的any_value()函数

MySQL5.7之后,sql_mode中ONLY_FULL_GROUP_BY模式默认设置为打开状态。ONLY_FULL_GROUP_BY的语义就是确定selecttargetlist中的所有列的值都是明确语义,简单的说来,在此模式下,targetlist中的值要么是来自于聚合函数(sum、avg、max等)的结果,要么是来自于groupbylist中的表达式的值。网上有很多...

2019-05-28 16:21:10

杂七杂八的小小知识~~时间相关

1、JS获取当月最后一天(可以自动适应不同月份的不同天数)//获取当前时间(例如:2019-05-27)vardate=newDate();//如果想要获取指定年月的,就通过date.setFullYear();date.setMonth();分别设置年月(月份记得-1)//获取下个月的第一天(例如:2019-06-01)varnextMonthFirstDay=newD...

2019-05-27 18:25:02

杂七杂八的小小知识~~mysql中将JSON格式数据中某属性值作为查询条件以及mysql的字符串的截取、替换函数使用

最近做的这个账单模块数据列项较多,例如消费金额相关会有资源包抵扣,原始金额,应付金额,现金支付,优惠金额,储值卡抵扣,优惠券抵扣,代金券抵扣,未结清金额等多项数据,为了让数据段更加直观、简洁,我将这些消费相关的列项数据都以JSON格式存入了一个“消费详细”字段里。存进去的大致格式如下图:但是我在完成功能需求的时候出现了问题第一个问题:我需要汇总consume_details中payme...

2019-05-23 18:37:35

Java如何捕获处理线程运行期间的非受检异常

我们在重写Thread的run()方法时,是被限制无法向上抛出异常的,而且java区分受检异常(checkedexception)和非受检异常(uncheckedexception),可能出现受检异常的代码,编译器会强制要求我们通过try/catch的方式进行异常处理。但是非受检异常不会被强制要求处理,如果我们想在线程里处理非受检异常,那么就需要使用Thread提供的UncaughtExcep...

2019-05-06 17:02:45

模拟10个线程抓取数据,限制一次性最多有5个线程工作

packagecom.thread.demo.unit2;importjava.util.ArrayList;importjava.util.Arrays;importjava.util.LinkedList;importjava.util.List;/***@Author:Peacock__*@Date:2019/5/515:27*/public...

2019-05-05 16:02:16

sleep()与wait()的区别

1、sleep是Thread类的方法,wait是Object类的方法2、sleep不需要唤醒,wait需要唤醒3、sleep不会释放对象锁,wait会释放对象锁4、sleep不依赖monitor对象,而wait依赖monitor对象我觉得第1、2项没什么需要额外解释的了,我们通过代码验证一下第3、4项吧sleep不会释放对象锁,wait会释放对象锁1.sleep()...

2019-04-29 19:05:20

结束线程的几种方式

我们知道Thread.stop方法已经被标记为过时方法了,因为使用stop会有很大一些问题。那么除了stop方法,我们还能用以下方法来实现结束线程功能1、维护一个线程是否结束的flag2、使用interrupt3、定义守护线程维护一个线程是否结束的flagpackagecom.thread.demo;importjava.util.concurrent.TimeUni...

2019-04-29 15:40:35

【转】深入理解Java并发之synchronized实现原理

大牛总结的很到位、受益匪浅,感兴趣的小伙伴一起学习!!!!博客链接:https://blog.csdn.net/javazejian/article/details/72828483

2019-04-29 11:01:45

Thread中yield、join、sleep(0)区别

Thread.yield会让当前线程让出持有的锁,让包含自己在内的其他线程去争抢锁,自己依然有抢到锁的可能性。Thread.join会让调用当前线程的线程处于阻塞状态,直至当前线程执行完毕。Thread.sleep(0)只是短暂的休眠,并不会让出锁,依然是锁的持有者。...

2019-04-29 10:55:05

synchronized关键字实现原理

上篇文章中已经学习了synchronized关键字的作用,以及使用方式,这篇来学习一下synchronized的底层实现原理。首先需要知道,synchronized对象锁的指针指向的是一个monitor对象(ObjectMonitor由C++实现的),每个对象都有对应的monitor,对象的monitor随对象的创建而创建,或随线程获取对象锁而创建,随销毁而销毁。我们需要关注的是ObjectM...

2019-04-28 17:42:51

synchronized关键字

说在前面:文章内容为自己学在习过程中对知识的理解,如有不正确的之处,欢迎大家指正~~共同进步!!!在日常开发工作,很多情况会用到多线程,那么在多线程运行的环境下,就很难避免会涉及到一些共享数据。若出现多个线程同时访问操作同一共享数据的情况,可能会造成数据混乱的现象,破坏数据一致性。这个时候就要考虑使用“锁”来解决这一现象。“锁”见名知意,将某物锁起来,不让其他人用。那么在我们Java程序开发中...

2019-04-25 18:05:51

Thread中的join()方法

Thread中的join()方法用来让调用线程等待当前线程执行完毕再执行测试代码:情景一:不调用join()publicstaticvoidmain(String[]args)throwsInterruptedException{Threadt1=newThread(){@Overridep...

2019-04-22 15:35:21

守护线程(Daemon)

守护线程是程序运行时,后台提供的一种通用服务的线程。Java线程分为两种:用户线程(非守护线程)、守护线程用户线程和守护线程本质上没什么区别,唯一的区别在于JVM的退出,如果用户线程全部退出运行。不管是否存在守护线程,JVM都会退出,因为即使存在守护线程,他也没有可守护的用户线程了。垃圾回收线程是典型的守护线程,当JVM开始运行的时候,垃圾回收线程就一直在后台默默守护,对JVM执行过程中产...

2019-04-22 11:12:36

线程生命周期、重要知识点

当我们通过Threadt1=newThread()创建一个线程的时候,其实这个时候t1不能代表一个线程(通过JConsole看不到这个线程),调用start()方法后,才会是一个真正的线程(通过JConsole可以看到这个线程)。New表示创建一个线程Start表示开启线程Runnable表示处于就绪状态,随时可以开始执行Running表示被分配到了CPU执行权后就具备了...

2019-04-22 10:28:39
奖章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周上午根据用户上周的博文发布情况由系统自动颁发。
  • 勤写标兵Lv2
    勤写标兵Lv2
    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周上午根据用户上周的博文发布情况由系统自动颁发。