<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Black Shadow]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/lanmo555</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; lanmo555]]></copyright><item><title><![CDATA[【ROS】源码分析-消息订阅与发布]]></title><link>https://blog.youkuaiyun.com/lanmo555/article/details/125357453</link><guid>https://blog.youkuaiyun.com/lanmo555/article/details/125357453</guid><author>lanmo555</author><pubDate>Sun, 19 Jun 2022 23:07:50 +0800</pubDate><description><![CDATA[本文通过`NodeHandle::subscribe`和`Publication::publish()`源码作为入口，来分析PubNode、SubNode之间是网络连接是如何建立的，消息是如何发布的，topic队列到底是如何实现的。]]></description><category></category></item><item><title><![CDATA[【ROS】源码分析-服务发现原理]]></title><link>https://blog.youkuaiyun.com/lanmo555/article/details/125356148</link><guid>https://blog.youkuaiyun.com/lanmo555/article/details/125356148</guid><author>lanmo555</author><pubDate>Sun, 19 Jun 2022 14:18:11 +0800</pubDate><description><![CDATA[本文通过NodeHandle源码作为入口，来分析PubNode、SubNode、Master之间是如何发现彼此的。]]></description><category></category></item><item><title><![CDATA[【ROS】源码分析-roscore与Master启动]]></title><link>https://blog.youkuaiyun.com/lanmo555/article/details/125324127</link><guid>https://blog.youkuaiyun.com/lanmo555/article/details/125324127</guid><author>lanmo555</author><pubDate>Sun, 19 Jun 2022 11:55:40 +0800</pubDate><description><![CDATA[本文从源码层面分析ros Master是如何启动的，以及Master（服务注册和发布、参数服务）到底是什么高大尚的东东。]]></description><category></category></item><item><title><![CDATA[基于先序遍历 输出二叉树叶子节点的路径(非递归)]]></title><link>https://blog.youkuaiyun.com/lanmo555/article/details/79644699</link><guid>https://blog.youkuaiyun.com/lanmo555/article/details/79644699</guid><author>lanmo555</author><pubDate>Wed, 21 Mar 2018 19:45:10 +0800</pubDate><description><![CDATA[基于先序遍历 输出二叉树叶子节点的路径(非递归)

思路： 
1. 先序遍历二叉树，入栈，直到访问到叶子节点； 
2. 如果达到叶子节点，遍历当前栈，获取当前叶子节点的路径；然后进入回退模式，直到有新的右节点。 
3. 在回退的过程中，如果是父节点为了不再重复进入进入左右子树，使用一个pre指针指向最近回退点(pre肯定是当前父节点的左或右孩子)。

定义节点，为了简化，省略访问修饰、泛型、get...]]></description><category></category></item><item><title><![CDATA[小记--生产服务优化过程]]></title><link>https://blog.youkuaiyun.com/lanmo555/article/details/78436740</link><guid>https://blog.youkuaiyun.com/lanmo555/article/details/78436740</guid><author>lanmo555</author><pubDate>Fri, 03 Nov 2017 16:20:09 +0800</pubDate><description><![CDATA[本文记录了一次生产环境问题的排查和处理过程，虽然是件小事，但主要是由此引申出DevOps的意义和所需技能。]]></description><category></category></item><item><title><![CDATA[SpringMvc/SpringBoot HTTP通信加解密]]></title><link>https://blog.youkuaiyun.com/lanmo555/article/details/77059879</link><guid>https://blog.youkuaiyun.com/lanmo555/article/details/77059879</guid><author>lanmo555</author><pubDate>Thu, 10 Aug 2017 17:03:15 +0800</pubDate><description><![CDATA[前言

从去年10月份到现在忙的没时间写博客了，今天就甩给大家一个干货吧！！！



近来很多人问到下面的问题


我们不想在每个Controller方法收到字符串报文后再调用一次解密，虽然可以完成，但是很low，且如果想不再使用加解密，修改起来很是麻烦。
我们想在使用Rest工具或swagger请求的时候不进行加解密，而在app调用的时候处理加解密，这可如何操作。


