<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[learn_to_fly的博客]]></title><description><![CDATA[总结、、学习、、]]></description><link>https://blog.youkuaiyun.com/duanmulirui</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; duanmulirui]]></copyright><item><title><![CDATA[MySQL存储过程-初识]]></title><link>https://blog.youkuaiyun.com/duanmulirui/article/details/122239694</link><guid>https://blog.youkuaiyun.com/duanmulirui/article/details/122239694</guid><author>duanmulirui</author><pubDate>Thu, 30 Dec 2021 16:27:32 +0800</pubDate><description><![CDATA[一、存储过程的创建语法


CREATE PROCEDURE 名称(指明进参IN、出参OUT、进出参INOUT   参数名  类型 )
返回标签:BEGIN
 DECLARE  变量名 类型  （默认值DEFAULT  值） //定义变量
 


 IF 条件 THEN

 ELSE  
  LEAVE 返回标签；
 END IF

 

 //循环游标
 OPEN 游标
 //开始重复
 REPEAT
 FETCH 
 
 ...

 //结束重复
 END REPEAT;
END








...]]></description><category></category></item><item><title><![CDATA[递归与尾递归]]></title><link>https://blog.youkuaiyun.com/duanmulirui/article/details/90262519</link><guid>https://blog.youkuaiyun.com/duanmulirui/article/details/90262519</guid><author>duanmulirui</author><pubDate>Thu, 16 May 2019 14:24:46 +0800</pubDate><description><![CDATA[什么是递归？

函数调用自身，称为递归。



什么是尾递归？

如果尾调用自身，就称为尾递归。



两者的区别

递归非常消耗内存，因为需要同时保存成千上百个调用记录，很容易发生“栈溢出”错误（stack overflow）。

但对于尾递归来说，由于只存在一个调用记录，所以永远不会发生”栈溢出“错误。



举例说明如下：阶乘函数n!

递归函数：


fun factorial(n:I...]]></description><category></category></item><item><title><![CDATA[面向对象的迪米特原则]]></title><link>https://blog.youkuaiyun.com/duanmulirui/article/details/84034358</link><guid>https://blog.youkuaiyun.com/duanmulirui/article/details/84034358</guid><author>duanmulirui</author><pubDate>Sat, 29 Dec 2018 13:47:44 +0800</pubDate><description><![CDATA[声明：本系列博客整理来源于《Android源码设计模式解析与实战》，仅作为个人学习总结记录，任何组织和个人不得转载进行商业活动！



赶在2018年最后的几天里，把之前拖延的后三个原则终于总结完成，还算圆满。这样就可以踏实地喜迎2019了。



迪米特原则（Law of Demeter，LOD）

LOD，也称为最少知识原则（Least Knowledge Principle）。虽然名字不...]]></description><category></category></item><item><title><![CDATA[面向对象的接口隔离原则]]></title><link>https://blog.youkuaiyun.com/duanmulirui/article/details/84034354</link><guid>https://blog.youkuaiyun.com/duanmulirui/article/details/84034354</guid><author>duanmulirui</author><pubDate>Fri, 28 Dec 2018 19:06:51 +0800</pubDate><description><![CDATA[声明：本系列博客整理来源于《Android源码设计模式解析与实战》，仅作为个人学习总结记录，任何组织和个人不得转载进行商业活动！





接口隔离原则（Interface Segregation Principle，ISP）

ISP的定义是：客户端不应该依赖它不需要的接口。另一种定义是：类间的依赖关系应该建立在最小的接口上。接口隔离原则将非常庞大、臃肿的接口拆分成更小的和更具体的接口，这样...]]></description><category></category></item><item><title><![CDATA[面向对象的依赖倒置原则]]></title><link>https://blog.youkuaiyun.com/duanmulirui/article/details/84034349</link><guid>https://blog.youkuaiyun.com/duanmulirui/article/details/84034349</guid><author>duanmulirui</author><pubDate>Fri, 28 Dec 2018 14:43:07 +0800</pubDate><description><![CDATA[声明：本系列博客整理来源于《Android源码设计模式解析与实战》，仅作为个人学习总结记录，任何组织和个人不得转载进行商业活动！



依赖倒置原则（Dependence Inversion Principle，DIP）

