<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[liuade的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/liuade</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; liuade]]></copyright><item><title><![CDATA[h5 video标签播放任意路径下的视频文件]]></title><link>https://blog.youkuaiyun.com/liuade/article/details/82765688</link><guid>https://blog.youkuaiyun.com/liuade/article/details/82765688</guid><author>liuade</author><pubDate>Tue, 18 Sep 2018 23:18:29 +0800</pubDate><description><![CDATA[html中用video标签播放视频代码如下，

&amp;lt;video src=&quot;xxx.mp4&quot; controls=&quot;controls&quot;&amp;gt;&amp;lt;/video&amp;gt;

 

xxx.mp4需要放在项目里部署在container里，如果视频文件多或者需要动态上传，全扔在项目里不合适，需要可以读取任意路径下的视频文件供h5的video标签播放。

 

核心代码如下，简单说就是要在respons...]]></description><category></category></item><item><title><![CDATA[sql统计某商品最近12个月的销量，缺销售数据的月份自动补0]]></title><link>https://blog.youkuaiyun.com/liuade/article/details/82730450</link><guid>https://blog.youkuaiyun.com/liuade/article/details/82730450</guid><author>liuade</author><pubDate>Sun, 16 Sep 2018 22:25:36 +0800</pubDate><description><![CDATA[今天遇到这样一个问题，要统计某商品最近12个月的销量，输出到UI画个柱状图

sql长这样子：


select date_format(date, '%Y-%m') as month, sum(money) as totalmoney from sales where code='1200040' and date&amp;gt;date_add(last_day(date_sub(curdate(),...]]></description><category></category></item><item><title><![CDATA[分析企业微信和钉钉的角色/标签的设计]]></title><link>https://blog.youkuaiyun.com/liuade/article/details/82696040</link><guid>https://blog.youkuaiyun.com/liuade/article/details/82696040</guid><author>liuade</author><pubDate>Thu, 13 Sep 2018 22:34:05 +0800</pubDate><description><![CDATA[我们做药店行业的CRM软件，最近用到角色管理，需要用到企业微信和钉钉的角色/权限接口，站在码农角度思考了一下他们各自的设计

企业微信中叫标签，钉钉里叫角色。从名字就能看出来他们定位不太一样。标签更随意一些，可以是职位也可以是人的特点，比如“产品经理”，“爱吃水果”角色一般和权限有关，指职位或职责

钉钉里角色和后台管理权限是在一块的，感觉有两个问题：
钉钉的角色一般在各种流程审批中用到，但后台管...]]></description><category></category></item><item><title><![CDATA[MySQL一条语句算出中位数]]></title><link>https://blog.youkuaiyun.com/liuade/article/details/82668681</link><guid>https://blog.youkuaiyun.com/liuade/article/details/82668681</guid><author>liuade</author><pubDate>Wed, 12 Sep 2018 22:00:29 +0800</pubDate><description><![CDATA[起因：数据库里有商品在不同地区，不同时间段，不同渠道的销售价格，想取个平均值。但因为数据是各个网点统计上来的，有个别错列了，导致有的价格失真（像一盒糖卖几万块，但实际是错列了，几万是商品编号）。因为数据量太大，没法一一修正，想到用中位数来代替，但mysql没有现成的中位数函数，琢磨半天想到的，记录出来分享一下。

这个方法也可以用来算四分位数等

 

复习一下什么是中位数：

