<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ssshen14的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/ssshen14</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ssshen14]]></copyright><item><title><![CDATA[递归调用转为循环]]></title><link>https://blog.youkuaiyun.com/ssshen14/article/details/104431031</link><guid>https://blog.youkuaiyun.com/ssshen14/article/details/104431031</guid><author>ssshen14</author><pubDate>Fri, 21 Feb 2020 18:04:35 +0800</pubDate><description><![CDATA[背景
有一个接口会返回json格式的字符串，json格式是嵌套的，类似这样的如下的结构，需要转换为一个list，当然最简单的写一个递归就可以了，但是有一句话： “所有的递归都可以转化为循环”，那么就用循环实现吧。
{
	"respData":[
		{
			"id":1,
			"isvalid":1,
			"orgName":"汽车",
			"parentId":0,
			"subOrg...]]></description><category></category></item><item><title><![CDATA[自定义ClassLoader的实现]]></title><link>https://blog.youkuaiyun.com/ssshen14/article/details/104342067</link><guid>https://blog.youkuaiyun.com/ssshen14/article/details/104342067</guid><author>ssshen14</author><pubDate>Sun, 16 Feb 2020 16:10:21 +0800</pubDate><description><![CDATA[背景
公司使用的是自己实现的RPC框架，有自己的传输协议和序列化方式，在RPC服务启动的时候，会扫描当前服务的lib目录，然后后加载以com.xxx开头的class文件，为接口的返回结果序列化为java Object做准备。
2019年开始，通过不断的调研和思考，RPC服务接口测试平台初具雏形，在开发测试平台的时候，一直存在一个问题，测试平台肯定要能够为所有的RPC服务都提供测试能力，但是每个RP...]]></description><category></category></item><item><title><![CDATA[Junit5 动态执行测试类]]></title><link>https://blog.youkuaiyun.com/ssshen14/article/details/103718573</link><guid>https://blog.youkuaiyun.com/ssshen14/article/details/103718573</guid><author>ssshen14</author><pubDate>Thu, 26 Dec 2019 16:55:24 +0800</pubDate><description><![CDATA[Junit5 重新构造了junit5，支持在代码中执行测试类
使用LauncherDiscoveryRequest、Launcher的方法实现
public void executeByJunit5(String serviceName, String branch, String fileName) {
        //需要执行的测试类绝对路径
        String testCase...]]></description><category></category></item><item><title><![CDATA[kafka和hive一起使用，SparkSession StreamingContext一起使用]]></title><link>https://blog.youkuaiyun.com/ssshen14/article/details/103516813</link><guid>https://blog.youkuaiyun.com/ssshen14/article/details/103516813</guid><author>ssshen14</author><pubDate>Thu, 12 Dec 2019 21:17:30 +0800</pubDate><description><![CDATA[object RealTimeRequestParamCollect {
 // 在伪分布式中，一个spark 应用对应了一个main函数，放在一个driver里,driver里有一个对应的实例（spark context).driver 负责向各个节点分发资源以及数据。
  // 那么如果你把创建实例放在了main函数的外面，driver就没法分发了。所以如果这样写在local模式下是可以成功的...]]></description><category></category></item><item><title><![CDATA[记一次配置fiddler转发请求（HTTPS）不生效的解决过程]]></title><link>https://blog.youkuaiyun.com/ssshen14/article/details/102649836</link><guid>https://blog.youkuaiyun.com/ssshen14/article/details/102649836</guid><author>ssshen14</author><pubDate>Sun, 20 Oct 2019 16:28:03 +0800</pubDate><description><![CDATA[一、背景
同一个域名，其中一个前缀开头的请求需要分到192.168.187.170:8089才能正常访问，8089为web应用监听端口，也就是说这类特殊的请求不通过nginx处理
前提：公司网络架构为：nginx–&gt;web应用–&gt;rpc服务
二、首次配置
fiddler script OnBeforeRequest方法中增加如下配置
if (oSession.uriContains('...]]></description><category></category></item><item><title><![CDATA[select2动态添加option]]></title><link>https://blog.youkuaiyun.com/ssshen14/article/details/93070463</link><guid>https://blog.youkuaiyun.com/ssshen14/article/details/93070463</guid><author>ssshen14</author><pubDate>Thu, 20 Jun 2019 17:21:16 +0800</pubDate><description><![CDATA[select2动态添加option背景html原来的实现javascirpt实现后端接口返回取值修改后javascript实现后端接口返回结果取值结论
背景
select2 使用ajax remote加载数据方式时，不能使用$(’#select2’).val();的形式获取option的value，为了统一代码风格，需要把请求接口返回的结果以optin的形式动态添加到select2组件上。
htm...]]></description><category></category></item><item><title><![CDATA[RPC服务测试新思路]]></title><link>https://blog.youkuaiyun.com/ssshen14/article/details/88965798</link><guid>https://blog.youkuaiyun.com/ssshen14/article/details/88965798</guid><author>ssshen14</author><pubDate>Tue, 02 Apr 2019 11:00:53 +0800</pubDate><description><![CDATA[RPC服务测试新思路

原创：转转QA转转QA

引言

为了保证RPC服务的稳定，最大可能的防止BUG带到线上，测试过程中对RPC服务做接口测试是必要的步骤。目前的通用做法是在测试框架中引入被测服务的contract 包，再基于contract包开发对应的接口测试代码，并尽量全面的构建覆盖多个场景的入参。

目前的方式有几方面不足：


	必须有一定Java基础的测试同学才能够胜任；
	
	...]]></description><category></category></item><item><title><![CDATA[公开课，业余时间分享了一节公开课，有需要的朋友可以看看]]></title><link>https://blog.youkuaiyun.com/ssshen14/article/details/82499482</link><guid>https://blog.youkuaiyun.com/ssshen14/article/details/82499482</guid><author>ssshen14</author><pubDate>Fri, 07 Sep 2018 17:00:26 +0800</pubDate><description><![CDATA[腾讯课堂：https://ke.qq.com/course/329678?tuin=1b04813e 
