<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[黄国攀的博客]]></title><description><![CDATA[生则顺其所牧，死则安息主怀]]></description><link>https://blog.youkuaiyun.com/u010857795</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; u010857795]]></copyright><item><title><![CDATA[RabbitMQ中重试机制的坑]]></title><link>https://blog.youkuaiyun.com/u010857795/article/details/113192636</link><guid>https://blog.youkuaiyun.com/u010857795/article/details/113192636</guid><author>u010857795</author><pubDate>Wed, 27 Jan 2021 22:49:35 +0800</pubDate><description><![CDATA[当我们消息消费失败的时候，可以进行重试，虽然SpringAMQP集成了retry机制，但是发现使用过程有点坑，等会细说
重试机制使用场景：
1.如果是业务代码，比如空指针之类的异常那重试机制其实没什么用
2.如果是调用第三方系统，网络抖动之类的那重试机制就有用
配置使用重试机制
spring.rabbitmq.listener.simple.retry.enabled=true 是否开启消费者重试（为false时重试不生效）
spring.rabbitmq.listener.simple.retry.max]]></description><category></category></item><item><title><![CDATA[使用RabbitMQ实现延时队列]]></title><link>https://blog.youkuaiyun.com/u010857795/article/details/113091022</link><guid>https://blog.youkuaiyun.com/u010857795/article/details/113091022</guid><author>u010857795</author><pubDate>Mon, 25 Jan 2021 21:52:38 +0800</pubDate><description><![CDATA[大家在逛淘宝，京东时，下单后如果超过半个小时或者一个小时没支付，就会自动关闭订单。而我们公司也是一个类电商公司，我们公司的解决方案是使用RabbitMQ的死信队列，实现的一个延时队列，下单时，将订单丢进消息队列，设置过期时间（订单失效时间），然后

...]]></description><category></category></item><item><title><![CDATA[G1垃圾回收器简介及回收过程]]></title><link>https://blog.youkuaiyun.com/u010857795/article/details/112972045</link><guid>https://blog.youkuaiyun.com/u010857795/article/details/112972045</guid><author>u010857795</author><pubDate>Sun, 24 Jan 2021 14:56:57 +0800</pubDate><description><![CDATA[一.什么是G1
同CMS一样，G1也是关注停顿时间，不过它是可控的，它被设计用来取代CMS，因为它是空间整理所以没有CMS那么严重的空间碎片问题，同时提供可控的停顿时间。
特性：
1.G1不同于之前的那些垃圾收集器分为连续的年轻代，老年代和永久代，而是分区（region），它将堆分为大大小小的区域（通常约为2048个），每个区域就是eden,survivor,old
2.一般优先回收包含垃圾最多的区域，所以叫Garbage-First（G1）
3.之前的垃圾收集器要么是新生代，要么是老年代，而G1兼顾年轻代]]></description><category></category></item><item><title><![CDATA[项目里JVM实战]]></title><link>https://blog.youkuaiyun.com/u010857795/article/details/112943756</link><guid>https://blog.youkuaiyun.com/u010857795/article/details/112943756</guid><author>u010857795</author><pubDate>Fri, 22 Jan 2021 09:30:17 +0800</pubDate><description><![CDATA[不知道大家知不道自己项目中的JVM相关参数，比如设置的堆的内存是多少，新生代内存多少，什么垃圾回收器，GC频率等等，所以这篇文章从实际出发探索项目中的JVM参数。
1.准备工作
内存分析工具准备：
有很多内存分析工具，如IBM的HeapAnalyzer，eclipse的MAT
这里使用eclipse的MAT
官方下载地址
常用命令：
top  查看监控整体信息
jps  可以查看部署的Java Pid
jinfo 可以查看jvm相关参数
jstat 可以查看gc相关信息，比如gc次数，新生代，老年代占比等等]]></description><category></category></item><item><title><![CDATA[CMS GC过程]]></title><link>https://blog.youkuaiyun.com/u010857795/article/details/112910417</link><guid>https://blog.youkuaiyun.com/u010857795/article/details/112910417</guid><author>u010857795</author><pubDate>Wed, 20 Jan 2021 22:01:44 +0800</pubDate><description><![CDATA[一.什么是CMS收集器
CMS(Concurrent Mark-Sweep)是以牺牲吞吐量为代价来获得最短回收停顿时间的垃圾回收器。对于要求服务器响应速度的应用上，这种垃圾回收器非常适合。在启动JVM参数加上**-XX:+UseConcMarkSweepGC** ，这个参数表示对于老年代的回收采用CMS。CMS采用的基础算法是：标记—清除。
二.CMS工作步骤


