<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[不一样的博客]]></title><description><![CDATA[Android/iOS 开发工程师]]></description><link>https://blog.csdn.net/xiaoming100001</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; xiaoming100001]]></copyright><item><title><![CDATA[SQL 最佳实践（基础篇）]]></title><link>https://blog.csdn.net/xiaoming100001/article/details/107558881</link><guid>https://blog.csdn.net/xiaoming100001/article/details/107558881</guid><author>xiaoming100001</author><pubDate>Sat, 25 Jul 2020 12:06:35 +0800</pubDate><description><![CDATA[0x00 前言
作为一名客户端开发工程师，虽然对 SQL 能力的要求不会像数据分析师或者后端那么严格，但基础的能力还是要会的，比如开发过程中，上报了数据入库，要分析的时候要会查出来，或者制定一些数据报表展示等等。例外，如果有指标建设，那就更需要比较强的 SQL 实践基础了。
0x01 CRUD
SQL 其实用起来是比较简单的，实际使用中无非就是增删改查(Create, Retrieve, Update, Delete)，下面简单介绍下 CRUD 基本使用姿势，其中只会讲到实际中高频用到的情况。
0x02 环]]></description><category></category></item><item><title><![CDATA[JS 解析 key-value 最佳实践]]></title><link>https://blog.csdn.net/xiaoming100001/article/details/107558665</link><guid>https://blog.csdn.net/xiaoming100001/article/details/107558665</guid><author>xiaoming100001</author><pubDate>Fri, 24 Jul 2020 12:56:20 +0800</pubDate><description><![CDATA[一般请求接口返回的数据大部分是 json 格式，JS 解析某个字段数据，相信大家都会遇到取某个字段可能会是 undefined 或者 null 类型，如果代码忘记处理 bad case 就会挂了
下面代码是封装了对字典的解析，感觉挺好用的，基本原理就是循环遍历 keys，找到对应的 key 后，返回对应的 value，也比较简单
mapUtils.dig = (map, keys) =&gt; {
  if (_.isNull(map)) {
    return map
  }
  let digMap ]]></description><category></category></item><item><title><![CDATA[卡顿和卡死监控]]></title><link>https://blog.csdn.net/xiaoming100001/article/details/107501757</link><guid>https://blog.csdn.net/xiaoming100001/article/details/107501757</guid><author>xiaoming100001</author><pubDate>Wed, 22 Jul 2020 10:34:09 +0800</pubDate><description><![CDATA[卡顿原因
主要是主线程阻塞。在开发过程中，遇到的造成主线程阻塞的原因可能是：

主线程在进行大量I/O操作：为了方便代码编写，直接在主线程去写入大量数据
主线程在进行大量计算：代码编写不合理，主线程进行复杂计算
大量UI绘制：界面过于复杂，UI绘制需要大量时间
主线程在等锁：主线程需要获得锁A，但是当前某个子线程持有这个锁A，导致主线程不得不等待子线程完成任务。
…

业界调研
微信团队（Matrix）
卡顿检测流程图

主线程卡顿表现

FPS降低
CPU占用率非常高
主线程RunLoop执行时间过长

]]></description><category></category></item><item><title><![CDATA[关联对象源码分析]]></title><link>https://blog.csdn.net/xiaoming100001/article/details/107501631</link><guid>https://blog.csdn.net/xiaoming100001/article/details/107501631</guid><author>xiaoming100001</author><pubDate>Tue, 21 Jul 2020 23:30:42 +0800</pubDate><description><![CDATA[什么是关联对象？
一个对象可以关联多个对象，可以扩展原有对象的能力，关联是拥有的关系。
Case1: Category可以使用@property添加一个属性吗？
@interface NSString (MyNSString)
@property (nonatomic, copy) NSString *name;
@end