公开课内容：抓包工具fiddler讲解]]></description><category></category></item><item><title><![CDATA[自动生成testng.xml]]></title><link>https://blog.youkuaiyun.com/ssshen14/article/details/81184111</link><guid>https://blog.youkuaiyun.com/ssshen14/article/details/81184111</guid><author>ssshen14</author><pubDate>Tue, 24 Jul 2018 14:31:10 +0800</pubDate><description><![CDATA[工作中接到一个任务，调研是否可以实现rpc服务自动diff功能。本篇是其中的一个子功能，测试类的testng.xml自动实现。

实现原理： 
1.实例化XmlSuite类 
2.扫描目录下所有的classes文件，然后遍历class的所有方法是否包含@Test注解 
3.步骤2中的必要信息放到XmlSuite中 
4.保存XmlSuite到指定位置

主要方法：



/**
 * 生成test...]]></description><category></category></item><item><title><![CDATA[java在运行时动态编译.java文件，转载Stack OverFlow]]></title><link>https://blog.youkuaiyun.com/ssshen14/article/details/81112297</link><guid>https://blog.youkuaiyun.com/ssshen14/article/details/81112297</guid><author>ssshen14</author><pubDate>Thu, 19 Jul 2018 11:23:48 +0800</pubDate><description><![CDATA[原始地址：https://stackoverflow.com/questions/27608408/compiling-a-class-at-runtime-with-classpath

I’m currently trying to compile a class at runtime but for some reason it’s only working on one system. B...]]></description><category></category></item><item><title><![CDATA[扫描Class文件，获取所有可调用方法及方法的入参等信息]]></title><link>https://blog.youkuaiyun.com/ssshen14/article/details/81067465</link><guid>https://blog.youkuaiyun.com/ssshen14/article/details/81067465</guid><author>ssshen14</author><pubDate>Mon, 16 Jul 2018 16:35:48 +0800</pubDate><description><![CDATA[主要思路： 
1.从gitlab上下载contract源码，使用org.eclipse.jgit 
2.mvn编译并把生成的jar和依赖的jar拷贝到指定目录下，使用org.apache.maven.shared  maven-invoker 
3.扫描源码列出所有以I开头，以.java结尾的文件绝对路径getCanonicalPath() 
4.根据第三步的文件绝对路径，切割转换出classNa...]]></description><category></category></item><item><title><![CDATA[java指定目录下的jar加到classloader中]]></title><link>https://blog.youkuaiyun.com/ssshen14/article/details/81066950</link><guid>https://blog.youkuaiyun.com/ssshen14/article/details/81066950</guid><author>ssshen14</author><pubDate>Mon, 16 Jul 2018 16:11:56 +0800</pubDate><description><![CDATA[List&amp;lt;URL&amp;gt; libUrls = new ArrayList&amp;lt;URL&amp;gt;();
// contract依赖的所有jar，加到classloader的classpath中
File libPath = new File(Const.ROOT_TESTCASES_PATH + File.separator + Const.SERVICE_PREFIX + serviceNa...]]></description><category></category></item><item><title><![CDATA[jdk8删除非空文件夹，拷贝自StackOverflow]]></title><link>https://blog.youkuaiyun.com/ssshen14/article/details/81066792</link><guid>https://blog.youkuaiyun.com/ssshen14/article/details/81066792</guid><author>ssshen14</author><pubDate>Mon, 16 Jul 2018 16:03:59 +0800</pubDate><description><![CDATA[import java.io.File;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Comparator;

/**
 * 多个文件相关的复杂操作，组合到一起
 * 
 * @author shenyanfang
 * @date 2018年...]]></description><category></category></item><item><title><![CDATA[python heapq简述   从https://github.com/qiwsir/algorithm/blob/master/heapq.mdfuzh复制]]></title><link>https://blog.youkuaiyun.com/ssshen14/article/details/80998198</link><guid>https://blog.youkuaiyun.com/ssshen14/article/details/80998198</guid><author>ssshen14</author><pubDate>Wed, 11 Jul 2018 11:40:54 +0800</pubDate><description><![CDATA[python中的堆排序peapq模块

heapq模块实现了python中的堆排序，并提供了有关方法。让用Python实现排序算法有了简单快捷的方式。

heapq的官方文档和源码：8.4.heapq-Heap queue algorithm

下面通过举例的方式说明heapq的应用方法



实现堆排序

#! /usr/bin/evn python
#coding:utf-8

from he...]]></description><category></category></item><item><title><![CDATA[eclipse 4.5 离线安装mybatis generator1.3.6卡在Install New Software的解决方法]]></title><link>https://blog.youkuaiyun.com/ssshen14/article/details/80004459</link><guid>https://blog.youkuaiyun.com/ssshen14/article/details/80004459</guid><author>ssshen14</author><pubDate>Thu, 19 Apr 2018 14:28:59 +0800</pubDate><description><![CDATA[eclipse Mars Release (4.5.0) 离线安装 Mybatis generator 1.3.6 卡在Install New Software的解决方法]]></description><category></category></item><item><title><![CDATA[记一次crontab 报“abrt: detected unhandled Python exception in ”错误的解决过程]]></title><link>https://blog.youkuaiyun.com/ssshen14/article/details/79933094</link><guid>https://blog.youkuaiyun.com/ssshen14/article/details/79933094</guid><author>ssshen14</author><pubDate>Fri, 13 Apr 2018 19:23:06 +0800</pubDate><description><![CDATA[题记 
    上周把一个python服务迁移到新的机器上，顺带着需要把python写的一个后台任务也迁移到新的机器。但是在新的机器上python的定时任务就是不执行。下面记录一下自己的解决过程，以备以后查阅。

现象 
   先来看一下现象： 
    首先查看 vi /var/log/cron文件，看定时任务是否执行了，从该文件可以看到任务确实执行了 
    
   接下来查看vi /var...]]></description><category></category></item><item><title><![CDATA[python2.7.14 translate解释]]></title><link>https://blog.youkuaiyun.com/ssshen14/article/details/79500035</link><guid>https://blog.youkuaiyun.com/ssshen14/article/details/79500035</guid><author>ssshen14</author><pubDate>Fri, 09 Mar 2018 17:04:49 +0800</pubDate><description><![CDATA[先把源码放在这里PyDoc_STRVAR(translate__doc__,
"S.translate(table [,deletechars]) -> string\n\
\n\
Return a copy of the string S, where all characters occurring\n\
in the optional argument deletechars are remo]]></description><category></category></item><item><title><![CDATA[python2.7  maketrans工作原理]]></title><link>https://blog.youkuaiyun.com/ssshen14/article/details/79403281</link><guid>https://blog.youkuaiyun.com/ssshen14/article/details/79403281</guid><author>ssshen14</author><pubDate>Wed, 28 Feb 2018 17:20:54 +0800</pubDate><description><![CDATA[今天用到了python str maketrans，顺道看了一下实现原理，做一下记录



# Case conversion helpers
# Use str to convert Unicode literal in case of -U
# 把ascii表的字符放到list中
l = map(chr, xrange(256))
# 把list转换为str
_idmap = str('')....]]></description><category></category></item><item><title><![CDATA[二十、python 字符串去重，主要依赖maketrans和translate这两个方法]]></title><link>https://blog.youkuaiyun.com/ssshen14/article/details/79402153</link><guid>https://blog.youkuaiyun.com/ssshen14/article/details/79402153</guid><author>ssshen14</author><pubDate>Wed, 28 Feb 2018 16:19:28 +0800</pubDate><description><![CDATA[最近遇到一个问题，怎么来对一个字符串去重？ 
我的思路是1.先分割字符串；2.然后使用set去重；3.用join连接起来。  
那就引入了另一个问题：怎么分割字符串来保证结果中不包含空格？当然有很笨的方法，本篇主要谈论有没有一种更简单的方法？

首先，先来看一下需要分割的字符串



# 张三;李四;王五;张三;李四
bbb = u';\u5f20\u4e09;\u674e\u56db;\u738...]]></description><category></category></item><item><title><![CDATA[十九、弹出框文字带超链接]]></title><link>https://blog.youkuaiyun.com/ssshen14/article/details/78673785</link><guid>https://blog.youkuaiyun.com/ssshen14/article/details/78673785</guid><author>ssshen14</author><pubDate>Thu, 30 Nov 2017 11:05:06 +0800</pubDate><description><![CDATA[原因：弹出提示框，让用户先登录，才可以进行被保护的操作，想要提示框中的文档带超链接； 
过程： 
alert：实现不了，文字会原样展示 
自定义alert：就想实现一个简单的功能，不想写太多代码 
jquery ui dialog：简单，div中支持复杂的样式展示 
html：<div id="alertlogin" title="请先登陆">
    <p><a href='/login?next]]></description><category></category></item></channel></rss>