![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
frwcode
这个作者很懒,什么都没留下…
展开
-
关于事件触发的小计
业务场景:1.根据用户操作触发相应的逻辑;2.事件有操作类型,比如说开户、入金、交易满额、拉新等等;3.通过配置相应的活动及活动的奖励,在条件满足条件下发送奖励首先事件的接收肯定是通过MQ,而MQ中必须要有操作的类型code,上下游是统一的。而code就是用户的操作类型,比如说入金。那么就进入入金Handler那么入金在哪些活动中有配置奖励是可以配置、编码确定的。活动也是有类型的,同时可能存在多个同种类型的活动,此时就可以采用取第一个满足条件的活动进行发送奖励。另外活动.原创 2021-04-22 21:32:34 · 173 阅读 · 0 评论 -
面试题
1.HashMap在多线程情况下,可能出现问题的环境有哪些?HashMap是数组+单向链表/红黑树的结构,在2处可能出现问题。①在对一个数组位置上为空新增一个节点时,若多线程同时tab[i] = new Node(),则其他线程操作的数据将会丢失。②在扩容阶段,对链表进行扩容时,因是采用node.next()方式获取下个元素,多线程情况下可能出现死循环。2.ConcurrentHashMap是如何解决上面的问题的?①针对数据位置上为空,多线程同时新增的问题,采用CAS(乐观锁)的方式新增元素,若失原创 2021-03-31 19:50:55 · 96 阅读 · 0 评论 -
java使用freemarker导出word(xlsx格式,含图表)
使用java程序导出word,此次使用的是模板值替换方式,而导出的word版本是xlsx。直接替换文本和图片,可以直接使用一个word改造的ftl模板,替换启用的参数即可,但是对于图表就比较麻烦。也参照了很多大佬的做法,针对xlsx07版本,主要是将xlsx文件解压,得到很多xml文件,其中文字内容是在document.xml中,如果要替换文本内容,将xml中参数使用freemarker替换即可。如果是图片,则按照图片的先后顺序,保存在word/media/下,以image1.png这个格式开头原创 2021-01-15 15:39:29 · 1166 阅读 · 1 评论 -
BigDecimal的equals方法
BigDecimal作为浮点数据的一个处理对象,在平时用的挺多,但是今天才注意到它的equals方法有特殊的地方。equals方法是需要比较数值的精度的。 BigDecimal b_1 = new BigDecimal("1");//精度0 BigDecimal b_2 = new BigDecimal("1.0");//精度1 System.out.println(b_1.equals(b_2));//false BigDeci原创 2020-09-30 16:55:36 · 3540 阅读 · 0 评论 -
mybatis中jdbcType的使用
mybatis-plus中注入参数有#{}和${},一般情况下使用预编译的#{}方式,能避免SQL注入问题。在Oracle数据库场景下,mybatis如果参数是null可能出现报错的情况。有2种解决方式:1、在mybatis的xml中在#{}中标记数据类型eg: #{bo.age,jdbcType=DECIMAL}2、在mybatis-plus的配置中做配置mybatis-plus: configuration: jdbc-type-for-null: 'n原创 2020-08-07 10:43:56 · 2987 阅读 · 0 评论 -
java导出动态表头的CSV文件
CSV相较于xlsx在导出大数据量+字段多的场景下速度更快!本地测试导出30万条数据,CSV比xlsx快20秒+。不过当数据量小或字段少(2个字段)这种情况下使用CSV并没有明显的优势,并且由于CSV存储相同数据占用的磁盘大小比xlsx的大得多(差不多一倍),在网络传输较为频繁的场景也不适合使用CSV。以下为动态导出CSV的功能代码,表头不固定。pom <dependency> <groupId>org.apac原创 2020-08-05 22:33:47 · 1529 阅读 · 0 评论 -
Enhancer的简单实践
需求:对指定类的方法做代理。可以使用Proxy+InvocationHandler实现,但是如果代理类没有父接口的情况下,如何快速实现?spring的cglib下提供的Enhancer可以快速实现对某个类的所有实例方法(除final)进行代理。public static void main(String[] args) { Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(MyHandler原创 2020-07-08 17:10:12 · 454 阅读 · 0 评论 -
增强for循环(foreach)在数组和集合中的不同实现原理
我认为foreach是一种语法糖,简化遍历的代码,实际编译之后是另外实现形式。数组:数组的foreach是通过普通for循环实现的 int[] arr = {1,2,3}; for (int i : arr) { System.out.println(i); } String[] arr2 = {"ss","sa"}; for (String s : arr2) {原创 2020-07-06 19:13:36 · 301 阅读 · 0 评论 -
MAT分析DUMP文件
如何在jvm启动脚本中添加内存溢出自动dump的内容就不赘述了。今天就只关注dump下来的文件如何进行分析,如何找到是哪一块代码出现了问题。使用的工具是MAT第一步:使用MAT打开dump文件第二部:点击Dominator Tree可以看到内存占用比较高的线程有2个第三部:选中需要查看的线程,查看stack第四部:此时显示的就是发生堆栈溢出时的栈信息,并且有占用大小,就能找到对应的代码位置,未截图的部分就是项目中的代码位置了另外还可以查看集合中的元素值,也是在原创 2020-05-18 17:56:42 · 16868 阅读 · 0 评论 -
上传jar包到Nexus——页面方式
在此记录通过页面方式将第三方jar包上传到私服的操作经历:因第三方jar没有pom,需要手动将jar上传到公司私服上。步骤:1、登录nexus,然后选择左侧菜单的upload,其他版本的nexus可能是其他方式上传。2、填写信息,需要注意 “Generate a POM file with these coordinates”需要勾上。3、点击upload,然后就可以在项目中使用maven引入了。...原创 2020-05-12 09:05:55 · 5035 阅读 · 3 评论 -
Jenkins安装出现离线问题的解决实践
本次采用在centos7上通过war包的方式进行安装,仅用作测试。因为本地网络问题,镜像和官网下载都太慢了。所以采用下载war包,然后java命令启动。在此分享一下war包之前使用Tomcat安装遇到的问题是,在初始化Jenkins时,一直提示处于离线状态该Jenkins实例似乎已离线网上的解决方案,一直找不到default.json的文件所在今天尝试使用jar命令的方式...原创 2020-02-22 10:12:18 · 661 阅读 · 1 评论 -
MongoTemplate的简单实用
实用 MongoTemplate 可实现简单的CRUD。目前简单介绍下新增和分页查询实用springboot2.x1、引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-d...原创 2020-02-15 11:25:50 · 303 阅读 · 0 评论 -
ConcurrentHashMap如何实现线程安全
HashMap在多线程情况下会出现问题:put操作,若是新增一个节点,若进行扩容有几率会发生死循环的问题。而ConcurrentHashMap为了解决这个问题,采用了如下方式:首先贴出源码final V putVal(K key, V value, boolean onlyIfAbsent) { if (key == null || value == null) ...原创 2020-01-18 20:58:31 · 223 阅读 · 0 评论 -
CompletionService实现多线程任务
使用CompletionService可以简便的实现多线程执行任务后获取结果汇总。//定义线程池ThreadPoolExecutor executor = new ThreadPoolExecutor(5,10,5, TimeUnit.SECONDS, new LinkedBlockingDeque<>());CompletionService<List<Met...原创 2020-01-15 08:56:05 · 192 阅读 · 0 评论 -
Springboot使用quartz动态添加任务
项目中需要页面动态新增定时任务,还需要进行任务删除的功能。借鉴了其他人的做法。现将设计方式记录如下:1、springboot项目直接依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-qua...原创 2020-01-13 20:33:38 · 2975 阅读 · 1 评论 -
nginx 刷新报404问题 修改nginx配置不生效问题 ——nginx版本问题
项目中采用nginx作为路由中间件,在页面刷新时出现404错误。通过查找资料发现了需要在nginx的配置文件(项目中是放在con.d中)的location / 中使用如下方式location / { root /www/front/build/; #index index.html index.htm; try_fi...原创 2019-12-17 20:50:23 · 1415 阅读 · 0 评论 -
SpringCloud - Gateway入门实践
目前Gateway正在逐渐取代Zuul的地位,相关性能分析就不多说了,不涉及其它组件,只完成路由功能,直接上代码。pml文件:<properties> <java.version>1.8</java.version> <spring-cloud.version>Hoxton.M3</spring-cloud.version&g...原创 2019-10-19 12:24:30 · 383 阅读 · 0 评论 -
Java中非静态代码块的使用
针对非静态代码块的调用时机进行分享:非静态代码块在构造方法中执行,因此每次new对象都会执行一次。以下是证明:Java代码:public class Sun{ String name; { System.out.println("非static代码块1"); } static { System.out.printl...原创 2019-08-13 22:01:45 · 344 阅读 · 0 评论 -
Spring循环依赖的解决办法
当spring初始化时如果遇到循环依赖的问题,可采用set注入方式在xml文件中配置,可解决循环依赖问题。原创 2019-07-28 21:52:39 · 127 阅读 · 0 评论 -
浅谈Vector、ArrayList、CopyOnWriteArrayList和ConcurrentHashMap
ArrayList应该是用的比较多的一个容器类了,我们都知道这是线程不安全的。与之对应的线程安全的有Vector和CopyOnWriteArrayList。Vector的很多方法的都是使用synchronized修饰方法完成的:public synchronized int lastIndexOf(Object o){....}public synchronized E get(in...原创 2019-07-26 22:02:19 · 216 阅读 · 0 评论 -
浅谈HashMap与ArrayList的一些区别
1、都是可扩容的容器。 HashMap具有2个关于扩容相关的字段,当容器元素达到threshold后就会进行扩容,而threshold的值与负载因子loadFactor(0.75)有关。 初始容量16,此时threshold = 16 * 0.75 = >12。而每次扩容都是原容量的2倍。 具体扩容的步骤详见源码。int thre...原创 2019-07-26 21:16:46 · 890 阅读 · 0 评论