依赖倒置原则指代了一种特定的解耦形式，使得高层次的模块不依赖于低层次的模块的实现细节的目的，依赖模块被颠倒了。

依赖倒置原则有以下几个关键点：

（1）高层模块不应该依赖底...]]></description><category></category></item><item><title><![CDATA[面向对象的里氏替换原则]]></title><link>https://blog.youkuaiyun.com/duanmulirui/article/details/83339721</link><guid>https://blog.youkuaiyun.com/duanmulirui/article/details/83339721</guid><author>duanmulirui</author><pubDate>Wed, 28 Nov 2018 18:29:59 +0800</pubDate><description><![CDATA[声明：本系列博客整理来源于《Android源码设计模式解析与实战》，仅作为个人学习总结记录，任何组织和个人不得转载进行商业活动！





里氏替换原则（Lisvok Substitution Principle，LSP）

LSP的第一种定义是：如果对每一个类型为S的对象o1，都有类型为T的对象o2，使得以T定义的所有程序P在所有的对象o1都代换成o2时，程序P的行为没有发生变化，那么类型S...]]></description><category></category></item><item><title><![CDATA[Mac IDEA JeeSite4.0 环境搭建与部署运行]]></title><link>https://blog.youkuaiyun.com/duanmulirui/article/details/83588598</link><guid>https://blog.youkuaiyun.com/duanmulirui/article/details/83588598</guid><author>duanmulirui</author><pubDate>Thu, 01 Nov 2018 15:29:26 +0800</pubDate><description><![CDATA[最近在接触Java EE开发平台JeeSite 4.0，官网文档上是以windows系统的eclipse搭建的环境，故在此记录总结一下Mac系统下IDEA环境的JeeSite4.0的环境搭建与部署运行，避免大家进坑。

JeeSite4.0的官方文档：http://jeesite4.mydoc.io/

环境准备

1.Java JDK 1.8 

官网下载链接

 

2.IDEA 

官网下载...]]></description><category></category></item><item><title><![CDATA[面向对象的开闭原则]]></title><link>https://blog.youkuaiyun.com/duanmulirui/article/details/83188813</link><guid>https://blog.youkuaiyun.com/duanmulirui/article/details/83188813</guid><author>duanmulirui</author><pubDate>Wed, 24 Oct 2018 10:20:22 +0800</pubDate><description><![CDATA[声明：本系列博客整理来源于《Android源码设计模式解析与实战》，仅作为个人学习总结记录，任何组织和个人不得转载进行商业活动！



开闭原则（Open Close Principle，OCP）

开闭原则是Java世界里最基础的设计原则，它指导我们如何建立一个稳定的、灵活的系统。开闭原则的定义是：软件中的对象（类、模块、函数等）应该对于可扩展是开放的，而对修改是封闭的。在软件的生命周期内，因...]]></description><category></category></item><item><title><![CDATA[面向对象的单一职责原则]]></title><link>https://blog.youkuaiyun.com/duanmulirui/article/details/83109327</link><guid>https://blog.youkuaiyun.com/duanmulirui/article/details/83109327</guid><author>duanmulirui</author><pubDate>Fri, 19 Oct 2018 22:57:20 +0800</pubDate><description><![CDATA[声明：本系列博客整理来源于《Android源码设计模式解析与实战》，仅作为个人学习总结记录，任何组织和个人不得转载进行商业活动！



单一职责原则（Simple Responsibility Priciple，SRP）

SRP的定义是：就一个类而言，应该仅有一个引起它变化的原因。简单来说，一个类中应该是一组相关性很高的函数、数据的封装。就像秦小波老师在《设计模式之禅》中说的：“这是一个备受争...]]></description><category></category></item><item><title><![CDATA[面向对象的几个原则]]></title><link>https://blog.youkuaiyun.com/duanmulirui/article/details/83188943</link><guid>https://blog.youkuaiyun.com/duanmulirui/article/details/83188943</guid><author>duanmulirui</author><pubDate>Fri, 19 Oct 2018 22:35:01 +0800</pubDate><description><![CDATA[声明：本系列博客整理来源于《Android源码设计模式解析与实战》，仅作为个人学习总结记录，任何组织和个人不得转载进行商业活动！

