- 博客(47)
- 资源 (2)
- 收藏
- 关注
原创 RabbitMQ中重试机制的坑
当我们消息消费失败的时候,可以进行重试,虽然SpringAMQP集成了retry机制,但是发现使用过程有点坑,等会细说重试机制使用场景:1.如果是业务代码,比如空指针之类的异常那重试机制其实没什么用2.如果是调用第三方系统,网络抖动之类的那重试机制就有用配置使用重试机制spring.rabbitmq.listener.simple.retry.enabled=true 是否开启消费者重试(为false时重试不生效)spring.rabbitmq.listener.simple.retry.max
2021-01-27 22:49:35
6375
7
原创 使用RabbitMQ实现延时队列
大家在逛淘宝,京东时,下单后如果超过半个小时或者一个小时没支付,就会自动关闭订单。而我们公司也是一个类电商公司,我们公司的解决方案是使用RabbitMQ的死信队列,实现的一个延时队列,下单时,将订单丢进消息队列,设置过期时间(订单失效时间),然后...
2021-01-25 21:52:38
409
原创 G1垃圾回收器简介及回收过程
一.什么是G1同CMS一样,G1也是关注停顿时间,不过它是可控的,它被设计用来取代CMS,因为它是空间整理所以没有CMS那么严重的空间碎片问题,同时提供可控的停顿时间。特性:1.G1不同于之前的那些垃圾收集器分为连续的年轻代,老年代和永久代,而是分区(region),它将堆分为大大小小的区域(通常约为2048个),每个区域就是eden,survivor,old2.一般优先回收包含垃圾最多的区域,所以叫Garbage-First(G1)3.之前的垃圾收集器要么是新生代,要么是老年代,而G1兼顾年轻代
2021-01-24 14:56:57
4870
1
原创 项目里JVM实战
不知道大家知不道自己项目中的JVM相关参数,比如设置的堆的内存是多少,新生代内存多少,什么垃圾回收器,GC频率等等,所以这篇文章从实际出发探索项目中的JVM参数。1.准备工作内存分析工具准备:有很多内存分析工具,如IBM的HeapAnalyzer,eclipse的MAT这里使用eclipse的MAT官方下载地址常用命令:top 查看监控整体信息jps 可以查看部署的Java Pidjinfo 可以查看jvm相关参数jstat 可以查看gc相关信息,比如gc次数,新生代,老年代占比等等
2021-01-22 09:30:17
1557
5
原创 CMS GC过程
一.什么是CMS收集器CMS(Concurrent Mark-Sweep)是以牺牲吞吐量为代价来获得最短回收停顿时间的垃圾回收器。对于要求服务器响应速度的应用上,这种垃圾回收器非常适合。在启动JVM参数加上**-XX:+UseConcMarkSweepGC** ,这个参数表示对于老年代的回收采用CMS。CMS采用的基础算法是:标记—清除。二.CMS工作步骤初始标记(STW initial mark)并发标记(Concurrent marking)并发预清理(Concurrent preclea
2021-01-20 22:01:44
4765
1
原创 压测时cpu不高,load average过高的问题排查及解决方法
一.背景说明这次代码新增了入参解密,出参加密,然后压测过不了,接口响应时间超过公司规定了,遂排查之,然后做个记录。二.排查过程方式一:打印耗时日志1.怀疑是加解密算法太耗时,我们是采用RSA+AES的方式;所以先补日志,在代码前后打印耗时。2.最终看日志发现在将流转换为String耗时比较多,应该是普通io的操作是阻塞的,io的read和write需要阻塞读或者写,在高并发的情况下, 响应不过来。这种方式比较反锁,而且在修改比较多的情况,需要补大量日志,不是很方便,建议采用第二种方式。方式二
2021-01-19 14:51:31
16261
原创 浅谈HTTP和HTTPS
1.什么是HTTPHTTP(HyperText Transfer Protocol)协议,即超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。设计HTTP的初衷是为了提供一种发布和接收HTML页面的方法。在此之前先了解一些基本知识:1.TCP/IP协议:要想了解什么是TCP/...
2021-01-18 16:51:14
2639
原创 Java设计模式之装饰者模式(Decorator Pattern)
1.什么是设计模式设计模式是指在软件开发过程中,经过验证的,用于解决在特定环境下,重复出现的,特定问题的解决方案。可以用来提高代码可复用性、可维护性、可读性、稳健性以及安全性。1995 年,GoF(Gang of Four,四人组/四人帮)合作出版了《设计模式:可复用面向对象软件的基础》一书,共收录了 23 种设计模式,从此树立了软件设计模式领域的里程碑,人称「GoF设计模式」。分类:a. ...
2020-03-06 15:51:12
611
1
原创 阿里云配置tomcat后无法访问
好久没写博客了,实在是有点偷懒了,因为在沉淀一些东西,所以以后有机会补上吧。 之前陆陆续续看了会关于Linux的东西,也敲过一些命令,感觉还是没落到实处,所以申请了个阿里云服务器来做一个汇总,做编程的实践,配置及部署。Linux版本:CentOS7.3 配置tomcat之后,至于具体怎样安装,配置tomcat,网上很多随便找。 然后启动tomcat,启动没问题,但是外部无法访问。 然后...
2018-03-01 17:36:58
5082
2
原创 Spring Boot实现JSP解析
Spring Boot可以轻松创建可以“运行”的独立的,生产级的基于Spring的应用程序。大多数Spring Boot应用程序需要很少的Spring配置。 功能 创建独立的Spring应用程序 直接嵌入Tomcat,Jetty或Undertow(不需要部署WAR文件) 提供好用的POM来简化你的Maven配置 尽可能自动配置Spring 提供生产就绪功能如指标,运行状况检查和外部化配置
2017-08-10 20:36:30
7405
原创 Datatables 基于Java的服务器模式
Datatables是一款jquery表格插件。它是一个高度灵活的工具,可以将任何HTML表格添加高级的交互功能。这是中文官网:点击这里效果图: 当然比如添加功能等功能的图标是用的font-awesome插件,详情请戳官网: 点击这里这个demo是基于服务器端的,搜索和分页功能也是基于后台返回数据,这里只列出关键代码,具体情况需要根据你的后台代码再调整。1.jsp页面:表格的css只需要引用
2017-07-10 19:58:00
2767
原创 基于Maven的Spring+SpringMVC+MyBatis环境搭建
我们以一个用户登陆为例开始搭建环境。 项目目录结构如下: 框架版本:Mybatis:3.x,Spring:3.x 项目采用xml+注解方式配置。 一.先完成Spring+MaBatis的环境搭建: 数据库脚本文件:CREATE TABLE `login` ( `login_id` int(11) NOT NULL AUTO_INCREMENT, `user_name` varc
2017-06-21 20:30:07
900
原创 Bootbox+JQuery UI Datepicker 时间输入框点击无响应
在使用Bootbox+JQuery datepicker时,发现点击输入框,并不是被div层遮住了,而是根本就没有触发这个显示日期的事件,且无错误提示信息。 情况是这样的: 1.html代码: 这个也就是我们的弹出层。 <div id="formDiv" class="form-group form"> <form id="addForm" class="cmxform"
2017-05-10 20:01:21
1069
原创 MyBatis 多对多 中间表插入数据
在做这个员工管理系统demo的时候,由于user和role是多对多关系,且user主键是自增的,所有我们没办法提前知晓这个user_id,所以插入的时候,就需要先插入user,然后再找到刚插入的id拿出来,再插入中间表user_role,这样才能将表关系对应起来,才能算一个完整的插入的过程。所以现在的问题就是怎么知道这个user_id,再怎么拿出来,再插入中间表user_role。方法:在MyBat
2017-05-10 18:45:55
15207
3
原创 MyBatis 模糊查询 like %
我们在配置mapper文件的时候,想做模糊查询的配置,就像这样:<select id="getAllUserRoleDepByName" resultMap="userRoleDepList"> select u.*,r.*,d.* from user u left join user_role ur on u.user_id=ur.user_id
2017-05-10 18:15:42
508
原创 MyBatis一对多,多对一,多对多
MyBatis中的一对多和对多一,多对多 主要就是resultMap中 association – 一个复杂的类型关联;许多结果将包成这种类型(一对多) collection – 复杂类型的集合(多对一) 这2个属性的使用,而一对多和多对一都是相互的,只是站的角度不同。实例: 这个实例只说这2个属性的使用方法,具体的配置和运行结果在SSM环境搭建文章中写出。 1.首先是数据库,沿用之前员
2017-05-09 21:15:36
45178
12
原创 简单的MyBatis demo之数据库增删改查
一.MyBatis简介(摘自官方文档):MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。 构成:Sq
2017-05-09 20:02:07
1208
原创 SpringMVC+JQuery Ajax简单实例
一、Ajax简介: AJAX = 异步 JavaScript 和 XML(Asynchronous JavaScript and XML)是与服务器交换数据的技术。 简短地说,在不重载整个网页的情况下,AJAX 通过后台加载数据,并在网页上进行显示。常用方法:$.ajax({ url:'http://www.test.com', type:'POST', //GET as
2017-04-27 19:21:45
2968
原创 org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 23 in XML document from
org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 23 in XML document from class path resource [spring/springmvc-servlet.xml] is invalid; nested exception is org.xml.sax.SAXPa
2017-04-27 18:52:39
7958
1
原创 Git的基本使用
以下是我经常使用的命令,做个记录: 这是Git的使用手册:点击打开链接如果要使用github,以下的配置就必不可少:git config --global user.name "xxxxx" //设置全局usergit config --global user.email"xxx@xx.com" //设置全局emailgit config -l //查询config配置信息git
2017-03-31 18:31:02
212
原创 栈和队列
一.栈1.栈(stack)又名堆栈,仅允许在表的一端(栈顶)进行插入和删除。向一个栈插入新元素称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。由于栈的这种特性,所以栈内元素是先进后出,即先进栈的元素,后出栈。2.栈的操作。 1)Push(入栈) a.向栈中插入一个元素,插入前判断栈是
2017-03-26 21:45:43
222
原创 3种简单排序算法——冒泡,选择,插入排序
1.冒泡排序 就是从最左边开始,重复地访问要排序的数列,一次比较两个元素,如果他们的顺序错误,就把他们交换。通过一次次的比较,越大的元素会通过交换慢慢“浮”到数列的顶端,故名“冒泡”。是稳定的排序算法。 实现: 常规实现public class BubbleSort { public static void main(String[] args) { int[]
2017-03-05 18:20:40
484
原创 统计一个字符串中每个字符出现的次数
没什么难度,只是需要把统计的temp(暂存需要统计的字符)和其对应的count存到map中,这样就能一目了然的查看结果。 但是如果字符多了,又懒得自己去看,而又要选出出现次数最多的字符,也只需要操作这个map就行,这就涉及到使用合适的算法来实现,等复习了算法了再写实现。public class CountChar { public static void main(String[] args
2017-03-04 12:25:03
1024
原创 eclipse指定jdk版本启动,解决Version XXXX of the JVM is not suitable
可以解决Version XXXX of the JVM is not suitable for this product.Version:XXXXXX or greater is required。例如:Verson1.7.0_79 of the JVM is not suitable for this product Version:1.8 or greater is required解决方式:
2017-03-04 12:06:12
43857
12
原创 Spring学习之Transaciton+MyBatis+MySql+Maven+SringAOP(介绍+实例)
事务概念 一个数据库事务通常包含对数据库进行读或写的一个操作序列。特性 并非任意的对数据库的操作序列都是数据库事务。事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。 一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个
2017-02-21 15:29:54
416
原创 员工管理系统之RBAC权限管理数据库设计
-- MySQL dump 10.13 Distrib 5.7.12, for Win64 (x86_64)---- Host: localhost Database: user_management-- -------------------------------------------------------- Server ver
2017-02-15 16:43:09
6802
原创 Spring学习之IOC
一.IOC(Inversion of Control,控制反转),获得依赖对象的方式反转了(所以也可以叫做DI依赖注入),传统方式是自己主动new一个object来获得对象,而使用spring IOC则是将获得对象的过程交给spring来实现,以此来解耦,换句话说,就是由spring来负责控制对象的生命周期和对象间的关系。二.spirng IOC的2种方式:
2017-02-09 15:45:39
188
原创 Spring学习之AOP
一.什么是AOP?AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP允许你定义从上到下的关系,但并不适合
2017-02-09 15:24:38
211
原创 SpringMVC RESTful 实践demo
首先,REST简介。REST是一种webservice架构风格,而不是技术。REST<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/
2017-01-12 13:43:02
5321
原创 2016的总结
2016的总结2016是个很关键的一年,从学生到社会人士的转变,同时也从学习是为了完成任务到学习是一种习惯的态度转变。从学校创业公司项目的失败,公司的垮台,到重新拿到offer的心路历程,期间有迷茫又困惑,有努力有收获。2015年11月拿到offer收获自己的工作,到2016年6月毕业,正式成为职场人士,改变了很多,努力过,失意过,因为真正的进了社会才知道其中的心酸,现在就试着回味2016的时
2017-01-10 22:56:09
323
转载 JAVA基础:八进制,十六进制表示
原帖:点击打开链接作者:Simon.C可以使用八进制、十六进制的类型:long, int, short, byte 八进制表示:以0作为前缀,数码有0,1,2,3,4,5,6,7,逢8进位 如:8(十进制)-->010(八进制) 十六进制表示:以0x作为前缀,数码有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,逢16进位 如
2016-12-30 09:43:58
1347
原创 简单的JS 计算器
该计算器功能:1.校验:小数点,重复计算,以及大量更符合用户体验的操作。2.能够从键盘输入。效果图:html代码:Insert title here <input id="upText" class="textShow" type="text" name="process" maxlength="10" re
2016-12-20 19:59:53
367
原创 基于注解的SpringMVC+Spring JDBC template+JSTL-demo练习
demo参考:点击打开链接Spring注解参考:点击打开链接SpringMVC参考:点击打开链接一些关于SpringMVC和注解的知识点:1.的注解:@Service用于标注业务层组件@Controller用于标注控制层组件(如struts中的action)@Repository用于标注数据访问组件,即DAO组件@Component泛指组
2016-12-16 09:13:20
1333
原创 读clean code有感
作为一个才入职不久的菜鸟程序员——姑且这么说,码农或许更合适。在我对于程序的看法中,还停留在:代码能够运行就好的层次。而没有一丁点关于代码“美感”,整洁度的
2016-12-08 11:11:54
860
1
原创 Struts2简单登陆实例
1.struts1使用ActionServlet获取用户请求充当控制器的角色,核心是action,actionform,actionforward、struts2的核心就是action,拦截器,action可以不用继承父类,并且糅合了action和actionform,降低耦合度。2.依然是从最简单的登陆入手,项目还是maven项目,先导包,就不详述了,将包依赖添加到pom.xml中,
2016-03-31 11:17:22
844
原创 SSH学习之Struts1深入学习
1.动态ActionForm。前文已经实现基于静态的ActionForm,而如果每一个表单都需要创建一个ActionForm,那么ActionForm就太多了。那么Struts可以通过动态的DynaActionForm来解决上述问题,只需要配置,而不用再创建新的ActionForm。①配置: ②Action中取值,是通过强制转换form为D
2016-03-23 13:38:34
324
原创 SSH学习之Struts1入门的简单登陆案例。
上一篇将博客将环境搭建起来了。这篇博客将开始Struts1的基础学习。1.先了解Struts1的工作流程:服务器启动后,根据web.xml加载ActionServlet读取struts-config.xml文件内容到内存。以登录为例:第一次进login.jsp会先实例化Form、把默认值赋给表单元素。输入用户名密码提交表单、提交到action属性的log
2016-03-22 17:18:37
605
原创 单例模式
1.单例模式的定义:保证一个类仅有一个实例,并一个访问它的全局访问点。2.懒汉式:public class Appconfig_lazy { private String a,b; private static Appconfig_lazy instance = null; public static synchronized Appconfig_lazy getInstan
2016-03-15 16:18:15
262
原创 适配器模式
1适配器模式定义:将一个类的接口转化为客户希望的另一个类的接口,使得原本由于接口不兼容的2个类可以一同工作。Client:客户端,调用自己领域接口Target。Target:定义客户端需要的跟特定领域有关的接口。Adaptee:已经实现的,满足客服端要求功能的类,但是由于接口与客服端特定领域接口不兼容而无法工作,需要适配。Adapter:适配器,将Adaptee适配成Clien
2016-03-15 15:19:17
295
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人