java
文章平均质量分 73
许洪昌
不忘初心,不再回首。
展开
-
解决系统在大数据情况下如何导出文件(附代码)
背景系统的数据导出是一个重要的功能,而且对于excel类型的数据导出需求尤其多,如果系统的数据量不是很大,则无关紧要。但是系统的数据量如果非常巨大,对于导出数据来说就异常困难。方法一数据很少的情况下,进行数据导出,可以完全交给前端去做。前端人员可以通过接口获取的数据生成excel进行导出。数据量很少或者只允许用户每次导出很少的数据时,这种做法快速有效,成本很低,而且服务端只会承载数据查询的压力,考虑到数据库主从,这个压力就更小了。同样,服务端也可以生成excel,通过流的形式进行输出..原创 2022-01-03 16:11:56 · 6775 阅读 · 1 评论 -
分布式下WebSocket Session共享解决方案
yua最近在做消息中心模块,想要实现消息实时推送到前端页面展示,直接摒弃了前端定时轮训调用接口来获取消息数据的方式,采用了WebSocket服务端推送。流程是首先前端跟后端应用新建一个连接,并携带当前登录的用户ID,此时WebSocket会创建一个WebsocketSession来唯一绑定该连接,我们会在后端用Map建立用户ID与Session的映射关系:Map后续有新消息到达时,就可以通过该Map映射找到指定用户ID对应的session来推送消息。但有一个问题,后端是多应用节点,每个节转载 2021-06-04 15:22:24 · 2308 阅读 · 0 评论 -
ArrayList与LinkedList的性能分析
1、 前言经常在面试时,被问到集合的概念,集合 List、Map、Set 等底层设计以及其使用场景与注意细节。但大部分人的回答都是千篇一律,跟网上的答案一模一样,这是致命滴。其实,大家都错了,尤其是网上,更是误导大家,详细原因,且听我来分析。2、集合 List2.1 大家心中的 List在广大的网友心中,List 是一个缓存数据的容器,是 JDK 为开发者提供的一种集合类型。面试时,被问到最常见的就是 ArrayList 和 LinkedList 的区别。相信大部分...转载 2021-06-03 13:56:46 · 3172 阅读 · 0 评论 -
Java8—Stream
原文来源:https://juejin.cn/post/6968982631211892750?utm_source=gold_browser_extension转载 2021-06-03 11:57:56 · 880 阅读 · 0 评论 -
记录:jenkins打包项目,代码不生效
问题:本地提交了代码,分支也没有问题,jenkins打包的分支也是正确的,配置也没有问题,检查了好多地方,docker的镜像也删除了重新打包,但是提交的分支代码还是没有生效,郁闷,very郁闷。原因:项目依赖了一个公共模块,公共模块在打包的时候报错了,但是我并没有在意上面细微的日志输出,只是简单的看了最终build的结果:SUCCESS,而docker容器中已经存在相似标志的层,失败不会影响到docker最终的结果,导致一直没有发现这个问题。解决:修复公共模块打包失败的问题即可。反思:日志的..原创 2021-05-07 09:05:28 · 2755 阅读 · 0 评论 -
java使用easyExcel生成excel文件直接写入邮件附件并发送
本文章主要是讲述如何使用EasyExcel生成excel文件,并将文件写入到邮件附件中进行邮件发送。一:引入pom依赖<!-- 邮件 --><dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.7</version></dependency>..原创 2021-03-05 11:14:54 · 4513 阅读 · 3 评论 -
Git仓库如何优雅的进行备份
一:前言在日常的工作学习中,Git扮演着越来越重要的角色,渐渐的在版本管理软件中占据C位。我们已经很习惯的将代码托管于Git服务,在我们的潜意识中,当执行git push完成后,一切都完美了。代码也不会丢,还能按照不同的版本找回来,完全没有后顾之忧。事实上也确是这样,对于Git仓库的备份有人认为很重要,有人认为完全没有必要,对于这个疑问,仁者见仁,智者见智。但我总觉得还是有备无患,所以有了这篇文章。二:思路简单来说,Git的备份其实就是对于文件增量的备份,注意,我说的是增量。当然,你也可以进原创 2020-11-04 14:16:21 · 4097 阅读 · 0 评论 -
mac下安装nginx
本篇文章转载于【寻梦1314】:https://www.cnblogs.com/meng1314-shuai/p/8335140.html前言:nginx的强大不必多言,所以很自然很应当的我也来玩一玩。当前系统环境:安装工具:homebrew(还没用过的小伙伴可以点链接进行了解或者自行百度)步骤: 1、打开终端,习惯性命令:brew update//结果:Already up-to-date. 2、终端继续执行命令:brew search nginx //查询要转载 2020-11-02 16:55:19 · 540 阅读 · 0 评论 -
解决:druid版本升级导致控制台无法访问,404
下面这个配置一定要加,在低版本中,比如1.1.9中,如果没有配置会默认为true进行开启,但是升级到1.1.18后,如果没有显示开启配置的话,将不能启动控制台。stat-view-servlet: enabled: true源码如下,一看就明白:...原创 2020-06-18 20:36:09 · 1707 阅读 · 1 评论 -
SSM集成SpringSecurity(一)准备环境
前言本系列文章主要是借助ssm环境整合springSecurity并学习,由于本系列文章是有关联性的,所以有可能的话请从第一章(本篇)开始阅读。最后一章会给出完整的项目代码。简介SpringSecurity是Spring的全家桶之一,功能十分强大,主要是提供web安全方面的保护,涉及到系统的认证,授权,防止跨站攻击等。本系列文章会结合实例向大家说明如何使用SpringSecurit...原创 2020-02-13 13:51:47 · 1244 阅读 · 0 评论 -
mybatis的@MapperScan导致hessian无法使用,Invalid bound statement (not found)
现象:spring-boot+mybatis+hessian进行整合的时候,client调用server端会报Invalid bound statement (not found)错误,这个错误来自mybatis。原因:根据hessian的使用方式,服务端和客户端都必须同时存在相同的接口。而mybatis配置的MapperScan会扫描指定的包,如果了解MapperScan注解,就应该...原创 2020-01-17 14:40:16 · 333 阅读 · 0 评论 -
yyyy-MM-dd HH:mm:ss和YYYY-MM-dd HH:mm:ss踩坑之路
突然不经意的一瞥,发现了一个问题:今天明明才2020年刚开始,可是为什么有2020年12月31号的单号产生了。心中一种莫名的僵硬,要出事了。出现这种情况,首先怀疑的是时间格式化问题。发现了YYYY这个东西。赶紧写段代码验证一下,是不是YYYY的问题。Calendar calendar = Calendar.getInstance();calendar.set(2019, Calend...原创 2020-01-15 16:14:00 · 3053 阅读 · 0 评论 -
时间格式2020-01-13T16:00:00.000Z中的T和Z分别表示什么,如何处理
T表示分隔符,Z表示的是UTC。UTC:世界标准时间,在标准时间上加上8小时,即东八区时间,也就是北京时间。举例 北京时间:2020-01-14 00:00:00对应的国际标准时间格式为:2020-01-13T16:00:00.000ZString dateTime = "2020-01-13T16:00:00.000Z";dateTime = dateTime.re...原创 2020-01-15 11:29:55 · 117558 阅读 · 5 评论 -
Java基础-序列化与反序列化
本文转载于:http://wenshixin.gitee.io/blog/2018/09/02/Java基础-序列化与反序列化/序列化和反序列化在面试中也经常考查,下面就总结一下 Java 中的序列化和反序列化。什么是序列化和反序列化?序列化是将 Java 对象转换成与平台无关的二进制流,而反序列化则是将二进制流恢复成原来的 Java 对象,二进制流便于保存到磁盘上或者在网络...转载 2019-11-06 07:20:37 · 484 阅读 · 0 评论 -
SimpleDateFormat("E")真的能完美获取到中文的星期几吗?
有一需求,项目中在显示的日期后面需要额外显示一下是周几。这个时候SimpleDateFormat("E")就派上用场了,毕竟SimpleDateFormat("E")在很多人看来可以完美获取到中国人喜爱的星期几。功能刷刷的完成了,顺利的通过本地测试,测试环境测试,没问题后,生产环境灰度测试。呜,,,呜,,,呜,,,翻车了。原因:经过一番查看,发现使用SimpleDateFo...原创 2019-10-23 18:07:17 · 7609 阅读 · 0 评论 -
centOS下Tomcat8.5使用redis实现session共享
本篇内容主要讲述Tomcat8使用redis实现session共享,涉及的nginx,tomcat等软件安装和部署不再详细叙述。1:环境准备。使用的阿里云的centOS7,已经安装了nginx,配置了默认策略的负载均衡。并部署了2个tomcat服务,一台redis。2:我自己写了一个简单的demo来确认session是否一致,其实就是个简单的jsp页面。在这个步骤,用同一个浏览器访问同...原创 2018-11-26 19:12:44 · 577 阅读 · 0 评论 -
JAVA并发编程学习
一:并发编程的挑战并发编程主要目的是为了在相同的时间内让程序运行得更快或者处理更多的任务。为了实现这一目的,并发编程会面临很多的挑战。并发编程必然会带来多线程之间的问题,比如上下文之间的切换,线程死锁,以及硬件资源的限制。(一):上下文的切换无论是单核还是多核处理器都支持多线程。在单核处理器中,CPU会给每个线程分配时间片来实现多线程,其实这是一种错觉,单核处理器在不停的进行线程之间的...原创 2019-03-04 22:23:53 · 303 阅读 · 0 评论 -
Java并发编程:深入了解volatile关键字
volatile这个关键字出现的频率是挺高的,作为并发编程重要武器之一,它一直被认为是轻量级的synchronized。在并发编程中,volatile主要是保证共享变量的可见性。这里的可见性下面会详细说到。volatile相比于synchronized,使用成本更低,在特定条件下效率更高,毕竟减少了上下文的切换。关于volatile的学习使用,我们从以下几个方面来学习。一:并发编程中的三个关键...原创 2019-03-17 14:16:40 · 198 阅读 · 0 评论 -
Java并发编程:深入了解synchronized关键字
目录1:synchronized简介2:synchronized使用方式3:synchronized可重入性4:synchronized可见性5:synchronized实现原理6:synchronized的缺陷7:synchronized的使用注意1:synchronized简介在多线程环境中对同一资源同时操作可能会导致结果的不确定性。java内置了sy...原创 2019-04-21 11:38:14 · 258 阅读 · 0 评论 -
如何有效处理数据并发操作问题
本篇文章以我在真实项目中遇到的数据并发问题作为背景,讲解问题出现的原因及解决的办法,以及从中得到的反思。并发中踩过很多坑,可能还有不足的地方,但会一直学习成长,现在将学习到的东西记录下来,,,,努力努力。一:并发操作出现的原因原因:多个动作在一瞬间同时操作同一数据现象:多人在某一瞬间通过相同的方式操作同一条数据 多人在某一瞬间通过不同的方式操作同一条数据 在某一瞬间,同一动作,...原创 2019-06-17 10:13:23 · 7625 阅读 · 1 评论 -
使用Lock,需要注意的事项?阿里代码
下面代码是上个星期阿里社区推送的一道技术题中的代码。借助这个代码,检验一下自己。3秒钟,看出什么问题了吗?private final static Lock lock = new ReentrantLock();public static void main(String[] args) { try { lock.tryLock(); } catch ...原创 2019-06-24 20:45:34 · 1068 阅读 · 2 评论