初始标记(STW initial mark)
并发标记(Concurrent marking)
并发预清理(Concurrent preclea]]></description><category></category></item><item><title><![CDATA[压测时cpu不高，load average过高的问题排查及解决方法]]></title><link>https://blog.youkuaiyun.com/u010857795/article/details/112788775</link><guid>https://blog.youkuaiyun.com/u010857795/article/details/112788775</guid><author>u010857795</author><pubDate>Tue, 19 Jan 2021 14:51:31 +0800</pubDate><description><![CDATA[一.背景说明
这次代码新增了入参解密，出参加密，然后压测过不了，接口响应时间超过公司规定了，遂排查之，然后做个记录。
二.排查过程
方式一：
打印耗时日志
1.怀疑是加解密算法太耗时，我们是采用RSA+AES的方式；所以先补日志，在代码前后打印耗时。
2.最终看日志发现在将流转换为String耗时比较多，应该是普通io的操作是阻塞的，io的read和write需要阻塞读或者写，在高并发的情况下， 响应不过来。
这种方式比较反锁，而且在修改比较多的情况，需要补大量日志，不是很方便，建议采用第二种方式。
方式二]]></description><category></category></item><item><title><![CDATA[浅谈HTTP和HTTPS]]></title><link>https://blog.youkuaiyun.com/u010857795/article/details/104697717</link><guid>https://blog.youkuaiyun.com/u010857795/article/details/104697717</guid><author>u010857795</author><pubDate>Mon, 18 Jan 2021 16:51:14 +0800</pubDate><description><![CDATA[1.什么是HTTP
HTTP（HyperText Transfer Protocol）协议，即超文本传输协议，是一个基于请求与响应，无状态的，应用层的协议，常基于TCP/IP协议传输数据，互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。设计HTTP的初衷是为了提供一种发布和接收HTML页面的方法。
在此之前先了解一些基本知识：
1.TCP/IP协议：
要想了解什么是TCP/...]]></description><category></category></item><item><title><![CDATA[Java设计模式之装饰者模式(Decorator Pattern)]]></title><link>https://blog.youkuaiyun.com/u010857795/article/details/104697376</link><guid>https://blog.youkuaiyun.com/u010857795/article/details/104697376</guid><author>u010857795</author><pubDate>Fri, 06 Mar 2020 15:51:12 +0800</pubDate><description><![CDATA[1.什么是设计模式
设计模式是指在软件开发过程中，经过验证的，用于解决在特定环境下，重复出现的，特定问题的解决方案。可以用来提高代码可复用性、可维护性、可读性、稳健性以及安全性。1995 年，GoF（Gang of Four，四人组/四人帮）合作出版了《设计模式：可复用面向对象软件的基础》一书，共收录了 23 种设计模式，从此树立了软件设计模式领域的里程碑，人称「GoF设计模式」。
分类：
a. ...]]></description><category></category></item><item><title><![CDATA[阿里云配置tomcat后无法访问]]></title><link>https://blog.youkuaiyun.com/u010857795/article/details/79415488</link><guid>https://blog.youkuaiyun.com/u010857795/article/details/79415488</guid><author>u010857795</author><pubDate>Thu, 01 Mar 2018 17:36:58 +0800</pubDate><description><![CDATA[好久没写博客了，实在是有点偷懒了，因为在沉淀一些东西，所以以后有机会补上吧。 
之前陆陆续续看了会关于Linux的东西，也敲过一些命令，感觉还是没落到实处，所以申请了个阿里云服务器来做一个汇总，做编程的实践，配置及部署。