警告是name的存取方法需要手动实现，或者通过@dynamic在运行时实现存取方法。
//强制使用
NSString *test = @"test";
test.name = @"n]]></description><category></category></item><item><title><![CDATA[判断一个NSDictionary是否包含NSDictionary简单写法]]></title><link>https://blog.csdn.net/xiaoming100001/article/details/106594419</link><guid>https://blog.csdn.net/xiaoming100001/article/details/106594419</guid><author>xiaoming100001</author><pubDate>Sat, 06 Jun 2020 22:17:35 +0800</pubDate><description><![CDATA[思路：需要考虑到字典嵌套字典情况，简单的递归查找就可以实现了，如果有其他更简单的方法欢迎留言讨论～
#pragma mark - 

/// 数据转化
/// @param data 源object
+ (NSDictionary *)handleWithData:(NSDictionary *)data {
    if (![data isKindOfClass:[NSDictionary class]]) {
        return nil;
    }
    NSMutableDiction]]></description><category></category></item><item><title><![CDATA[HTTP和HTTPS协议，看一篇就够了]]></title><link>https://blog.csdn.net/xiaoming100001/article/details/81109617</link><guid>https://blog.csdn.net/xiaoming100001/article/details/81109617</guid><author>xiaoming100001</author><pubDate>Sat, 03 Aug 2019 11:22:16 +0800</pubDate><description><![CDATA[一、前言：

我们上网很简单，只需要通过网络服务商开通端口就可以了，每天都在上网，有留意到访问网站链接有什么共同点吗？为什么需要但是为什么要讲HTTP和HTTPS呢？

二、HTTP和HTTPS发展历史

 
当我们打开谷歌浏览器输入www.12306.cn,回车很快在浏览器上就看到页面，其中的浏览器就是客户端，负责接受浏览器的是服务器，两者的通信是通过HTTP协议。

什么是HTTP?


  ...]]></description><category></category></item><item><title><![CDATA[面试必备-操作系统]]></title><link>https://blog.csdn.net/xiaoming100001/article/details/94960922</link><guid>https://blog.csdn.net/xiaoming100001/article/details/94960922</guid><author>xiaoming100001</author><pubDate>Sat, 03 Aug 2019 11:15:34 +0800</pubDate><description><![CDATA[前言
操作系统理论性非常强，刚开始学起来非常粗糙。然而，面试过程中经常会被问到计算机网络或者操作系统，有兴趣的同学可以看我这篇有关于计算机网络的文章（https://blog.csdn.net/xiaoming100001/article/details/81109617 ），相信会有所收获。本篇文章主要讲述面试可能遇到的重点内容，金九银十，希望可以帮到大家，下面主要按照如下思路展开：

概述
定...]]></description><category></category></item><item><title><![CDATA[手把手教学IOS自定义cell-仿微信消息列表]]></title><link>https://blog.csdn.net/xiaoming100001/article/details/95792266</link><guid>https://blog.csdn.net/xiaoming100001/article/details/95792266</guid><author>xiaoming100001</author><pubDate>Sat, 13 Jul 2019 23:01:56 +0800</pubDate><description><![CDATA[效果图
自定义View是一件非常有成就感的实践，如果有Android基础的同学接触起来应该会比较顺手，基本思路都差不多。项目采用原生的布局方式，实现仿微信消息列表效果，主要是学习自定义Cell，展示头像、标题、消息概要、时间和未读数View。下图左边是样例，右边是实现的效果图。
项目结构
项目采用MVC模式，Model处理数据，View提供自定义的Cell和Cell的位置大小，ViewContro...]]></description><category></category></item><item><title><![CDATA[Java抽象类和接口的区别]]></title><link>https://blog.csdn.net/xiaoming100001/article/details/79827540</link><guid>https://blog.csdn.net/xiaoming100001/article/details/79827540</guid><author>xiaoming100001</author><pubDate>Sat, 13 Jul 2019 22:17:59 +0800</pubDate><description><![CDATA[Java抽象类和接口可以说是面试求职的热点问题，几乎每场面试都会聊到这个问题。 
一、抽象类 
理解抽象类之前，我们先温习下抽象方法。抽象方法是一种特殊的方法：它只有声明，而没有具体的实现。抽象方法的声明格式为：

abstract void fun();

我觉得含有抽象方法的类定义为抽象类比较合适，当然你可以说抽象类可以没有方法来推翻我的定义，不过这个类都没有方法了，那么还有什么意义呢？