一串数字，按从小到...]]></description><category></category></item><item><title><![CDATA[企业微信第三方服务商和钉钉ISV开发对比]]></title><link>https://blog.youkuaiyun.com/liuade/article/details/74083718</link><guid>https://blog.youkuaiyun.com/liuade/article/details/74083718</guid><author>liuade</author><pubDate>Sat, 01 Jul 2017 23:15:49 +0800</pubDate><description><![CDATA[企业微信第三方服务商和钉钉ISV开发对比项目本来是基于企业微信开发（之前叫微信企业号，现在统一叫企业微信），做为第三方服务提供方。最近需要支持钉钉，也体验了一把钉钉ISV（独立服务开发商）开发，对比一下两者的相同点和差异相同点
接口，授权方式，回调模式几乎一样 
两者基本的接口非常像，甚至可以用同一套抽象接口，两个实现来完成。
安全机制也很像 
都是每隔一段时间会下发ticket，用ticket和企]]></description><category></category></item><item><title><![CDATA[SaaS系统的接口对资源访问范围进行限制]]></title><link>https://blog.youkuaiyun.com/liuade/article/details/73928895</link><guid>https://blog.youkuaiyun.com/liuade/article/details/73928895</guid><author>liuade</author><pubDate>Thu, 29 Jun 2017 23:40:18 +0800</pubDate><description><![CDATA[SaaS系统中，不同用户的资源应该是互相不可见的，但我们系统中，已登录的用户A，如果篡改掉接口调用的参数，是可以访问到其它用户的资源的。其实早就意识到这个问题了，前段时间才抽空把这个洞给补上，现在把方法记下来，供更多的同学们参考。]]></description><category></category></item><item><title><![CDATA[oracle 的数据类型]]></title><link>https://blog.youkuaiyun.com/liuade/article/details/5445511</link><guid>https://blog.youkuaiyun.com/liuade/article/details/5445511</guid><author>liuade</author><pubDate>Fri, 02 Apr 2010 16:57:00 +0800</pubDate><description><![CDATA[Char用于描述定长的字符型数据，长度varchar2用于描述变长的字符型数据，长度nchar用来存储Unicode字符集的定长字符型数据，长度nvarchar2用来存储Unicode字符集的变长字符型数据，长度number用来存储整型或者浮点型数值Date用来存储日期数据Long用来存]]></description><category></category></item><item><title><![CDATA[JVM 内存]]></title><link>https://blog.youkuaiyun.com/liuade/article/details/5323300</link><guid>https://blog.youkuaiyun.com/liuade/article/details/5323300</guid><author>liuade</author><pubDate>Wed, 24 Feb 2010 17:04:00 +0800</pubDate><description><![CDATA[转自狂放不羁的博客： 一 JVM内存模型 1.1 Java栈 Java栈是与每一个线程关联的，JVM在创建每一个线程的时候，会分配一定的栈空间给线程。它主要用来存储线程执行过程中的局部变量，方法的返回值，以及方法调用上下文。栈空间随着线程的终止而释放。StackOverflowError：如果在线程执行的过程中，栈空间不够用，那么JV]]></description><category></category></item><item><title><![CDATA[关于外汇储备]]></title><link>https://blog.youkuaiyun.com/liuade/article/details/5319684</link><guid>https://blog.youkuaiyun.com/liuade/article/details/5319684</guid><author>liuade</author><pubDate>Tue, 23 Feb 2010 14:56:00 +0800</pubDate><description><![CDATA[一个岛上住着三个人，王二，张三和李四。王二干得多吃的少，每年下来都有余粮。张三是自给自足式的，一年到头正好吃光花光，不多也不少。李四有点好吃懒做，每年自己的粮食都不够吃，得找王二借才行。几年下来，王二手上全是李四打下的借条（俗称，外汇储备）。不过得记住，粮食这东西有个特点，没法放，不吃就烂了。所以，王二也有自己的问题，不借给李四多生产出的粮食也是烂掉，谁让王二自己吃不掉呢（俗称，内需不足）]]></description><category></category></item><item><title><![CDATA[一些有用的oracle sql语句]]></title><link>https://blog.youkuaiyun.com/liuade/article/details/5255318</link><guid>https://blog.youkuaiyun.com/liuade/article/details/5255318</guid><author>liuade</author><pubDate>Mon, 25 Jan 2010 20:18:00 +0800</pubDate><description><![CDATA[sql 查表空间语句: SELECT UPPER(F.TABLESPACE_NAME) "表空间名",       D.TOT_GROOTTE_MB "表空间大小(M)",       D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",       TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_]]></description><category></category></item><item><title><![CDATA[excel 表格实用技巧大全]]></title><link>https://blog.youkuaiyun.com/liuade/article/details/4822156</link><guid>https://blog.youkuaiyun.com/liuade/article/details/4822156</guid><author>liuade</author><pubDate>Tue, 17 Nov 2009 15:24:00 +0800</pubDate><description><![CDATA[ 一、让数据显示不同颜色 　　在学生成绩分析表中，如果想让总分大于等于500分的分数以蓝色显示，小于500分的分数以红色显示。操作的步骤如下：首先，选中总分所在列，执行“格式→条件格式”，在弹出的“条件格式”对话框中，将第一个框中设为“单元格数值”、第二个框中设为“大于或等于”，然后在第三个框中输入500，单击[格式]按钮，在“单元格格式”对话框中，将“字体”的颜色设置为蓝色，然后再单击[添加]]></description><category></category></item><item><title><![CDATA[servlet/jsp原来这样子呀！]]></title><link>https://blog.youkuaiyun.com/liuade/article/details/4748784</link><guid>https://blog.youkuaiyun.com/liuade/article/details/4748784</guid><author>liuade</author><pubDate>Fri, 30 Oct 2009 16:40:00 +0800</pubDate><description><![CDATA[浏览了一本说servlet/jsp的书，终于大概弄明白jsp是什么意思了。 就像把java编译成供jvm执行的二进制class一样， jsp = javaservlet = 二进制classjsp最终会被翻译成servlet. 而jsp技术里的EL, JSTL就好像一些java代码自动生成器。]]></description><category></category></item><item><title><![CDATA[xsd type 继承表]]></title><link>https://blog.youkuaiyun.com/liuade/article/details/4712266</link><guid>https://blog.youkuaiyun.com/liuade/article/details/4712266</guid><author>liuade</author><pubDate>Thu, 22 Oct 2009 10:57:00 +0800</pubDate><description><![CDATA[xsd type 继承表]]></description><category></category></item><item><title><![CDATA[策略模式 [转载]]]></title><link>https://blog.youkuaiyun.com/liuade/article/details/4708117</link><guid>https://blog.youkuaiyun.com/liuade/article/details/4708117</guid><author>liuade</author><pubDate>Wed, 21 Oct 2009 13:18:00 +0800</pubDate><description><![CDATA[当我们掌握了Java的语法，当我们了解了面向对象的封装、继承、多态等特性，当我们可以用Swing、Servlet、JSP技术构建桌面以及Web应用，不意味着我们可以写出面向对象的程序，不意味着我们可以很好的实现代码复用，弹性维护，不意味着我们可以实现在维护、扩展基础上的代码复用。一把刀，可以使你制敌于无形而于江湖扬名，也可以只是一把利刃而使你切菜平静。Java，就是这把刀，它的威力取决于你使用的方]]></description><category></category></item><item><title><![CDATA[adapter模式理解]]></title><link>https://blog.youkuaiyun.com/liuade/article/details/4650748</link><guid>https://blog.youkuaiyun.com/liuade/article/details/4650748</guid><author>liuade</author><pubDate>Sat, 10 Oct 2009 15:55:00 +0800</pubDate><description><![CDATA[adapter用于接口转化，有class adapter和object adapter,object adapter就是挂羊头卖狗肉class adapter就是挂山羊头，卖野山羊肉 ]]></description><category></category></item><item><title><![CDATA[wait()和notify()]]></title><link>https://blog.youkuaiyun.com/liuade/article/details/4646886</link><guid>https://blog.youkuaiyun.com/liuade/article/details/4646886</guid><author>liuade</author><pubDate>Fri, 09 Oct 2009 17:50:00 +0800</pubDate><description><![CDATA[wait()是释放锁，然后挂起当前线程。notify()是通知挂起线程重新执行 wait()和notify()都应该是在synchronized代码块中使用  (个人理解，不一定下确) 测试代码：package com.hyliu;import java.util.Date;public class SimpleTest {    public stat]]></description><category></category></item><item><title><![CDATA[jms pub/sub代码(jms provider: oracle AQ via oc4j )]]></title><link>https://blog.youkuaiyun.com/liuade/article/details/4646803</link><guid>https://blog.youkuaiyun.com/liuade/article/details/4646803</guid><author>liuade</author><pubDate>Fri, 09 Oct 2009 17:34:00 +0800</pubDate><description><![CDATA[publishHashtable env = new Hashtable();        env.put(Context.INITIAL_CONTEXT_FACTORY, "com.evermind.server.rmi.RMIInitialContextFactory");        env.put(Context.PROVIDER_URL, "ormi://localhos]]></description><category></category></item><item><title><![CDATA[java script 的日期控件]]></title><link>https://blog.youkuaiyun.com/liuade/article/details/4646721</link><guid>https://blog.youkuaiyun.com/liuade/article/details/4646721</guid><author>liuade</author><pubDate>Fri, 09 Oct 2009 17:23:00 +0800</pubDate><description><![CDATA[calendar.js***********************document.write("");document.write("");function writeIframe(){     var strIframe = "<!--"+     "*{font-size: 12px; font-family: 宋体}"+     ".bg{   color]]></description><category></category></item></channel></rss>