针对以上的问题，下面直接给...]]></description><category></category></item><item><title><![CDATA[Fastjson 解析多级泛型时而失败的解决方案]]></title><link>https://blog.youkuaiyun.com/lanmo555/article/details/52769372</link><guid>https://blog.youkuaiyun.com/lanmo555/article/details/52769372</guid><author>lanmo555</author><pubDate>Sun, 09 Oct 2016 18:27:55 +0800</pubDate><description><![CDATA[fastjson 解析多级泛型时而失败：class PeiqiResponse<T> {    Boolean success;
    Integer errCode;
    String  errDes;
    T       result;
}声明：PeiqiResponse<List<Dept>>调试分析经过多次调试，问题出现在这里 DefaultFieldDeserializer#pa]]></description><category></category></item><item><title><![CDATA[基于OTP的AES数据加密]]></title><link>https://blog.youkuaiyun.com/lanmo555/article/details/52690670</link><guid>https://blog.youkuaiyun.com/lanmo555/article/details/52690670</guid><author>lanmo555</author><pubDate>Wed, 28 Sep 2016 15:09:45 +0800</pubDate><description><![CDATA[OTP(One Time Password)单次有效密码，即使用一次就失效的密码，也就说每次使用都是一个不同的密码。现在普遍用来作为认证的二次验证。这种二次验证的好处是能有效抵御暴力破解。要使用这种密码就得有生产此种密码的生成方式： 
 - HTOP(HMAC-based One-time Password Algorithm) 基于计数器生成密码 
 - TOTP(Time-based One-t]]></description><category></category></item><item><title><![CDATA[phantomjs  html2Image.js 网页转换图片]]></title><link>https://blog.youkuaiyun.com/lanmo555/article/details/52527973</link><guid>https://blog.youkuaiyun.com/lanmo555/article/details/52527973</guid><author>lanmo555</author><pubDate>Tue, 13 Sep 2016 17:43:39 +0800</pubDate><description><![CDATA[phantomjs  服务器，模拟浏览器请求，然后将整个页面转出成图片]]></description><category></category></item><item><title><![CDATA[My Git Flow]]></title><link>https://blog.youkuaiyun.com/lanmo555/article/details/52474470</link><guid>https://blog.youkuaiyun.com/lanmo555/article/details/52474470</guid><author>lanmo555</author><pubDate>Thu, 08 Sep 2016 19:47:41 +0800</pubDate><description><![CDATA[目前需要解决的问题：
在开发过程中，多个功能后台开发完成后，前端再开发，需要将几个后台完成的功能同时部署到开发环境
一个版本中的多个功能都开发完成后，需要集成测试
多个版本在同时开工的情况下，多个版本都测试完成后，上线的时候需要多个版本合并
解决办法：
利用临时分支 dev-merge 合并开发中的多个feature分支，然后部署到开发环境
每个版本基于 develop 分支创建新分支(如:M9W2]]></description><category></category></item><item><title><![CDATA[将项目发布到Maven中央库]]></title><link>https://blog.youkuaiyun.com/lanmo555/article/details/52456751</link><guid>https://blog.youkuaiyun.com/lanmo555/article/details/52456751</guid><author>lanmo555</author><pubDate>Wed, 07 Sep 2016 09:51:25 +0800</pubDate><description><![CDATA[将项目发布到Maven中央仓库]]></description><category></category></item><item><title><![CDATA[spring-cache 雪崩]]></title><link>https://blog.youkuaiyun.com/lanmo555/article/details/52355589</link><guid>https://blog.youkuaiyun.com/lanmo555/article/details/52355589</guid><author>lanmo555</author><pubDate>Mon, 29 Aug 2016 18:38:01 +0800</pubDate><description><![CDATA[spring-cache 基本原理是利用拦截器，先尝试读取缓存，未命中缓存，先读库在写入缓存，经过查看源码如果在并发量大的时候容易造成“雪崩”。原因是在更新缓存逻辑中没有做并发更新的处理。]]></description><category></category></item><item><title><![CDATA[Reflections - Java 8 - invalid constant type]]></title><link>https://blog.youkuaiyun.com/lanmo555/article/details/52184305</link><guid>https://blog.youkuaiyun.com/lanmo555/article/details/52184305</guid><author>lanmo555</author><pubDate>Thu, 11 Aug 2016 16:52:29 +0800</pubDate><description><![CDATA[异常说明使用Reflections扫描的时候出现could not create class file from, 原因是invalid constant type: 18异常堆栈:org.reflections.ReflectionsException: could not create class file from EmployeeDao.class
    at org.reflection]]></description><category></category></item><item><title><![CDATA[CentOS7 Tomcat 启动过程很慢,JVM上的随机数与熵池策略]]></title><link>https://blog.youkuaiyun.com/lanmo555/article/details/51909021</link><guid>https://blog.youkuaiyun.com/lanmo555/article/details/51909021</guid><author>lanmo555</author><pubDate>Thu, 14 Jul 2016 14:24:38 +0800</pubDate><description><![CDATA[1. CentOS7 Tomcat 启动过程很慢在centos启动官方的tomcat时，启动过程很慢，需要几分钟: SessionIdGenerator.createSecureRandom Creation of SecureRa
