<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[johnLee的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/kslinabc</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; kslinabc]]></copyright><item><title><![CDATA[简易node ts代码给json进行sort或者diff]]></title><link>https://blog.youkuaiyun.com/kslinabc/article/details/127971689</link><guid>https://blog.youkuaiyun.com/kslinabc/article/details/127971689</guid><author>kslinabc</author><pubDate>Mon, 21 Nov 2022 21:15:13 +0800</pubDate><description><![CDATA[代码实现json的属性节点排序，两个json的diff报告]]></description><category></category></item><item><title><![CDATA[拓扑排序的kotlin和typescript简易实现]]></title><link>https://blog.youkuaiyun.com/kslinabc/article/details/126612066</link><guid>https://blog.youkuaiyun.com/kslinabc/article/details/126612066</guid><author>kslinabc</author><pubDate>Tue, 30 Aug 2022 20:36:21 +0800</pubDate><description><![CDATA[简易算法]]></description><category></category></item><item><title><![CDATA[一枚端同学的自白（纲领篇）]]></title><link>https://blog.youkuaiyun.com/kslinabc/article/details/104206616</link><guid>https://blog.youkuaiyun.com/kslinabc/article/details/104206616</guid><author>kslinabc</author><pubDate>Wed, 12 Feb 2020 11:07:50 +0800</pubDate><description><![CDATA[动机
“make it work, make it right, make it fast”。
此篇文章题目叫自白，这样可以不限于某个话题，写的比较松散些，但是可以肯定的是，通篇关乎right！  不仅如此，鉴于自己的工作背景，此文仅对面向对象浓墨重彩。
首先上面这句名言来自Kent Beck，主要说的是开发的三个顺序阶段。但我这里举个一个不太严谨的对比：
如果说work代表着产品的基本效用，核心......]]></description><category></category></item><item><title><![CDATA[IOC控制反转的粗浅理解]]></title><link>https://blog.youkuaiyun.com/kslinabc/article/details/88711056</link><guid>https://blog.youkuaiyun.com/kslinabc/article/details/88711056</guid><author>kslinabc</author><pubDate>Thu, 21 Mar 2019 11:45:25 +0800</pubDate><description><![CDATA[有个类C通过属性依赖了A, 要提供A的接口做些事， 传统做法是在C里做A a = new B(); （假设B是A的细化实现），一般来说可以认为C所在模块和B所在模块并不在一处，A可能在C模块或者更底层的模块。
这里有两件事，一个是new的动作由C来控制，另一个是A的具体哪个实现类（这里是B）由C来控制。
反转以后，
Spring控制了第一个，到底是每次创建一个新的A的实例，还是从缓存池中获取A的实...]]></description><category></category></item><item><title><![CDATA[度量UI性能耗时的标准制定调研]]></title><link>https://blog.youkuaiyun.com/kslinabc/article/details/84647049</link><guid>https://blog.youkuaiyun.com/kslinabc/article/details/84647049</guid><author>kslinabc</author><pubDate>Fri, 30 Nov 2018 12:29:08 +0800</pubDate><description><![CDATA[假设LinearLayout里有个RecyclerView，以下描述都是微秒计，1000微妙(us)=1毫秒:
A. 当RecyclerView的layout_width和layout_height都设置为300dp时，LinearLayout的onMeasure耗时是700us。
B. 当RecyclerView的layout_width=match_parent，而layout_height=...]]></description><category></category></item><item><title><![CDATA[额外的知识收获]]></title><link>https://blog.youkuaiyun.com/kslinabc/article/details/81480611</link><guid>https://blog.youkuaiyun.com/kslinabc/article/details/81480611</guid><author>kslinabc</author><pubDate>Tue, 07 Aug 2018 14:28:13 +0800</pubDate><description><![CDATA[A 


以前这样写： 
final HashMap map = new HashMap(); // 性能OK 
现在这样写： 
Map map = new HashMap(); // 性能也OK (不说阅读性好坏）

B 


J2EE的世界里，鼓励getter-setter，使的这些成了样板化的代码。其实对于退化类（也叫数据类，里面一般是不可变的字段，且类基本没有方法，作为c的struct代替...]]></description><category></category></item><item><title><![CDATA[不要在构造方法中调用可覆写的方法]]></title><link>https://blog.youkuaiyun.com/kslinabc/article/details/81153589</link><guid>https://blog.youkuaiyun.com/kslinabc/article/details/81153589</guid><author>kslinabc</author><pubDate>Sun, 22 Jul 2018 13:45:26 +0800</pubDate><description><![CDATA[如题，这句话来自于《Java解惑》（《Effective java》同一作者）。