已有一月有余没有来更新博客，今天来对近来学习的面向对象的六大原则做下总结与记录。在面向对象的开发中，我们应该遵循与掌握这六大原则，才能够更好的理解各种设计模式。

以下是分为六部分即六篇博客来分析梳理，点击链接可进行查阅。

六大原则

（1）单一职责原则&amp;gt;&amp;g...]]></description><category></category></item><item><title><![CDATA[TCP，UDP，HTTP，Socket]]></title><link>https://blog.youkuaiyun.com/duanmulirui/article/details/76341811</link><guid>https://blog.youkuaiyun.com/duanmulirui/article/details/76341811</guid><author>duanmulirui</author><pubDate>Wed, 29 Aug 2018 17:03:25 +0800</pubDate><description><![CDATA[TCP/IP：是一个协议族，其中包含应用层、传输层、网络层、数据链路层的各种协议。

其中，

在网络层有：IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。

在传输层有：TCP协议和UDP协议。

在应用层有：HTTP、FTP、TELNET、SMTP、DNS等协议。

 

所以说，HTTP本身就是一个协议，是从web服务器传输超文本到本地浏览器的传送协议。

而Socket是...]]></description><category></category></item><item><title><![CDATA[Android WebView由于重定向造成的goBack()无效的问题解决]]></title><link>https://blog.youkuaiyun.com/duanmulirui/article/details/81876863</link><guid>https://blog.youkuaiyun.com/duanmulirui/article/details/81876863</guid><author>duanmulirui</author><pubDate>Mon, 20 Aug 2018 20:19:18 +0800</pubDate><description><![CDATA[最近项目中WebView返回时需要一级一级返回，就使用到WebView.goBack()方法。可当加载重定向的URL，出现了不能正常退出WebView的问题。

问题描述

比如，加载此重定向URL：http://news.cctv.com/m/la/index.shtml?id=ARTIPelLhipU21KF1nsbxpA7180816

在设置WebView的setWebViewClient...]]></description><category></category></item><item><title><![CDATA[Selenium WebDriver基于Python -  使用unittest编写单元测试（二）]]></title><link>https://blog.youkuaiyun.com/duanmulirui/article/details/80844315</link><guid>https://blog.youkuaiyun.com/duanmulirui/article/details/80844315</guid><author>duanmulirui</author><pubDate>Fri, 06 Jul 2018 21:53:16 +0800</pubDate><description><![CDATA[Selenium WebDriver是一个浏览器自动化测试的API集合。它提供了很多与浏览器自动化交互的特性，并且这些API主要是用于测试Web程序。如果仅仅使用Selenium Driver，我们无法实现执行测试前置条件、测试后置条件，对比预期结果和实际结果，检查程序的状态，生成测试报告，创建数据驱动的测试等功能。在此，我们总结一下如何使用unittest来创建基于Python的Selenium...]]></description><category></category></item><item><title><![CDATA[使用Glide加载图片出现： java.lang.IllegalArgumentException: You cannot start a load for a destroyed activity]]></title><link>https://blog.youkuaiyun.com/duanmulirui/article/details/80945557</link><guid>https://blog.youkuaiyun.com/duanmulirui/article/details/80945557</guid><author>duanmulirui</author><pubDate>Fri, 06 Jul 2018 19:57:31 +0800</pubDate><description><![CDATA[最近项目中首页的banner使用的com.youth.banner使用Glide异步加载图片：public class GlideImageLoader extends ImageLoader {
    @Override
    public void displayImage(Context context, Object path, ImageView imageView) {
     ...]]></description><category></category></item><item><title><![CDATA[Git的简单用法及Android Studio使用Git将本地代码第一次提交远程仓库]]></title><link>https://blog.youkuaiyun.com/duanmulirui/article/details/80829202</link><guid>https://blog.youkuaiyun.com/duanmulirui/article/details/80829202</guid><author>duanmulirui</author><pubDate>Wed, 27 Jun 2018 15:53:15 +0800</pubDate><description><![CDATA[经常使用git来pull／push项目代码，故此来总结一下。

 

平时使用到的Git命令

1）首先，先从远程代码服务器上将代码clone下来：

git clone xxx(xxx代表代码地址)

 

以下均是在项目的路径下进行的操作！！

2）查看当前本地代码新增或修改状态：

git status

 

