自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 资源 (1)
  • 收藏
  • 关注

原创 java POI导出Excel2007(.xlsx)支持List<Object>和List<Map>的带下载框的通用类

问题的引入和分析 最近在Struts2+Spring+Mybatis整合的项目的开发工作中呢,遇到一个需要优化数据导出的功能的需求,原来的导出功能是通过jsp模板做的,发现只能导出Excel2003(.xls),并且导出到Excel中的样式也有所改变。因为Excel2003的有行数限制,超过相应行数后数据不显示。所以需要优化下导出功能,我就在寻找通用的导出工具类。但是发现我Dao层查询的数据都

2017-11-03 10:06:58 2237 1

原创 缓存数据库一致性问题

无论先更新缓存,还是先更新数据库,这种更新操作都会存在数据不一致和并发问题,不仅缓存利用率不高,还会造成机器性能的浪费,所以,可以采用删除缓存的策略。虽然不存在缓存不一致的情况,但是有缓存击穿的风险,可以加锁将读取数据库,写缓存的两个逻辑合并为原子操作。看似理论上会发生的事情,其实概率极低,先更新数据库后删除缓存的方案是可以保证数据一致性的。- 数据库变更的时候,产生一条binlog,订阅这条binlog去删除对应的缓存。先删除缓存再更新数据库,读写并发时,存在数据库缓存不一致的问题。

2024-01-05 15:07:52 907

原创 如何保证幂等性

调用方对系统进行重复的调用,不管调用多少次,调用对系统的影响都是相同的。系统默认认为外部系统调用失败是常态,失败之后会有重试。

2024-01-04 20:20:43 393

原创 大文件处理

大根堆用于升序排序(所以求最小的前k个数用大根堆),小根堆用于降序排序(所以求最大的前k个数(常见的topk问题,基本都是求最大的前k个数)用小根堆)。

2024-01-04 13:06:45 365

原创 【常用排序算法】快速排序

快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法。

2023-12-30 20:16:39 433

原创 【常用排序算法】冒泡排序

冒泡排序基本思想:N 个数的数组,经过N-1轮排序。

2023-12-30 17:15:13 484

原创 【JVM】Java虚拟机:如何判定哪些对象可回收?

程序启动后,objectA和objectB两个对象被创建并在堆中分配内存,这两个对象都相互持有对方的引用,除此之外,这两个对象再无任何其他引用,实际上这两个对象已经不可能再被访问(引用被置空,无法访问),但是它们因为相互引用着对方,导致它们的引用计数器都不为0,于是引用计数算法无法通知GC收集器回收它们。引用计数算法的效率很高,但是主流的JVM并没有选用这种算法来判定可回收对象,因为它有一个致命的缺陷,那就是它无法解决对象之间相互循环引用的的问题,对于循环引用的对象它无法进行回收。

2023-12-30 17:06:07 448

原创 【JVM】垃圾回收理论

该算法简单有效,但是存在两个不足:首先是效率问题,标记和清除两个阶段的效率都不高,所谓效率不高,并非指的是自身的执行效率,而是指回收结果与耗时的效益比不高;该算法简单有效,但是存在两个不足:首先是效率问题,标记和清除两个阶段的效率都不高,所谓效率不高,并非指的是自身的执行效率,而是指回收结果与耗时的效益比不高;可以看出,对于类的卸载,要求很苛刻。标记-清除(mark-sweep)算法,是最基础的垃圾收集算法,它的思想比较简单,就是在“对象存活判定”标记出需要回收的对象后,统一回收(清除)这些对象的内存。

2023-12-26 15:22:01 34

原创 【JVM】对象创建过程

两种方式有各自的优缺点。实例数据存储的是真正有效数据,如各种字段内容,各字段的分配策略为longs/doubles、ints、shorts/chars、bytes/boolean、oops(ordinary object pointers),相同宽度的字段总是被分配到一起,便于之后取数据。两个对象组成Map.Entry后多了16B对象头、一个8B的next字段、4B的int类型的hash字段,还必须添加4B的空白填充。8B=16B,包装成Long对象后分别具有了8B标记字和8B的类型指针,共24B。

2023-12-26 15:18:14 32

原创 【JVM】对象