Linux版本：CentOS7.3 
配置tomcat之后，至于具体怎样安装，配置tomcat,网上很多随便找。 
然后启动tomcat，启动没问题，但是外部无法访问。 
然后...]]></description><category></category></item><item><title><![CDATA[Spring Boot实现JSP解析]]></title><link>https://blog.youkuaiyun.com/u010857795/article/details/77072912</link><guid>https://blog.youkuaiyun.com/u010857795/article/details/77072912</guid><author>u010857795</author><pubDate>Thu, 10 Aug 2017 20:36:30 +0800</pubDate><description><![CDATA[Spring Boot可以轻松创建可以“运行”的独立的，生产级的基于Spring的应用程序。大多数Spring Boot应用程序需要很少的Spring配置。 功能 
创建独立的Spring应用程序 
直接嵌入Tomcat，Jetty或Undertow（不需要部署WAR文件） 
提供好用的POM来简化你的Maven配置 
尽可能自动配置Spring  
提供生产就绪功能如指标，运行状况检查和外部化配置]]></description><category></category></item><item><title><![CDATA[Datatables 基于Java的服务器模式]]></title><link>https://blog.youkuaiyun.com/u010857795/article/details/71512046</link><guid>https://blog.youkuaiyun.com/u010857795/article/details/71512046</guid><author>u010857795</author><pubDate>Mon, 10 Jul 2017 19:58:00 +0800</pubDate><description><![CDATA[Datatables是一款jquery表格插件。它是一个高度灵活的工具，可以将任何HTML表格添加高级的交互功能。这是中文官网：点击这里效果图： 
 
当然比如添加功能等功能的图标是用的font-awesome插件,详情请戳官网： 
点击这里这个demo是基于服务器端的，搜索和分页功能也是基于后台返回数据，这里只列出关键代码，具体情况需要根据你的后台代码再调整。1.jsp页面：表格的css只需要引用]]></description><category></category></item><item><title><![CDATA[基于Maven的Spring+SpringMVC+MyBatis环境搭建]]></title><link>https://blog.youkuaiyun.com/u010857795/article/details/73512299</link><guid>https://blog.youkuaiyun.com/u010857795/article/details/73512299</guid><author>u010857795</author><pubDate>Wed, 21 Jun 2017 20:30:07 +0800</pubDate><description><![CDATA[我们以一个用户登陆为例开始搭建环境。 
项目目录结构如下： 
框架版本：Mybatis:3.x，Spring:3.x 
项目采用xml+注解方式配置。 
 
一.先完成Spring+MaBatis的环境搭建： 
数据库脚本文件：CREATE TABLE `login` (
  `login_id` int(11) NOT NULL AUTO_INCREMENT,
  `user_name` varc]]></description><category></category></item><item><title><![CDATA[Bootbox+JQuery UI Datepicker 时间输入框点击无响应]]></title><link>https://blog.youkuaiyun.com/u010857795/article/details/71512042</link><guid>https://blog.youkuaiyun.com/u010857795/article/details/71512042</guid><author>u010857795</author><pubDate>Wed, 10 May 2017 20:01:21 +0800</pubDate><description><![CDATA[在使用Bootbox+JQuery datepicker时，发现点击输入框，并不是被div层遮住了，而是根本就没有触发这个显示日期的事件，且无错误提示信息。 