3)查看某一个文件在本地的所修改内容：

git diff xxx

 

4)...]]></description><category></category></item><item><title><![CDATA[Selenium WebDriver 基于Python（一）]]></title><link>https://blog.youkuaiyun.com/duanmulirui/article/details/80749360</link><guid>https://blog.youkuaiyun.com/duanmulirui/article/details/80749360</guid><author>duanmulirui</author><pubDate>Wed, 20 Jun 2018 19:02:49 +0800</pubDate><description><![CDATA[初始Selenium Web Driver

Selenium可以自动的操纵浏览器来做很多事情，它可以模拟我们与浏览器的交互，比如，访问网站，单击链接，填写表单，提交表单，浏览网页等，而且支持大多数主流的浏览器。如果要使用Selenium WebDriver，我们首先要选择一种语言来编写自动化脚本，而这个编程语言需要有Selenium client library支持。

我们使用支持Seleni...]]></description><category></category></item><item><title><![CDATA[Android APP的minSDKVersion小于第三方库的minSDKVersion会报错的解决方法]]></title><link>https://blog.youkuaiyun.com/duanmulirui/article/details/80391243</link><guid>https://blog.youkuaiyun.com/duanmulirui/article/details/80391243</guid><author>duanmulirui</author><pubDate>Mon, 21 May 2018 14:02:03 +0800</pubDate><description><![CDATA[在Android APP应用中使用第三方库时，发现引入的库报错，以引入com.youth.banner:banner:1.4.10为例：Error:Execution failed for task ':app:processDebugManifest'.
&amp;gt; Manifest merger failed : uses-sdk:minSdkVersion 9 cannot be smalle...]]></description><category></category></item><item><title><![CDATA[Android启动APP时Splash页会黑白闪屏现象的原因与优化方法]]></title><link>https://blog.youkuaiyun.com/duanmulirui/article/details/80363514</link><guid>https://blog.youkuaiyun.com/duanmulirui/article/details/80363514</guid><author>duanmulirui</author><pubDate>Fri, 18 May 2018 16:22:37 +0800</pubDate><description><![CDATA[目前APP的设计思路，都会有一个启动页，来进行一些数据的初始化等一些比较耗时的操作，这就会造成启动页短暂的黑白屏闪动(黑还是白取决于app的默认主题)。那为啥会出现这种现象，并且该怎么解决这一问题呢？问题出现的原因当系统启动一个APP时，zygote进程会首先创建一个新的进程去运行这个APP，但是进程的创建是需要时间的，在创建完成之前，界面是呈现假死状态的，这就很尴尬了，因为用户会以为没有点到AP...]]></description><category></category></item><item><title><![CDATA[数据传输加密 - - RSA，AES加密]]></title><link>https://blog.youkuaiyun.com/duanmulirui/article/details/80308951</link><guid>https://blog.youkuaiyun.com/duanmulirui/article/details/80308951</guid><author>duanmulirui</author><pubDate>Mon, 14 May 2018 15:24:18 +0800</pubDate><description><![CDATA[ 

数据传输加密

在开发应用过程中，客户端与服务端经常需要进行数据传输，涉及到重要隐私信息时，开发者自然会想到对其进行加密传输，即使传输过程中被“有心人”截取，也不会将信息泄漏。对于加密算法，相信不少开发者也有所耳闻，比如MD5加密、BASE64加密，DES加密，AES加密，RSA加密等等。因为最近项目中使用到RSA，AES两种非对称与对称的加密算法，下面做一个总结记录。

 

 

有关加...]]></description><category></category></item><item><title><![CDATA[Protobuf及在Android Studio中的配置]]></title><link>https://blog.youkuaiyun.com/duanmulirui/article/details/74529193</link><guid>https://blog.youkuaiyun.com/duanmulirui/article/details/74529193</guid><author>duanmulirui</author><pubDate>Thu, 06 Jul 2017 10:55:51 +0800</pubDate><description><![CDATA[最近有项目需要使用到Protobuf，之前没有接触过它，经过一天的时间认识了它，现在来总结一下。
ProtoBuf

      Protocol Buffers (a.k.a., protobuf) are Google's language-neutral, platform-neutral, extensible mechanism for serializing structured]]></description><category></category></item></channel></rss>