通过句柄(handler)实现:该种方式会在堆中划出一块“句柄池”内存空间,每个栈上的引用直接指向句柄池中的句柄,而句柄中又会维护对象指针和类型指针。使用句柄带来的好处是,栈上的reference存储稳定的句柄地址,GC造成的对象移动只会导致句柄中相应的指向地址改变,而reference地址不改变。指针碰撞法:若java堆中内存是绝对规整的,所有用过内存都放到一边,空闲的内存放在另一边,中间放着一个指针作为分界点的指示器,那分配内存就仅仅是把指针向空闲空间那边挪动一段与对象大小相等的距离;

2023-12-26 15:16:54 26

原创 【JVM】直接内存

NIO(New input/output)是JDK1.4中新加入的类,引入了一种基于通道(channel)和缓冲区(buffer)的I/O方式,它可以使用Native函数库直接分配堆外内存,然后通过堆上的DirectByteBuffer对象对这块内存进行引用和操作。在内存模型最开始的章节中,我们画出了JVM的内存模型,里面并不包含直接内存,也就是说这块内存区域并不是JVM运行时数据区的一部分,但它却会被频繁的使用,原因是NIO这个包。1.1.什么是直接内存(Derect Memory)

2023-12-26 15:15:21 22

原创 【JVM】直接内存

NIO(New input/output)是JDK1.4中新加入的类,引入了一种基于通道(channel)和缓冲区(buffer)的I/O方式,它可以使用Native函数库直接分配堆外内存,然后通过堆上的DirectByteBuffer对象对这块内存进行引用和操作。在内存模型最开始的章节中,我们画出了JVM的内存模型,里面并不包含直接内存,也就是说这块内存区域并不是JVM运行时数据区的一部分,但它却会被频繁的使用,原因是NIO这个包。1.1.什么是直接内存(Derect Memory)

2023-12-26 13:47:48 14

原创 【JVM】堆与方法区

首先要明白方法区的内存回收目标是什么,方法区存储了类的元数据信息和各种常量,它的内存回收目标理应当是对这些类型的卸载和常量的回收。由于JAVA中的对象大部分是朝生夕灭,还有一小部分能够长期的驻留在内存中,为了对这两种对象进行最有效的回收,将堆划分为新生代和老年代,并且执行不同的回收策略。(2)class/method/field等元数据对象:字节码加载之后,JVM会根据其中的内容,为这个类生成Class/Method/Field等对象,它们用于描述一个类,通常在反射中用的比较多。

2023-12-26 13:46:38 18

原创 【JVM】虚拟机栈与本地方法栈

每个java方法在执行时,会创建一个“栈帧(stack frame)”,栈帧的结构分为“局部变量表、操作数栈、动态链接、方法出口”几个部分(具体的作用会在字节码执行引擎章节中讲到,这里只需要了解栈帧是一个方法执行时所需要数据的结构)。我们常说的“堆内存、栈内存”中的“栈内存”指的便是虚拟机栈,确切地说,指的是虚拟机栈的栈帧中的局部变量表,因为这里存放了一个方法的所有局部变量。不同的是,本地方法栈服务的对象是JVM执行的native方法,而虚拟机栈服务的是JVM执行的java方法。1.2)虚拟机栈的特点。

2023-12-26 13:42:31 198

原创 【JVM】程序计数器

首先我们要搞清楚JVM的多线程实现方式。注意,虚拟机规范并不是一成不变的,Oracle在发布新的JAVA版本时,可能会对JVM做一定的优化和改进,例如在JDK8的版本中,方法区被移除,取而代之的是metaspace(元数据空间)。java虚拟机(JVM)在java程序运行的过程中,会将它所管理的内存划分为若干个不同的数据区域,这些区域有的随着JVM的启动而创建,有的随着用户线程的启动和结束而建立和销毁。2.执行java方法时,程序计数器是有值的,且记录的是正在执行的字节码指令的地址(参考上一小节的描述)。

2023-12-26 13:40:21 19

原创 JAVA中的栈和堆

此时,堆中的数组不再被x使用了,即被视为垃圾,JVM会启动垃圾回收机制,不定时自动删除。分别是:1:寄存器。第1步——main()函数是程序入口,JVM先执行,在栈内存中开辟一个空间,存放int类型变量x,同时附值1。同时,在堆内存中也开辟一个空间,存放new int[3]数组,堆内存会自动内存首地址值,如0x0045。第2步——JVM执行show()函数,在栈内存中又开辟一个新的空间,存放int类型变量x,同时附值2。JVM执行main()函数,在栈内存中开辟一个空间,存放x变量(x变量是局部变量)。

