- 博客(25)
- 资源 (1)
- 收藏
- 关注
原创 单例模式
package offerword.singleton_1;/** * @ClassName singleton * @Author laixiaoxing * @Date 2019/3/31 上午9:35 * @Description 单例模式 * 用途:比如说一个大对象,且基本不会更新的,只需要有一个就可以满足应用需求的,创建多个则浪费了空间 * 例子1 spring里面将be...
2019-03-31 12:34:56 190
原创 父类里面应该做什么的思考
java里核心的三个思想,封装继承多态到现在为止感觉才刚摸到了一个门槛,最近的项目里面,多了大量的功能类似 但是具体业务逻辑有不同的需求。比如说excel导入,有银行流水导入,税务报表导入等。这个时候将共同的方法抽出来,放到父类里面。父类里面只放各个子类共同的方法,不要放太多,不同的东西让子类自己实现就好了,不然父类会变得很冗杂难以维护。如果有所有子类都通用的方法,那建议做成工具类!注意!...
2019-03-30 15:27:24 145
原创 不同垃圾收集器种类的GC日志
jvm的垃圾收集器分为新生代和老年代的收集器,使用的算法不一样新生代采用复制算法,就是保留一个eden区,两个survivor区,默认是8:1:1当eden区满了,就执行minorGC将对象回收,幸存的对象就被复制到to survivor区,然后eden区另一个survivor区清空。 下一次回收重复执行以上。复制到survivor区的时候发现装不下,会被放到老年代去当来了一个对象,e...
2019-03-27 23:54:50 427
原创 使用注解和切面实现方法级权限校验
场景:界面上有很多按钮,然后需要控制权限,有的部门可以按,有的部门不能按。每个按钮都对应了后端的一个方法,因为按钮众多,来不及在前端做控制,因此就控制了每个方法对应的后台方法。1.创建一个注解:/** * @Author laixiaoxing * @Description 校验方法的权限 * @Date 下午10:54 2019/3/24 */@Documented@Re...
2019-03-27 22:57:38 967
原创 spring事务失效的问题
具体场景为:在类A里面有方法a 和方法b, 然后方法b上面用 @Transactional加了方法级别的事务,最后在方法a里面 调用了方法b, 结果发现方法b里面的事务没有生效!!实际上是这样的:在同一个类之中,方法互相调用,切面无效 ,而不仅仅是事务。这里事务之所以无效,是因为spring的事务是通过aop实现的。代码如下: @Autowired ExcelDetai...
2019-03-27 22:46:40 778
原创 java8的option避免NullPoint异常
代码里面很多判空,if (a==null) 很多问题,但是不判空,问题更多,会有空指针异常!java8提供了个option的封装工具public class testOption { public static void main(String[] args) throws Exception { //作用是将对象封装成Optional对象 //如...
2019-03-26 13:40:46 2194 1
原创 jdk7的Objetcs工具类解析
在对象比较的时候,经常需要判空,如果是数组比较,还需要遍历每个元素,在jdk7中,提供了一个工具类Objects。主要为提供空指针安全的equals、hash、toString等的相应方法。其类方法概要如下://判断两对象是否相等public static boolean equals(Object a, Object b);//深度比较两对象是否相等,用于数组等形式public st...
2019-03-26 10:16:05 210
原创 如何看懂GC日志
先在idea上设置好jvm启动参数-Xms20M 最大堆空间20m-Xms20M 最小堆空间20m-Xmn 10 新生代10m因此老年代也就只有10m了-xx:+PrintGCDetails 表示打印GC日志-xx:SurvivorRatio=8表示 在新生代中 eden区和survivor区的大小比值为8比1运行代码 private static final int _1MB ...
2019-03-26 00:17:07 7793 7
原创 Int是如何转成String的
String.valueOf(123);好奇123是怎么转为String的点开源码看了下内部调用了Integer.toString()方法那么Integer.toString() 又是怎么将int变成String的?可以看到如上代码,是将数字的每一位都转成了char[]数组的元素。而String内部其实就是维护了一个char[]数组。而将数字转为字符数组的过程就有点复杂了...
2019-03-23 15:29:34 6674
原创 java提供的反转List和反转字符串的类
反转List List<String> list=new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); System.out.println("反转之前:"+list ); Collections.reverse...
2019-03-23 15:23:03 5368
原创 服务器上如何查找日志,查找指定关键字以及周围的信息
当线上发生了bug,经常需要看日志信息找当时的信息。比如说有个日志关键字 ,需要找到那个关键字附近的所有的信息那么可以使用命令比如说grep -C周围行数 ‘关键字’ 日志文件举个例子grep -C40 ‘开始发送邮件信息’ tomcat_stdout.log查看这个日志关键字 开始发送邮件信息 范围内的日志信息这里省略了,大概是打印出这个关键字周围的40行信息。还有一直场...
2019-03-23 00:24:56 6366
原创 leetcode[1] 两数之和
package leetcode.easy;import java.util.HashMap;/** * @ClassName twoSum * @Author laixiaoxing * @Date 2019/3/20 下午2:26 * @Description TODO * @Version 1.0 *//* * @lc app=leetcode.cn id=1 lan...
2019-03-20 20:27:54 155
原创 最简单的dubbo例子
provider.xml 提供者配置这个配置就是spring的bean配置 多了几个配置项而已<?xml version="1.0" encoding="UTF-8"?><beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://dubbo.apache.or...
2019-03-19 18:11:37 707
原创 java内存模型与happens-before原则
java内存模型定义了线程和内存之间的关系,线程之间的共享变量存储在主内存中,每个线程都有一个私有的本地内存,本地内存存储了该线程以读/写共享变量的副本。本地内存是 JMM 的一个抽象概念,并不真实存在;它涵盖内存、缓存、寄存器以及其他的硬件和编译器优化。Java的内存模型抽象如下:因此,如果有人问你,java多线程中是通过什么机制进行线程通信和数据同步的,通过以上图可以得出结论,是通过共享内...
2019-03-19 00:52:58 445
原创 sql查询表的列名并转为行的形式展示
查询表的列名select column_name from INFORMATION_SCHEMA.COLUMNS where TABLE_SCHEMA=‘sfs_server’ and TABLE_NAME=‘t_funds_detail’;转为行select GROUP_CONCAT(column_name) from INFORMATION_SCHEMA.COLUMNS where T...
2019-03-18 14:52:23 2455
原创 自定义线程池的实践
/** * 自定义线程池 */public class UserDefinedThread { public static void main(String[] args) {//使用ThreadPoolExecutor定义自己的想要的线程池//核心线程数,最大线程数,最大空闲时间,时间单位,阻塞队列,线程工厂,拒绝策略 ExecutorService exec...
2019-03-18 02:09:37 139
原创 线程交替打印奇偶数(wait和notify实现以及原理简介)
wait和notify是Object的方法,不是thread的方法。Object,notify()作用是唤醒持有这个Object对象锁的线程,Object,wait()作用是让当前线程进入阻塞状态。因此 notify和wait只能用于synchronized内部,因为synchronized会指定对象锁,而wait的前提是当前线程持有锁。如果不在synchronized代码包含范围内会报...
2019-03-18 00:24:10 3911 1
原创 线程交替打印奇偶数(信号量Semaphore实现)
实现方法一,信号量思路:两个线程都持有相同的一个信号量,奇数线程启动,获取信号量,然后打印完,释放信号量,再休眠,然后偶数线程启动,获取信号量,然后打印完,释放信号量package demo6;import java.util.concurrent.Semaphore;/** * @ClassName AlternatePrinting * @Author laixiaoxing...
2019-03-17 19:34:55 2433
原创 在外部类的静态方法中不能创建内部类的实例对象
本来想在static的main方法里面创建这个内部类的对象idea提示报错因为内部类的特点就是,内部类持有外部类的引用,可以访问外部类的属性和方法,但是如果是在外部类的静态方法中进行的创建,那么就会有问题,因为外部类的静态方法创建的时候,是不需要外部类对象存在的。比如说直接 外部类类名.静态方法 这样也可以调用,这个时候外部类并没有实例化,因此内部类就无法拿到外部类的引用。解决方法,将内...
2019-03-17 18:09:05 1397 2
原创 使用抽象类和接口聚合方法
接口该接口定义了process处理逻辑 和一个返回类型的方法在process处理逻辑里面,大部分实现该接口方法 都会有一个发送mq通知的需求因此定义了一个抽象基类定义了业务处理方法和通知方法。 已经重写了process方法,这样在调用process方法的时候,就会去调用handler和notify最后在子类里面,再去实现抽象的handler和notify方法。那为什么不一开始就在接...
2019-03-14 11:34:03 452
原创 使用策略模式消除if else
最近项目中遇到如下情况:有一个操作叫平帐,然后要对多个不同的款项进行平帐,目测有72种。然后平帐的方法只有一个,在那个平帐方法里面,判断是哪一种款项,然后不同的款项有不同的处理逻辑。if(款项A){款项A的处理方法;}if(款项B){款项B的处理方法;}if(款项C){款项C的处理方法;}…这个就很可怕了。因此使用策略模式来消除掉if else。先看使用策略模式之后的...
2019-03-13 16:57:07 16421 16
原创 removeAll的内部实现
removeAll的内部实现比较用的是==,所以千万注意,不是同一个对象 不能直接removeAll哪怕重写了对象的equals方法也不行可以看到内部的实现,比较元素是用的== 比较的是地址...
2019-03-04 02:58:05 620
原创 重写equals和hashcode的实践
Object类里面有默认的equals和hashcode方法,equals是比较两个对象的内存引用是不是一个地址,是则默认为同一个对象,hashcode则是用用了jdk内置的本地方法(c语言实现)计算得出。这次在项目中,需要用到比较两个对象,我是想两个对象里面的字段值一致则表示它们相等。因此需要重写这两个方法。千万注意!!如果重写了equals方法,那么hashcode方法也一定要相等。因为...
2019-03-03 15:27:50 524
原创 抽象类和接口在项目中的实践(封装继承的用法)
最近在项目里面,需要导入很多excel表,每个表的数据校验逻辑也不一样,不能做成通用方法。于是就把共同的部分抽取了出来。思路:接口类:定义要实现的功能抽象类:实现接口,并将所有需要用到的共同的方法 写到里面,比如说所有导入都需要用到我们项目里面的线程池和阿里云sdk的工具类,还有各种数据格式校验方法子类:具体实现类,继承抽象类,这样就可以直接开始写业务逻辑了。...
2019-03-03 01:24:33 326
可以解析大文件的easyexcel版本
2019-04-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人