在步入正题前我们先来看看kotlin的两个特性： 
- kotlin没有引入受检查的异常，设计这个特性一般认为是思考了Bruce Eckel的《Java是否需要受检的异常？》，以及Anders Hejlsberg的观点。 
- kotlin创建的类默认不可继承，设计这个特性一般认为是思考了《Effective ja...]]></description><category></category></item><item><title><![CDATA[随笔]]></title><link>https://blog.youkuaiyun.com/kslinabc/article/details/65629570</link><guid>https://blog.youkuaiyun.com/kslinabc/article/details/65629570</guid><author>kslinabc</author><pubDate>Fri, 24 Mar 2017 13:03:40 +0800</pubDate><description><![CDATA[最近在看浪潮之巅, 印象比较深的IT这个行业事迹总结:
微软的Windows视窗系统不是自己开发的, 是copy苹果的, 苹果好像也不是原创, 是copy施乐的;  
要在某个业务领域有所积累, 这样你手里有一堆可用的半成品可组装去卖, 没有就买一个系统改改来卖, 别从头开发一个陌生领域的东西, DOS是买来改的, Android是买来改的, 淘宝是买来改的;    
产品好坏不是最重要的. 不论是]]></description><category></category></item><item><title><![CDATA[visitor-acceptor访问者设计模式笔记]]></title><link>https://blog.youkuaiyun.com/kslinabc/article/details/53842163</link><guid>https://blog.youkuaiyun.com/kslinabc/article/details/53842163</guid><author>kslinabc</author><pubDate>Fri, 23 Dec 2016 17:36:06 +0800</pubDate><description><![CDATA[这种模式产生的原因是主要解决：稳定的数据结构和易变的操作耦合问题。在Java中, 一个鲜明的例子: 大家都知道, Collection好象是个黑色大染缸, 本来有各种鲜明类型特征的对象一旦放入后, 再取出时, 这些类型信息就消失了(仅仅知道父类型而无法确定具体的子类型). 那么我们势必要用If-Else或Switch这种提交结合instanceof来判断.]]></description><category></category></item><item><title><![CDATA[两个有序单链表合并成一个有序单链表的java实现]]></title><link>https://blog.youkuaiyun.com/kslinabc/article/details/52876397</link><guid>https://blog.youkuaiyun.com/kslinabc/article/details/52876397</guid><author>kslinabc</author><pubDate>Thu, 20 Oct 2016 20:01:30 +0800</pubDate><description><![CDATA[两个有序单链表合并成一个有序单链表的java实现 -- 仅作为备注, 便于自己回顾.]]></description><category></category></item><item><title><![CDATA[Android Service中那些未曾关注的回调和细节]]></title><link>https://blog.youkuaiyun.com/kslinabc/article/details/52672163</link><guid>https://blog.youkuaiyun.com/kslinabc/article/details/52672163</guid><author>kslinabc</author><pubDate>Mon, 26 Sep 2016 17:29:10 +0800</pubDate><description><![CDATA[Android开发中, 假设我们的app有且仅有个Service组件, 那么有几个回调和细节是我这两天才关注到的(我目前的战斗力是不是太弱了?), 这里分两种情况备注下: (前台服务指调用了startForeground的服务)A. AndroidManifest.xml中, Service声明了stopWithTask=”false”或者未声明此属性: 
1. 当通过home虚拟键回到桌面时, 当]]></description><category></category></item><item><title><![CDATA[跟进View的常见周期回调以及View.post和Activity.runOnUiThread]]></title><link>https://blog.youkuaiyun.com/kslinabc/article/details/52369173</link><guid>https://blog.youkuaiyun.com/kslinabc/article/details/52369173</guid><author>kslinabc</author><pubDate>Tue, 30 Aug 2016 14:46:18 +0800</pubDate><description><![CDATA[跟进View的常见周期回调以及分析其宽高赋值的回调;
跟进View.post和Activity.runOnUiThread的区别;]]></description><category></category></item><item><title><![CDATA[简单的gson对boolean转换的test(作为备注)]]></title><link>https://blog.youkuaiyun.com/kslinabc/article/details/52253770</link><guid>https://blog.youkuaiyun.com/kslinabc/article/details/52253770</guid><author>kslinabc</author><pubDate>Fri, 19 Aug 2016 19:42:38 +0800</pubDate><description><![CDATA[GsonBooleanTest.javapackage com.test;import java.io.IOException;import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonSyntaxException;
import com.google.gson.TypeA]]></description><category></category></item><item><title><![CDATA[监控自己APP的http/https网络请求的地址和请求耗时]]></title><link>https://blog.youkuaiyun.com/kslinabc/article/details/51776035</link><guid>https://blog.youkuaiyun.com/kslinabc/article/details/51776035</guid><author>kslinabc</author><pubDate>Tue, 28 Jun 2016 14:57:29 +0800</pubDate><description><![CDATA[关于监控http/https网络请求的思路, 目前想到两种实现思路:第一种实现思路是hook http请求的根接口, 第二种实现思路是aop/动态代理.]]></description><category></category></item><item><title><![CDATA[android查询几十万条数据的调研(一)]]></title><link>https://blog.youkuaiyun.com/kslinabc/article/details/51425913</link><guid>https://blog.youkuaiyun.com/kslinabc/article/details/51425913</guid><author>kslinabc</author><pubDate>Mon, 16 May 2016 16:10:19 +0800</pubDate><description><![CDATA[此次调研分两步走吧, 先从测试的角度看(一), 再从源码的角度看(二)(待续).]]></description><category></category></item><item><title><![CDATA[ZipFile v.s. ZipInputStream in java.util.zip]]></title><link>https://blog.youkuaiyun.com/kslinabc/article/details/51340468</link><guid>https://blog.youkuaiyun.com/kslinabc/article/details/51340468</guid><author>kslinabc</author><pubDate>Sat, 07 May 2016 22:28:13 +0800</pubDate><description><![CDATA[ZipInputStream读出ZIP文件序列（简单地说就是读出这个ZIP文件压缩了多少文件），而类ZipFile使用内嵌的随机文件访问机制读出其中的文件内容，所以不必顺序的读出ZIP压缩文件序列。]]></description><category></category></item><item><title><![CDATA[提高android gradle构建速度的努力]]></title><link>https://blog.youkuaiyun.com/kslinabc/article/details/51166364</link><guid>https://blog.youkuaiyun.com/kslinabc/article/details/51166364</guid><author>kslinabc</author><pubDate>Sat, 16 Apr 2016 09:51:40 +0800</pubDate><description><![CDATA[添加以下代码到build.gradle能提高构建速度]]></description><category></category></item><item><title><![CDATA[新奇的@SafeVarargs注解]]></title><link>https://blog.youkuaiyun.com/kslinabc/article/details/51166291</link><guid>https://blog.youkuaiyun.com/kslinabc/article/details/51166291</guid><author>kslinabc</author><pubDate>Sat, 16 Apr 2016 09:37:20 +0800</pubDate><description><![CDATA[从java6到java7, 在java.lang这样一个核心package中, 增加且仅增加了一个新注解@SafeVarargs]]></description><category></category></item><item><title><![CDATA[在android中通过java层程序调用命令行的一些备注]]></title><link>https://blog.youkuaiyun.com/kslinabc/article/details/51073947</link><guid>https://blog.youkuaiyun.com/kslinabc/article/details/51073947</guid><author>kslinabc</author><pubDate>Wed, 06 Apr 2016 13:05:55 +0800</pubDate><description><![CDATA[能调用哪些命令?一般性的, 最常用的命令都能调用, 比如cat, cp, top, ls, ps命令, 但用法和linux上的有较大区别, 可通过–help/-h查询具体的命令用法; 
我熟知linux terminal命令行, 但如何知道android都有哪些常用命令呢? 
首先, 需要知道默认android使用toolbox提供扩展命令, 里面内置的命令少的可怜, 不同api版本也不同, 具体有]]></description><category></category></item><item><title><![CDATA[android独有的省内存的轻量级容器类]]></title><link>https://blog.youkuaiyun.com/kslinabc/article/details/50834710</link><guid>https://blog.youkuaiyun.com/kslinabc/article/details/50834710</guid><author>kslinabc</author><pubDate>Wed, 09 Mar 2016 13:43:07 +0800</pubDate><description><![CDATA[在android中, 如果可能, 请优先考虑SparseArray族(稀疏数组)代替HashMap: 
   SparseArray          HashMap<Integer, Object> 
   SparseBooleanArray   HashMap<Integer, Boolean> 
   SparseIntArray       HashMap<Integer, Integer]]></description><category></category></item></channel></rss>