抽...]]></description><category></category></item><item><title><![CDATA[Objective-C 入门篇]]></title><link>https://blog.csdn.net/xiaoming100001/article/details/94337406</link><guid>https://blog.csdn.net/xiaoming100001/article/details/94337406</guid><author>xiaoming100001</author><pubDate>Sun, 07 Jul 2019 00:53:50 +0800</pubDate><description><![CDATA[前言
Objective-C（下面简称OC）是由C语言扩展出来的，其火星文写法对于之前从事Java开发的同学颇感蛋疼。本文侧重介绍常用的语法，通过对比Java并结合本人入门的过程和经验，帮助有需求的同学快速掌握OC基本编程，为IOS的入门奠定语言基础。首先是写第一行代码，恭喜正式进入OC学习阶段。
int main(int argc, char *argv[])
{
    @autoreleas...]]></description><category></category></item><item><title><![CDATA[Android中startActivityForResult遇到的坑]]></title><link>https://blog.csdn.net/xiaoming100001/article/details/81637235</link><guid>https://blog.csdn.net/xiaoming100001/article/details/81637235</guid><author>xiaoming100001</author><pubDate>Mon, 13 Aug 2018 21:15:01 +0800</pubDate><description><![CDATA[今天下午5点收到一个紧急bug，项目某个页面需要选择国家信息然后返回在原来的页面，bug描述：用户填好当前页面的信息，跳转其他页面选择国家信息的时候再返回来，这回所有的用户填写的信息都被重置了？？？

一看就感觉不对劲，排除了半个小时，发现当前页面调用startActivityForResult跳转到国家选择页面，当前的activity会调用onDestroy()方法，选择国家页面回到用户填写信息...]]></description><category></category></item><item><title><![CDATA[图片模糊算法]]></title><link>https://blog.csdn.net/xiaoming100001/article/details/81355400</link><guid>https://blog.csdn.net/xiaoming100001/article/details/81355400</guid><author>xiaoming100001</author><pubDate>Thu, 02 Aug 2018 12:32:20 +0800</pubDate><description><![CDATA[有很多App对背景进行高斯图模糊设计，比如网易云音乐、QQ、微信、随手记等等。在Adnroid中，现在常用的图片高斯模糊技术有三种：RenderScript 、fastBlur、对RenderScript和fastBlur的优化，下面分析这三种方法的优缺点。

RenderScript

RenderScript是在Android上的高性能运行密集型运算的框架，主要用于数据并行计算，尤其对图像处理...]]></description><category></category></item><item><title><![CDATA[Java语言-手写死锁代码]]></title><link>https://blog.csdn.net/xiaoming100001/article/details/81354970</link><guid>https://blog.csdn.net/xiaoming100001/article/details/81354970</guid><author>xiaoming100001</author><pubDate>Thu, 02 Aug 2018 11:00:40 +0800</pubDate><description><![CDATA[public class BuyTicket{
private Object a = new Object();
    private Object b = new Object();

    public void funA(){
        synchronized (a){
            try {
                Thread.sleep(10);
   ...]]></description><category></category></item><item><title><![CDATA[稳了，手写生产者消费者模式代码]]></title><link>https://blog.csdn.net/xiaoming100001/article/details/81136010</link><guid>https://blog.csdn.net/xiaoming100001/article/details/81136010</guid><author>xiaoming100001</author><pubDate>Fri, 20 Jul 2018 17:37:47 +0800</pubDate><description><![CDATA[代码语言：kotlin、Java

import java.util.concurrent.locks.ReentrantLock

/**
 * kotlin
 * 测试主类
 */
fun main(args : Array&amp;lt;String&amp;gt;){
    val mLock = ReentrantLock()
    val mCondition = mLock.newConditi...]]></description><category></category></item><item><title><![CDATA[致师弟师妹的一封信]]></title><link>https://blog.csdn.net/xiaoming100001/article/details/80743206</link><guid>https://blog.csdn.net/xiaoming100001/article/details/80743206</guid><author>xiaoming100001</author><pubDate>Sat, 23 Jun 2018 10:35:33 +0800</pubDate><description><![CDATA[&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp]]></description><category></category></item><item><title><![CDATA[SQL Server中left join、inner join和right join的区别？]]></title><link>https://blog.csdn.net/xiaoming100001/article/details/80720560</link><guid>https://blog.csdn.net/xiaoming100001/article/details/80720560</guid><author>xiaoming100001</author><pubDate>Sun, 17 Jun 2018 20:01:09 +0800</pubDate><description><![CDATA[&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;数据库是我们IT行家常的事情，相信大家都不陌生，计算机专业都开了数据库系统概论这门课程，我分享下在暑假找实习参加宣讲会过程做的笔试题中遇到关于left join、inner join和right join的区别的简述题，希望对需要的朋友有所帮助。看下面一个小例子，我懒的开软件，用Excel替代下，谅解谅解~ 