ndom instance for session ID generation using [SHA1PRNG] took [142,673] milliseconds]]></description><category></category></item><item><title><![CDATA[centos7 systemd in Fedora 22: Failed to restart service: Access Denied]]></title><link>https://blog.youkuaiyun.com/lanmo555/article/details/51907828</link><guid>https://blog.youkuaiyun.com/lanmo555/article/details/51907828</guid><author>lanmo555</author><pubDate>Thu, 14 Jul 2016 11:35:18 +0800</pubDate><description><![CDATA[使用 systemctl 重启服务的时候提示拒绝访问$ systemctl restart postfix
Failed to restart postfix.service: Access denied解决办法：systemctl daemon-reexecREF: 
* https://major.io/2015/09/18/systemd-in-fedora-22-failed-to-rest]]></description><category></category></item><item><title><![CDATA[分享swagger]]></title><link>https://blog.youkuaiyun.com/lanmo555/article/details/51859231</link><guid>https://blog.youkuaiyun.com/lanmo555/article/details/51859231</guid><author>lanmo555</author><pubDate>Fri, 08 Jul 2016 13:16:32 +0800</pubDate><description><![CDATA[Swagger 是一个规范和完整的框架，用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法，参数和模型紧密集成到服务器端的代码，允许API来始终保持同步。Swagger 让部署管理和使用功能强大的API从未如此简单。]]></description><category></category></item><item><title><![CDATA[[Exception]spring-boot Failed to start component [StandardServer[-1]]]]></title><link>https://blog.youkuaiyun.com/lanmo555/article/details/51435534</link><guid>https://blog.youkuaiyun.com/lanmo555/article/details/51435534</guid><author>lanmo555</author><pubDate>Tue, 17 May 2016 13:53:55 +0800</pubDate><description><![CDATA[在使用spring-boot时，使用了其他的模块，导致spring-boot启动总是失败。错误堆栈：Failed to start component [StandardService[Tomcat]]]]></description><category></category></item><item><title><![CDATA[Android Google Services Framework & Google Play]]></title><link>https://blog.youkuaiyun.com/lanmo555/article/details/51165911</link><guid>https://blog.youkuaiyun.com/lanmo555/article/details/51165911</guid><author>lanmo555</author><pubDate>Sat, 16 Apr 2016 01:43:20 +0800</pubDate><description><![CDATA[今天早上看到手机提示系统更新完成，需要重启，然后点击了reboot, 没想到重启后google play 打不开了，并且老是提 has topped。重新安装以前存储的 google services framework.apk 和 google play.apk，然并未卵用。估计是Android系统版本升级的了，导致了不兼容，看了一下Android版本，竟然一下从4.4到了6.0.1.MMB29M]]></description><category></category></item><item><title><![CDATA[spring-jms/DefaultMessageListenerContainer配置]]></title><link>https://blog.youkuaiyun.com/lanmo555/article/details/51088247</link><guid>https://blog.youkuaiyun.com/lanmo555/article/details/51088247</guid><author>lanmo555</author><pubDate>Thu, 07 Apr 2016 18:35:24 +0800</pubDate><description><![CDATA[DefaultMessageListenerContainer配置
一个DefaultMessageListenerContainer可以开启多个  (concurrent)AsyncMessageListenerInvoker并发 收消息两种模式: 
模式一：递增监听线程并调度，监听线程轮询监听消息
模式二：动态调度监听线程(递增/递减)，有限轮询+重新触发调度]]></description><category></category></item><item><title><![CDATA[supervisord]]></title><link>https://blog.youkuaiyun.com/lanmo555/article/details/51042318</link><guid>https://blog.youkuaiyun.com/lanmo555/article/details/51042318</guid><author>lanmo555</author><pubDate>Sat, 02 Apr 2016 01:00:51 +0800</pubDate><description><![CDATA[supervisordeasy_install install supervisor
echo_supervisord_conf > /etc/supervisord.confrunsupervisordvi /etc/supervisord.conf[program:ejiakao]
command=/data/panda/ejiakao.sh
directory=/data/panda
user]]></description><category></category></item></channel></rss>