情况是这样的： 
1.html代码： 
这个也就是我们的弹出层。    <div id="formDiv" class="form-group form">
        <form id="addForm" class="cmxform"]]></description><category></category></item><item><title><![CDATA[MyBatis 多对多 中间表插入数据]]></title><link>https://blog.youkuaiyun.com/u010857795/article/details/71512044</link><guid>https://blog.youkuaiyun.com/u010857795/article/details/71512044</guid><author>u010857795</author><pubDate>Wed, 10 May 2017 18:45:55 +0800</pubDate><description><![CDATA[在做这个员工管理系统demo的时候，由于user和role是多对多关系，且user主键是自增的，所有我们没办法提前知晓这个user_id，所以插入的时候，就需要先插入user，然后再找到刚插入的id拿出来，再插入中间表user_role，这样才能将表关系对应起来，才能算一个完整的插入的过程。所以现在的问题就是怎么知道这个user_id，再怎么拿出来，再插入中间表user_role。方法：在MyBat]]></description><category></category></item><item><title><![CDATA[MyBatis 模糊查询 like %]]></title><link>https://blog.youkuaiyun.com/u010857795/article/details/71565280</link><guid>https://blog.youkuaiyun.com/u010857795/article/details/71565280</guid><author>u010857795</author><pubDate>Wed, 10 May 2017 18:15:42 +0800</pubDate><description><![CDATA[我们在配置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]]></description><category></category></item><item><title><![CDATA[MyBatis一对多，多对一，多对多]]></title><link>https://blog.youkuaiyun.com/u010857795/article/details/70766573</link><guid>https://blog.youkuaiyun.com/u010857795/article/details/70766573</guid><author>u010857795</author><pubDate>Tue, 09 May 2017 21:15:36 +0800</pubDate><description><![CDATA[MyBatis中的一对多和对多一，多对多 
主要就是resultMap中 
association – 一个复杂的类型关联;许多结果将包成这种类型（一对多） 
collection – 复杂类型的集合（多对一） 
这2个属性的使用，而一对多和多对一都是相互的，只是站的角度不同。实例： 
这个实例只说这2个属性的使用方法，具体的配置和运行结果在SSM环境搭建文章中写出。 
1.首先是数据库，沿用之前员]]></description><category></category></item><item><title><![CDATA[简单的MyBatis demo之数据库增删改查]]></title><link>https://blog.youkuaiyun.com/u010857795/article/details/71499616</link><guid>https://blog.youkuaiyun.com/u010857795/article/details/71499616</guid><author>u010857795</author><pubDate>Tue, 09 May 2017 20:02:07 +0800</pubDate><description><![CDATA[一.MyBatis简介（摘自官方文档）：MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解，将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。 
构成：Sq]]></description><category></category></item><item><title><![CDATA[SpringMVC+JQuery Ajax简单实例]]></title><link>https://blog.youkuaiyun.com/u010857795/article/details/70649649</link><guid>https://blog.youkuaiyun.com/u010857795/article/details/70649649</guid><author>u010857795</author><pubDate>Thu, 27 Apr 2017 19:21:45 +0800</pubDate><description><![CDATA[一、Ajax简介： 
AJAX = 异步 JavaScript 和 XML（Asynchronous JavaScript and XML）是与服务器交换数据的技术。 
简短地说，在不重载整个网页的情况下，AJAX 通过后台加载数据，并在网页上进行显示。常用方法：$.ajax({
    url:'http://www.test.com',
    type:'POST', //GET
    as]]></description><category></category></item><item><title><![CDATA[org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 23 in XML document from]]></title><link>https://blog.youkuaiyun.com/u010857795/article/details/70285356</link><guid>https://blog.youkuaiyun.com/u010857795/article/details/70285356</guid><author>u010857795</author><pubDate>Thu, 27 Apr 2017 18:52:39 +0800</pubDate><description><![CDATA[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]]></description><category></category></item><item><title><![CDATA[Git的基本使用]]></title><link>https://blog.youkuaiyun.com/u010857795/article/details/68928161</link><guid>https://blog.youkuaiyun.com/u010857795/article/details/68928161</guid><author>u010857795</author><pubDate>Fri, 31 Mar 2017 18:31:02 +0800</pubDate><description><![CDATA[以下是我经常使用的命令，做个记录： 
这是Git的使用手册：点击打开链接如果要使用github，以下的配置就必不可少：git config --global user.name "xxxxx"   //设置全局user
git config --global user.email"xxx@xx.com"  //设置全局email
git config -l    //查询config配置信息
git]]></description><category></category></item></channel></rss>