
java
文章平均质量分 67
zlj1217
这个作者很懒,什么都没留下…
展开
-
HashMap拾遗(一)
开始HashMap是在开发工作中经常使用的集合类之一,熟悉其源码应该是基本要求。这篇文章对jdk1.8版本中的HashMap的一些常用方法的源码进行个记录。ps:这篇文章没有对其中的树化进行深究,比如提供的TreeNode内部类的结构和在扩容、Hash碰撞的时候的静态方法,之后有时间再研究下。源码分析1.1定义的变量常量 /** * The default initia...原创 2020-04-11 14:03:57 · 269 阅读 · 0 评论 -
MySql+Mybatis+Druid:sql injection violation, multi-statement not allow
在测试一个mybatis批量更新的时候,报了sql injection violation, multi-statement not allow 的错误,和下面转载的博客一样,我也是以为连接数据库的url上没有加上支持批量的参数,然后就改了下:jdbc.url=jdbc:mysql://192.168.11.107:3306/alarm_db?allowMultiQueries=tru转载 2017-09-01 18:05:57 · 1071 阅读 · 0 评论 -
bigDecimal作为参数传入方法中累加的坑
结果是第一个输出0 第二个输出2 这个与深拷贝和潜拷贝有关 详见 http://blog.youkuaiyun.com/will_awoke/article/details/39026681 bigDecimal作为参数传入一个方法中 累加之后返回的是一个新的对象 出方法之外和test中定义的bigDecimal对象不是一个 对象。如果要传入方法中做处理 一定要拿到这种不可原创 2017-09-01 17:47:49 · 14716 阅读 · 1 评论 -
查看本地起工程部署war包的地址位置
在本地去起psi工程的时候,报了一个类找不到的异常,显示在一个配置文件中的注入类是找不到。因为之前不了解本地用tomcat去运行时候的原理,所以一直在工程中maven 依赖中的包里去找这个类,但是发现这个包确实依赖了进来,但其实是在部署war的地方找不到这个类,这时候学习了看本地起工程时 war包 的地址。查找war包的地址:原创 2017-08-21 15:09:43 · 3034 阅读 · 0 评论 -
eclipse debug 插入数据库规定能时 crtl+shift+i 的一个坑
1.在debug时,对插入待采购商品记录进行debug时,去看sqlsession执行insert方法之后的返回值确定插入数据库几条时,发现放掉断点之后往数据库中插入双倍甚至三倍的记录数。排查了很久,结果是在debug这一行的时候已经执行一遍插入,之后会再执行一次操作。。。。这个坑真的只有踩过才知道吧。。。。其实debug时的crtl + shift + i 是 ins原创 2017-08-21 14:29:36 · 522 阅读 · 0 评论 -
PropertyDescriptor类 初接触
用到的场景:在写推送MQ消息的时候,想一个sendMessage 类去 推送不同的 队列名。首先用一个Constant类存放了不同的MQ的推送的队列名字 是用@value注入的,里面有多个队列名字,其实对应着这个Constant不同的属性。现在就是将这些队列名字对应的属性通过一个键值(可以在数据库中加个字段,也可以前端交互)存放到一个Map中去,在调用这个类的时候,循环map取出队列名对应的原创 2017-07-27 10:34:44 · 9253 阅读 · 0 评论 -
SLF4J 日志门面的使用
1.什么是SLF4J ?SLF4J = Simple Logging Facede For Java (简单日志门面),是作为各种日志框架的一个简单外观或者抽象,其中日志框架 比如 java.util.logging,log4j,logback等。它相当于一个服务的接口,具体的日志功能是有其中的日志框架去实现的,slf4j 可以在部署的时候接上想要使用的日志框架。这里知道原创 2017-07-25 17:05:23 · 1124 阅读 · 0 评论 -
在做业务时重写equals方法也要重写hashcode方法
在java中会有许多编码规范,这会使你在实现功能的时候避免许多坑。这里就是记录学习一个编码规范:在业务上要判断两个对象的内容是否相等,不要自己写方法(isSame)去判断,而是应该去重写Object类的equals方法,(就像String类一样)。这个时候就能在list 中去支持 如果插入两个业务上想让其相同的对象(比如Person的name相等我就认为这两个对象相等)person1 per原创 2017-07-09 18:36:50 · 270 阅读 · 0 评论 -
Float.isNaN() 方法
在看HashMap源码的时候,看到初始化一个HashMap的方法时,对传入的一个float型的 装载因子参数进行了校验Float.isNaN(loadFactor)一开始不是很理解这个方法,就去查询了一下:JDK中float和double有一个方法isNan,该方法用于描述非法的float,经过多次运算float值可能会出现非法情况,如除数为0.0在Float中NaN实际上是引用类型,原创 2017-07-21 09:32:59 · 7106 阅读 · 0 评论 -
java关键字 transient 和 关键字 volatile
最近在看HashMap的过程中去了解啦java 的两个关键字,transient 和 volatile 。1.transient 我们都知道实现serializable接口可以实现java对象的序列化和反序列化,但如果不想序列化该对象其中的一个属性,可以在这个对象类中用transient关键字修饰该变量,被修饰的这个变量在序列化的过程中不会像其他变量一样进行串行化。代码举例:这里不希望原创 2017-06-14 15:16:33 · 352 阅读 · 0 评论 -
新知识杂记——2017/6/12
1.自动装箱 自动拆箱 在写代码时 返回值一般都是用Integer 和 Long 一般有的属性(id)也是这两个包装类 而我们在不同的业务场景中需要根据逻辑去判断这些属性等不等于0 这时可以用== 但是要去判断和一个Integer的对象的值是否相等 这里要用equals 方法!否则只是比较这两个Integer变量的地址值是否相等,从而达不到业务场景的逻辑要求。例如见下图在Map中的循环:原创 2017-06-12 23:23:11 · 283 阅读 · 0 评论 -
新知识杂记-2017/6/11
1.Map.Entry方法的使用:Map是java中的接口,Map.Entry是Map的一个内部接口。Map提供了一些常用方法,如keySet()、entrySet()等方法,keySet()方法返回值是Map中key值的集合;entrySet()的返回值也是返回一个Set集合,此集合的类型为Map.Entry。Map.Entry是Map声明的一个内部接口,此接口为泛型原创 2017-06-11 11:44:42 · 277 阅读 · 0 评论 -
return "cartSuccess" 和 return "redirect:/cart/cart.html" 的区别
在SpringMVC中转发和重定向最重要的区别就是:应用场景不同,换句话说,就是需求不同。如果是直接放回到jsp页面:则如下边两种方式均可。 1· @RequestMapping("/add/{itemid}") public String addCart(@PathVariable long itemid,int num, HttpServletRequest req原创 2017-05-30 23:24:15 · 1341 阅读 · 0 评论 -
最近了解到的知识点
近期更新博客比较少了 因为工作比较忙了吧。 这里记录一下最近了解到的知识点:1.navicat 工具 在执行insert的时候 会为tinyint类型的 not null的字段自动插一个0 而在代码运行过程中是不会去自动补0的。这个时候就会报错(表设计为not null 但是插入的为null)2.注解 @RestController 和 @Controller 的区别:原创 2017-12-21 17:33:02 · 256 阅读 · 1 评论 -
一道题的思考
题目在小马哥的每日一问中看到了一道这个题:输出什么?。当时看错了在static块中的代码,就毫不意外的答错了= =,这个题其实没有看起来那么简单,这里去记录下这个题。小马哥这个每日一题的系列有很多比较"坑"的题,一般第一遍都比较难答对,推荐每天没事的时候可以去思否上看看这个题,也算拾遗一些基础~再来看看这个问题的代码:public class Lazy { private sta...原创 2019-08-04 18:16:08 · 356 阅读 · 0 评论 -
java枚举拾遗
前言java枚举是在开发过程中用的最多的类,这里对java之前的枚举常量类和枚举做了一个分析,并且对枚举相关知识拾遗。枚举类在出现枚举之前,通常是一个final类去表示"可枚举"这个概念,比如下面这个列举数字的枚举类/** * 模拟枚举类 (枚举类:在enum出现之前的表达 可枚举的含义的类) * 通常 private 构造函数 * final class * private st...原创 2019-06-14 17:42:11 · 256 阅读 · 0 评论 -
深拷贝和浅拷贝
深拷贝与浅拷贝对对象的深拷贝和浅拷贝我们并不陌生。(1)浅拷贝:在浅拷贝中,如果原型对象的成员变量是值类型,将复制一份给克隆对象;如果原型对象的成员变量是引用类型,则将引用对象的地址复制一份给克隆对象,也就是说原型对象和克隆对象的成员变量指向相同的内存地址。简单来说,在浅拷贝中,当对象被复制时只复制它本身和其他包含的值类型的成员变量,而引用类型的成员对象并没有复制。在Java中,通过覆盖O...原创 2018-12-24 20:37:34 · 221 阅读 · 0 评论 -
java集合类的一些总结——Arrays.asList和Guava操作集合
使用背景总结一下最近项目中使用到集合的两个点,一个是Arrays.asList这个方法使用的坑,另一个是利用Guava的Sets工具类去求并交集。使用总结Arrays.asList的坑先上结论:Arrays.asList这个方法不适用于基本类型:byte,short,int,long,float,double,boolean该方法将数组和列表动态链接起来,当其中一个更新后,另一个也会...原创 2018-12-16 02:15:39 · 2503 阅读 · 0 评论 -
Java36讲总结(一)——Java平台型的理解
背景最近看了一点点极客时间上的《Java核心技术36讲》,打算把一些自己感兴趣或者不知道的点总结到博客中,方便对一些知识有一些整理和拾遗。Java平台性的理解java本身是一种面向对象的语言,有两个特征,一是“write once, run anywhere”,能够非常容易的获取跨平台的能力;另外就是垃圾手机机制,Java通过垃圾收集器(Garbage Collector)回收分配内存。我...原创 2018-12-02 23:41:26 · 312 阅读 · 0 评论 -
并发编程——并发基础:守护线程和非守护线程
前言最近在复习的时候,发现一个运行线程池拒绝策略demo中的main方法在运行了之后,进程并没有关闭。看了jconsole线程池中的线程都处于waiting状态。这里是跟我设置线程池的线程工厂中的设置线程是否为后台线程有关。后台线程和非后台线程后台线程,也叫守护线程,指的是在程序运行的时候后台提供一种通用服务的线程,比如jvm里垃圾回收线程,这种线程并不属于程序中不可或缺的部分。因此,当所有...原创 2018-11-27 00:40:58 · 1616 阅读 · 0 评论 -
FastJson中的一些用法
FastJson中的一些用法总结fastJson在工作过程中经常用到的一个工具类,之前用到的最多的是在输出日志的时候的对java对象输出序列化之后的json字符串,最近在消费消息端也用到了JsonObject这个类的一些功能,做个简单的FastJson功能类的查漏补缺。JSONObject通过观察fastJson的源码我们可以发现JSONObject是实现了Map<String, Ob...原创 2018-11-22 00:47:49 · 680 阅读 · 0 评论 -
并发编程——ThreadPoolExecutor源码分析(一)
前言线程池是并发编程中最重要的应用之一,使用线程池可以防止大量的创建和销毁线程的过程,可以节省很多的内存空间,提高程序的响应率和cpu的利用率,并且也可以对线程进行统一管理和监控。这里将分几篇文章介绍一下线程池的源码分析。本篇是分析ThreadPoolExecutor中的ctl变量ctl变量源码中的解释ThreadPoolExecutor中有个字段是ctl,具体来说是对线程池的运行状态和池...原创 2018-10-05 22:45:54 · 399 阅读 · 0 评论 -
validate注解做校验
前言之前也用过hibernate的校验注解,但是没有去做一个总结,这里参考一篇博客去做一个总结。简述JSR303/JSR-349,hibernate validation,spring validation之间的关系。JSR303是一项标准,JSR-349是其的升级版本,添加了一些新特性,他们规定一些校验规范即校验注解,如@Null,@NotNull,@Pattern,他们位于javax.va...原创 2018-08-19 19:50:18 · 44346 阅读 · 4 评论 -
@PostConstruct注解
简介@PostConstruct注解和@PreDestroy是两个作用于Servlet生命周期的方法注解,实现Bean初始化之前和销毁之前的自定义操作。应用场景@PostConstruct 主要用来容器初始化之前去初始化一些缓存或者配置等。执行顺序及注意事项一、执行顺序@PostConstruct注解的方法执行在 构造方法之后 和servlet三个生命周期的方法(init(...原创 2018-06-29 10:12:51 · 794 阅读 · 0 评论 -
redis 锁的一个小坑纪念一下
之前在工作的过程中做了很多锁的校验,有做并发锁校验,也有做分布式系统订单状态校验的锁,但是这次造成线上bug的代码是因为自己一个很小的失误,这次纪念一下。这次是在解决批量去操作的时候,去将要批量操作的数据去锁住,防止并发操作(分布式系统交互要注意这种并发和幂等的操作)。这里在循环中去加了redis的锁,这个倒是美什么,但是在每一步循环结束的时候去释放了锁,而且在发现bug的时候居然定位了很久。这里...原创 2018-02-08 15:30:40 · 574 阅读 · 1 评论 -
java.rmi.server.ExportExcepetion:Port already in use问题解决
在灰度环境的一个工程启动的时候报错经过排查 是因为在同一个服务器上 端口40040被占用了。这里从报错很容易看出是端口占用,但是排查一堆文件下面的时候 发现是jmx的端口占用。修改jmx端口号的是在{tomcat路径}/bin/catalina.sh脚本下去修改的。纪念一下参考的资料:http://www.jb51.net/article/83806.htm...原创 2018-02-08 15:06:23 · 983 阅读 · 0 评论 -
null == obj 和 obj == null在java中推荐前者的原因
在公司会看到代码规范中有一条是在if判空条件中要写成 if (null == obj) 而不是 if (obj == null),之前不理解这样写有什么区别,后来才知道其实就是避免把 == 写成赋值 = ,因为如果是Obj = null IDE此时不会报错;而当你写成 null = obj的话 IDE是会报错的,这里也算是一种规范。有很多同学会说防止空指针原创 2017-05-30 15:19:01 · 5345 阅读 · 7 评论 -
浏览器中F5刷新和crtl+F5的区别
做前端有时候经常遇到功能在一个浏览器中去刷新F5不实现,但是换一个浏览器之后就会实现的问题,很大一部分其实是因为浏览器的缓存问题,这也是在网页上F5和CRTL F5的区别所在,这里简单来说就是每次浏览器去刷新的时候都尽可能的去加载之前加载页面的缓存,所以点击F5会发现加载速度很快,事实上这里并没有将缓存清掉所以加载会很快,而crtl F5则会清理掉缓存像第一次加载一样,这样会解决很多因为浏览器缓存原创 2017-05-29 13:18:58 · 1877 阅读 · 0 评论 -
新知识杂记-2017/5/17
总结一些最近学习的在工作中的知识:1.代码写完之后要在source的选项中点击format格式化一下,还要记得将import中导错的没用到的包删除。再提交自己的代码。2.使用sourcetree:(1)在本地已有的开发分支上进行开发时,要注意自己的开发分支是否落后于远端的开发分支。如果落后,最好在sourcetree先拉取一下,使得本地分支与远端分支同步。注意这里有多个工程的时候要切换原创 2017-05-18 00:14:17 · 311 阅读 · 0 评论 -
Referenced file contains errors (xml文件第一行小红叉错误)
在eclipse中开发网页时,经常会遇到写xml文件时第一行无缘无故报错。在最左面的行数上面报出一个小红叉,点击查看错误信息:Referenced file contains errors (http://www.springframework.org/schema/beans......之类的。我这里是做的是spring的applicationContext.xml文件的,所以会报sprin原创 2017-03-11 22:24:17 · 65482 阅读 · 32 评论 -
Unable to instantiate Action, XXXAction, defined for 'xx' in namespace 'xx'报错解决
ssh整合中这里出现了这个错误,原因出现在无法将action中的属性初始化为bean.。具体完整报错为:http-500Unable to instantiate Action, loginAction, defined for 'login' in namespace '/'loginActioncom.opensymphony.xwork2.DefaultActionIn原创 2017-03-11 21:11:27 · 9497 阅读 · 1 评论 -
spring和hibernate的整合
前边做了spring和struts2的整合,这两个框架整合比较容易,不需要太多的改动配置文件。现在来原创 2017-03-09 11:16:00 · 239 阅读 · 0 评论 -
org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout()Ljava/lang/Integer;错误解决:
在ssm项目运行的时候报错:严重: Servlet.service() for servlet [springmvc] in context with path [/BookSystem] threw exception [Handler dispatch failed; nested exception is java.lang.AbstractMethodError: org.mybati原创 2017-03-18 22:00:43 · 7450 阅读 · 7 评论 -
hibernate中实体多对多关系配置初体验
描述:这里要做 学生-课程 之间多对多关系 的hibernate配置。首先分析两个表学生表 Student(id,name,sex,pwd,phone,grade,photo)课程表 Course(id,name,type,hours)一、数据库和对象的分析(1)数据库的设计:利用中间表要设置多对多关系,就要在这两个表之间设置中间表 Student-Cour原创 2017-02-26 17:51:40 · 306 阅读 · 0 评论 -
Spring AOP基本原理及AOP两种配置方式初体验
在spring中,除了IOC(控制反转)之外,还有一个重要特性就是面向切面编程。AOP=面向切面的编程=Aspect Oriented Programming实现基本原理关键词:动态代理拓展程序功能、申明式事务管理1.Spring AOP 的一些术语:(1)切面(Aspect) 要增加什么功能?例如事务管理,日志管理,权限管理,异常处理(2)连接点(Joinpoint原创 2017-03-08 21:21:51 · 378 阅读 · 0 评论 -
mybatis+springmvc:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
在springmvc和mybatis整合开发的过程中,遇到了org.apache.ibatis.binding.BindingException: Invalid bound statement (xxx not found)这样的错误。从字面上理解这个错误很容易,就是不合法的方法和语句,也就是没找到xxx所对应包下接口中定义的方法。这个错误原因很多,有可能是很多种情况导致Mapper int原创 2017-03-18 11:55:08 · 570 阅读 · 0 评论 -
jQuery EasyUI框架 modalwindow 初体验
jQuery EasyUI是前端中设计页面的框架,功能比较强大,这里我用到的只是下载之后demo示例中的 modalwindow这个显示效果。还有很多其他页面组件的设计上可以使用这个框架,可以使前端变得更美观。官方demo中的效果如图:这里我用到的是在点击修改按钮,就跳出修改的框,同时传入这个网页框要修改的信息,在网页框的保存按钮上注册事件,提交到后台中更新教室信息。1.将下载原创 2017-02-15 11:44:00 · 861 阅读 · 0 评论 -
hibernate 数据分页显示 及 分页导航栏的设置
一个小案例 hibernate+struts2 对一个教室信息进行分页显示只是对一个教室信息(教室名字,教室地址)在页面上进行简单分页,没有多加美工的前端处理,初学者学习javaee如果有不足的地方还请批评指正。这里是学生管理系统项目的小分支,一些地方是默认作好的:1.这是教室模块的实现,在页面上显示了所提交到数据库表中的教室信息,要进行分页显示2.这里前端对应着room.原创 2017-02-14 19:59:08 · 1543 阅读 · 0 评论 -
struts2上传照片到服务器端并以上传时间命名照片文件
要做的是struts2中在前端表单中上传照片到服务器(TOMCAT),这里是上传一个学生信息的照片,学生表的字段为Student(id,name,sex,phone,grade,photo)这里的photo字段是string类型,存放的是存储照片的相对路径。1.前端页面的一些处理:(1)这里的表单必须设置属性 method="post" enctype="multipart/form原创 2017-02-11 13:51:41 · 1505 阅读 · 0 评论 -
ssh整合环境搭建和spring IoC-xml文件配置初体验
项目功能描述:一个表单提交用户名和密码注册提交到数据库中或者保存在文本文档中。由于是第一个spring项目,所以只是写一下自己怎么简单搭建环境和配置用到的框架:struts2 、spring、hibernate一、ssh基本环境搭建1、导入包分析:需要导入的包:(版本可不一样)(1)通用包(7个): commons-dbcp2-2.1.jarcommo原创 2017-03-01 08:48:54 · 367 阅读 · 0 评论