2023-12-26 13:37:07 16

原创 CopyOnWriteArrayList源码阅读

【代码】CopyOnWriteArrayList源码阅读。

2023-12-26 13:29:38 34

原创 HashMap jdk1.8源码阅读

【代码】HashMap jdk1.8源码阅读。

2023-12-26 13:28:43 39

原创 HashMap源码阅读

【代码】HashMap源码阅读。

2023-12-26 13:27:27 30

原创 LinkedList源码阅读

【代码】LinkedList源码阅读。

2023-12-26 13:26:17 36

原创 搭建zookeeper集群

vim /etc/hosts ,修改hosts。

2023-12-26 13:19:56 20

原创 【算法链表】单链表算法总结

【代码】【算法链表】单链表算法总结。

2023-12-26 12:39:05 19

原创 String常量池

String常量池最近在研究String常量池,在阅读相关博客后总结代码如下:public class StringExample { /** * String类的final修饰的,以字面量的形式创建String变量时,jvm会在编译期间就把该字面量(“hello”)放到字符串常量池中,由Java程序启动的时候就已经加载到内存中了。 * 这个字符串常量池的特点就是...

2019-08-10 18:02:02 282

原创 java重载与重写

java重载你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计 ,将会带来全新的写作体验;在创作中心设...

2019-08-10 14:44:57 151

原创 解决linux普通用户不能使用sudo指令问题

su 跳转到root用户下添加sudo文件写权限chmod u+w /etc/sudoers编辑sudoers文件vi /etc/sudoers 找到这行 root ALL=(ALL) ALL,在他下面添加xxx ALL=(ALL) ALL (这里的xxx是你的用户名) ps:这里说下你可以sudoers添加下面四行中任意一条youuser ...

2018-11-28 15:59:39 7001 2

原创 【Redis篇】入门篇

Redis入门介绍随着高速缓存技术的越来越火热,越觉得在日常开发中迫切需要用到的技术,所以赶紧充充电。我浏览过很多介绍了Redis的来源、特点、数据结构、应用场景的博客,也看过一些书籍什么的,但是作为一个新接触的入门者来说,我觉得看视频更能让我们快速的入门,尤其是一个讲解比较有趣的视频教程之后。能够全局把握这个技术的优势和劣势。接下来的几篇我将以博客的形式记录我所学的内容,希望能给同道中人一些启...

2018-11-15 16:18:59 200

原创 linux下安装jdk

linux下安装jdk在/user/ 目录下创建java文件 [root@hcioe104 ~]# mkdir /usr/java [root@hcioe104 ~]# cd /usr/java运行jdk-6u45-linux-x64.bin脚本 [root@hcioe104 java]# ./jdk-6u45-linux-x64.bin如图: 设置环境...

2018-04-25 11:53:49 239

原创 服务器安装Centos

进入安装首页,直接回车 回车后显示下面这个界面 选择skip,回车 点next 选择英文,点击next 选择U.S.English点击下一步 默认选择第一个,下一步 选择yes,discard any data,下一步 设置主机名后,点击configure Network,设置网络 点击apply,然后点击下一步。 点击下一步 可以默认下一步,...

2018-04-25 11:43:11 1146

原创 Dell服务器制作raid

一、制作raid 磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意。 磁盘阵列是由很多价格较便宜的磁盘,组合成一个容量巨大的磁盘组,利用个别磁盘提供数据所产生加成效果提升整个磁盘系统效能。利用这项技术,将数据切割成许多区段,分别存放在各个硬盘上。 磁盘阵列还能利用同位检查(Pari...

2018-04-13 11:38:01 614

原创 MySQL36条

写在前面的话: 总是在灾难发生后,才想起容灾的重要性; 总是在吃过亏后,才记得曾经有人提醒过。 (一)核心军规 (1)不在数据库做运算 cpu计算务必移至业务层; (2)控制单表数据量 int型不超过1000w,含char则不超过500w; 合理分表; 限制单库表数量在300以内; (3...

2018-04-13 11:30:26 254 1

原创 搭建web服务器

下载tomcat历史版本 链接:http://archive.apache.org/dist/tomcat/ 登录到服务器 上传tomcat 指令:rz -e 解压tomcat 指令 tar -zxvf 目标文件.tar.gz 在tomcat外创建一个目录apps用于存放web项目,然后cd conf vi server.xml 修改端口,...

2018-04-13 11:28:39 695

原创 linux安装Nginx

查看eclipse版本 打开连接http://spring.io/tools/sts/all 在eclipse安装离线版。Help—-&gt; Install New Software —–&gt;Add——-&gt;Archive

2018-04-13 11:04:27 102

原创 sql查询去重

sql查询去重 if not object_id('Tempdb..#T') is null drop table #T Go Create table #T([ID] int,[Name] nvarchar(1),[Memo] nvarchar(2)) Insert #T select 1,N'A',N'A1' union all ...

2018-04-13 10:55:07 1026 1

原创 linux上重启oracle

linux启动oracle启动oracle的步骤Linux下启动oracle分为以下两步: 1.1、启动lsnrctl监听。 1.2、启动数据库实例。启动oracle监听首先登陆服务器,切换到oracle用户。[admin@dataserver ~]$ su - oracle密码:[oracle@dataserver ~]$接下来,检查oracle监听...

2018-04-13 10:52:29 1427

原创 通道问题排查

通道问题排查1、查询root-error.log查看报哪些错误。经查报下面这个错误。 首次安装系统的时候或者修改主机名后会导致以下问题:2017-11-28 23:24:51.571 [BDBMatchPocessor.java:37] - com.redis.pack.RedisUtil.setObject(Ljava/lang/String;Ljava/lang/Object;I)...

2018-04-13 10:44:03 183

原创 mybatis 的 callSettersOnNulls 问题

mybatis 的 callSettersOnNulls 问题项目用到mybatis1、查询一个列表,返回map,查出3条数据,奇怪的发现A字段在最后一条数据中没有,2、网上搜索说:mybatis自动把无值的字段过滤掉了,也就是说这条数据的这个字段没值,mybatis就给过滤了,连key在map中都没有。3、于是网络搜索解决办法,有人提供很笨的办法,显然不可取,绝望时看到有人在网上说...

2018-04-13 10:38:03 2828

原创 使用mybatis对数据库执行更新操作时,parameterType为某个具体的bean,而bean中传入的参数为null时,抛出异常

问题描述在使用mybatis对数据库执行更新操作时,parameterType为某个具体的bean,而bean中传入的参数为null时,抛出异常如下:org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.type.TypeException: Could not set param...

2018-04-13 10:36:10 1416

原创 Redis三种开启方式

1、安装redis下载https://redis.io/安装 tar zxvf redis-2.8.9.tar.gz cd redis-2.8.9 使用make编译 make 在root用户下执行make install指令,将可执行文件拷贝到当前目录下。可以直接写程序名运行程序。 make install 2、直接启动启动加上&a...

2018-04-13 10:25:25 347

原创 Maven搭建项目出现web.xml is missing and <failOnMissingWebXml> is set to true

最近做项目时创建Maven Web项目的时候报了一个“web.xml is missing and is set to true”错误;在网上搜了下,发现是因为缺少Web.xml文件导致的。经过查找资料共找到两种解决方案,以下是问题描述以及解决方案:问题描述:解决方案1:右击项目–》Java EE Tools–》Generate Deployment Descriptor Stub,在Webapp

2017-11-24 12:20:23 163

原创 解决 Eclipse出现the user operation is waiting的问题

最近做程序开发的时候出现了一个很奇葩的问题,就是“the user operation is waiting…”的问题,我觉得等一小会就可以了。结果发现等了三个小时都没有结束,于是我搜了搜,才发现需要做以下改变,我们先看看出现的问题描述:解决方案如下: 选择project->Properties->Builders,去掉带Validator的选项去掉如下图:这样我们的问题就解决了。

2017-11-23 13:50:24 12238

apache-tomcat-6.0.30.tar.gz 免安装版

tomcat6.0上传到服务器的相应目录下解压即可使用,方便,稳定,快捷。这是我在部署新的开发环境的时候找到的,分享给大家。

2017-09-08

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除