student表...]]></description><category></category></item><item><title><![CDATA[浅谈Android设计模式]]></title><link>https://blog.csdn.net/xiaoming100001/article/details/80302143</link><guid>https://blog.csdn.net/xiaoming100001/article/details/80302143</guid><author>xiaoming100001</author><pubDate>Sun, 13 May 2018 20:57:46 +0800</pubDate><description><![CDATA[&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;&amp;amp;amp;nbsp;如果作为低年级入门的同学学习设计模式是比较困难的，建议先补充基础，积累经验再回过头进行学习设计模式，因为其中的重要性关乎到我们是否能够进阶成为相对优秀的Android工程师，高年级大佬麻烦多多指导。在阅读或者分析源码的时候，或多或少离不开设计模式，下面我只是挑]]></description><category></category></item><item><title><![CDATA[浅谈抢红包算法]]></title><link>https://blog.csdn.net/xiaoming100001/article/details/80172286</link><guid>https://blog.csdn.net/xiaoming100001/article/details/80172286</guid><author>xiaoming100001</author><pubDate>Wed, 02 May 2018 21:30:51 +0800</pubDate><description><![CDATA[刚开始觉得应该是每次抢红包都是直接随机就好了，随机上限就是剩余红包的金额，这样是有问题的，比如发100元红包，刚开始是第一个人的随机范围是（0，100），平均可以抢到50元。那么第二个人的红包（0， 50元），平均可以抢到25元，很显然每个人的几率都不一样了，后面的人比较吃亏。


  先看测试：注意金额，这个是优化的算法，并不是简单类似上述直接扔个随机数那种情况，跟后面的算法效果是差不多的


...]]></description><category></category></item><item><title><![CDATA[Android Studio3.0 Error:Execution failed for task ':app:javaPreCompileDebug' 错误]]></title><link>https://blog.csdn.net/xiaoming100001/article/details/79953292</link><guid>https://blog.csdn.net/xiaoming100001/article/details/79953292</guid><author>xiaoming100001</author><pubDate>Sun, 15 Apr 2018 21:16:38 +0800</pubDate><description><![CDATA[Error:Execution failed for task ‘:app:javaPreCompileDebug’.


  Annotation processors must be explicitly declared now.  The following dependencies on the compile classpath are found to contain annotat...]]></description><category></category></item><item><title><![CDATA[Android开发暑假实习面试经历]]></title><link>https://blog.csdn.net/xiaoming100001/article/details/79804307</link><guid>https://blog.csdn.net/xiaoming100001/article/details/79804307</guid><author>xiaoming100001</author><pubDate>Tue, 10 Apr 2018 20:55:14 +0800</pubDate><description><![CDATA[时间真快呀，自己也需要忙着春招了，多怀念以前咸鱼般的小日子，可以有很多时间陪女朋友。废话不多说，下面分享我最近的春招经历，期待我的更新。

1.阿里巴巴Java后台（28分钟）


Java如何实现跨平台，如何编译
类加载原理，classpath是什么，有什么作用
抽象类和接口的区别
Java的异常机制，有哪些异常类
介绍map,set,list,collection四大接口


面试阿里是我的第...]]></description><category></category></item></channel></rss>