JavaSE
依然核桃
多写一点是一点
展开
-
线程池的种类,区别和使用场景
newCachedThreadPool:public static ExecutorService newCachedThreadPool() { return new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, ...转载 2020-03-13 21:21:07 · 343 阅读 · 0 评论 -
获取上一个自然周的、上一个自然月的起始时间范围
一般统计经常用的时间范围,在此提供两个经常用到,时间范围取每个月一号零时至下月一号零时之间例如:当前日期是 20190910 20190801 00:00:00 —— 20190901 00:00:00 public static List<Date> getLastMonth(){ Calendar calendar = Calendar.getInstan...原创 2019-09-10 21:36:39 · 1477 阅读 · 0 评论 -
微信小程序登录授权、获取用户敏感信息、解密手机号,javax.crypto.IllegalBlockSizeException: last block incomplete in decryption
//小程序的key和秘钥 private final String wechatAppId = ""; private final String wechatSecretKey = " "; private final String grantType = "authorization_code"; //根据微信登录返回的code获取解密的key的接口 ...原创 2019-07-23 18:14:49 · 3464 阅读 · 0 评论 -
java实现redis分布式锁,已经过实际线上环境测试
这两天重构之前的项目线上测试,发现线程池总是很快就满了,打印了线程池日志,发现报错提示数据库死锁,查看数据库日志定位到具体的sql和数据表,发现该表有五个地方修改,纠结之下暂时放弃了事务处理;然后上线,运行一段时间后仍然是会有部分线程长时间获取不到锁。仔细分析设计到这部分的代码,包括锁的实现,并简单修改了下,上线后未出现问题。今天打算重新整理下,偶然实现之前的代码和网上的部分博客完全一样!!!...原创 2019-07-11 18:07:41 · 293 阅读 · 0 评论 -
java采用三方工具包自动判断文件编码 两种方式
第一种我试过了不是很准,网上有人说是通过统计概率判断文件编码的再此处记录,UTF8的CSV文件用wps打开修改后保存,再用notepad打开显示为GB2312,该方法读取的编码格式为 UTF-16BE,按此格式读取文件出现乱码;用excel2013打开修改后保存,再用notepad打开,看见格式仍然是GB2312,该方法判断文件编码格式为Big5,按此格式读取文件出现乱码;jar包...原创 2019-07-01 18:04:52 · 1586 阅读 · 0 评论 -
多层for循环中空指针问题排查和思考
首先说下问题出现的背景,最近重构公司老项目老项目:spring+hibernate+dubbo+ehcache+mysql新项目:springboot+myBatis+dubbo+redis+mysql该项目完全是向外提供dubbo服务,因为没有页面,通过telnet测试dubbo接口;测试接口的时候,发现空指针问题,指向一个三目运算符,肉眼看半天没有找到问题,于是catch异常顺...原创 2019-05-31 19:47:05 · 1514 阅读 · 0 评论 -
volatile 底层实现 简要说明
当多个线程进行操作共享数据时,可以保证内存中的数据可见。其原理是它调用了计算机底层代码叫内存栅栏,它时时刻刻把缓存当中的数据刷新到主存当中,可以理解为它的操作就是在主存当中完成的。使用了Volatile关键字后效率也会相对低一些,因为JVM底层有个优化重排序,如果使用了Volatile关键字修饰后不能重排序了...原创 2019-03-06 13:58:46 · 228 阅读 · 0 评论 -
DBCP连接池 poolpreparedstatements mysql
https://blog.csdn.net/luyaran/article/details/69397528http://www.360doc.com/content/14/1104/09/1073512_422357018.shtml转载 2018-05-18 10:04:05 · 885 阅读 · 0 评论 -
Java反射:类名.class、class.forName()、对象.getClass区别 详解
1.Class a=A.class; 说明:JVM将使用类A的类装载器,将类A装入内存(前提是:类A还没有装入内存),不对类A做类的初始化工作.返回类A的class的对象Java编程思想P319,建议使用“.class”的形式,以保持与普通类的一致性;当使用“.class”来创建对class对象的引用时,不会自动地初始化该class对象,初始化被延迟到了对静态方法(构造器隐式地是静态的)或者非原创 2016-07-21 18:48:21 · 694 阅读 · 0 评论 -
java常量池概念,String,Integer等包装类对常量池的应用
在class文件中,“常量池”是最复杂也最值得关注的内容。 Java是一种动态连接的语言,常量池的作用非常重要,常量池中除了包含代码中所定义的各种基本类型(如int、long等等)和对象型(如String及数组)的常量值还,还包含一些以文本形式出现的符号引用,比如: 类和接口的全限定名; 字段的名称和描述符; 方法和名称和描述符。 在C语言中,如果转载 2016-06-27 15:47:59 · 3979 阅读 · 0 评论 -
触摸java常量池
java常量池是一个经久不衰的话题,也是面试官的最爱,题目花样百出,小菜早就对常量池有所耳闻,这次好好总结一下。 理论 小菜先拙劣的表达一下jvm虚拟内存分布: 程序计数器是jvm执行程序的流水线,存放一些跳转指令,这个太高深,小菜不懂。 本地方法栈是jvm调用操作系统方法所使用的栈。转载 2016-06-27 14:58:41 · 513 阅读 · 0 评论 -
String放入运行时常量池的时机与String.intern方法解惑
运行时常量池概述Java运行时常量池中主要存放两大类常量:字面量和符号引用。字面量比较接近于Java语言层面的常量概念,如文本字符串、声明为final的常量值等。而符号引用则属于编译原理方面的概念,包括了下面三类常量:- 类和接口的全限定名(包名+类名)- 字段的名称和描述符- 方法的名称和描述符运行时常量池位置运行时常量池在JDK1.6及之前版本的JVM中转载 2016-06-27 15:37:26 · 1877 阅读 · 3 评论 -
float,double等精度丢失问题
问题提出:12.0f-11.9f=0.10000038,"减不尽"为什么?来自MSDN的解释:http://msdn.microsoft.com/zh-cn/c151dt3s.aspx为何浮点数可能丢失精度浮点十进制值通常没有完全相同的二进制表示形式。 这是 CPU 所采用的浮点数据表示形式的副作用。 为此,可能会经历一些精度丢失,并且一些浮点运算可能会产生意外的结果。转载 2016-06-08 15:38:59 · 541 阅读 · 0 评论 -
正则表达式基本语法
两个特殊的符号'^'和'$'。他们的作用是分别指出一个字符串的开始和结束。例子如下:"^The":表示所有以"The"开始的字符串("There","The cat"等);"of despair$":表示所以以"of despair"结尾的字符串;"^abc$":表示开始和结尾都是"abc"的字符串——呵呵,只有"abc"自己了;"notice":表示任何包含"notice"的转载 2016-05-12 21:14:53 · 281 阅读 · 0 评论 -
回调函数(callback)是什么
作者:futeng链接:http://www.zhihu.com/question/19801131/answer/26586203来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。前言在Java社区的各种开源工具中,回调方法的使用俯拾即是。所以熟悉回调方法无疑能加速自己对开源轮子的掌握。网上搜了一些文章,奈何对回调方法的介绍大多只停留在什么转载 2016-04-16 23:22:20 · 485 阅读 · 0 评论 -
intValue、parseInt、valueOf 方法区别及其使
intValue是把Integer对象类型变成int的数据类型;parseInt是吧String 变成int的数据类型;Valueof是吧给定的参数转化成对象类型;// 第一个不常用Integer a_=new Integer(123); // a_是Integer类型int a=a_.intValue(); // 转化为i原创 2015-10-27 22:18:13 · 2848 阅读 · 0 评论 -
委托机制的具体含义
当Java虚拟机要加载一个类时,到底派出哪个类加载器去加载呢?首先当前线程的类加载器去加载线程中的第一个类(假设为类A)。 注:当前线程的类加载器可以通过Thread类的getContextClassLoader()获得,也可以通过setContextClassLoader()自己设置类加载器。如果类A中引用了类B,Java虚拟机将使用加载类A的类加载器去加载类B。还可以直接调用Class转载 2015-10-27 22:14:13 · 606 阅读 · 0 评论