自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(65)
  • 资源 (4)
  • 收藏
  • 关注

原创 中介模式

1、中介模式产生背景当系统变得越来越复杂之后,模块与模块的之间依赖性非常强大,后期维护背景加大。2、引入中介模式之后变得简洁了:模块与模块之间不直接引用,单方面直接通过中介者交互,中介甚至不需要依赖任何模块,模块也不需要知道其他模块的存在,这样由系统的网状结构变得更加简洁,大大减低了后期系统的维护,如图所示:...

2020-05-26 15:15:55 456

原创 剑指offer算法题

typedef struct listNode{ int val; struct listNode* next; struct listNode* randomNext;}listNode;#pragma mark 测试克隆void test(listNode* head){ std::stack<listNode*> stack; ...

2019-08-08 11:05:39 183

原创 异常数据的捕获

崩溃捕获原理:定义自己的信号处理函数,代替内核的默认处理,需要监听从当mach微内核发出mach异常(EXC_BAD_ACCESS,EXC_CRASH等,在这一瞬间先暂停所有子线程(除捕获线程外),捕获到各个线程的backtrace,backtrace只能以16进制地址信息存储、产生异常的线程、捕获发生的时间、可以获取其他硬件信息、获取当前进程加载的二进制镜像文件包括镜像开始地址,结束地址,镜像...

2018-12-18 20:23:01 1175

原创 功能权限和数据权限

在任何系统中都需要权限控制,没有权限,系统是不健全的时刻会受到各种问题的干扰。权限分为数据权限和功能权限1、功能权限:       能不能打开某一个界面,能不能触发一个界面上的一个按钮,某些业务员能不能删除订单,采购员能不能删除业务员某个销售订单,带着一系列问题?这是什么问题。没错这就是功能权限。2、数据权限:

2017-11-02 11:01:05 21906 2

原创 背包问题(0~1)

#define kProductNum 12void knapsackProblem(){ int value[] = {0,10000,2000,2550,2900,500,4000,3000,22000,5894,2455,5885}; int weight[] = {0,1,3,4,5,1,2,3,1,3,1,2}; int v[kProductNum][kProductNum] = {0}; int path[kProductNum][kProductNum] =.

2021-07-26 19:29:36 127

原创 迪杰斯特拉算法(Dijkstra) ES6实现

class Graph{ constructor(props){ this.edges = [ [65535,65535,65535,65535,65535,65535,65535], [65535,65535,65535,65535,65535,65535,65535], [65535,65535,65535,65535,65535,65535,65535], [655...

2021-07-26 19:20:58 137

原创 对字符串 “ABC” 所有子集的列举

/*** * 引用:http://data.biancheng.net/view/34.html * 对字符串 “ABC” 所有子集的列举(使用回溯法-这里实际上是二叉树的深度优先遍历) *从集合的开头元素开始,对每个元素都有两种选择:取还是舍。当确定了一个元素的取舍之后,再进行下一个元素,直到集合最后一个元素。其中的每个操作都可以看作是一次尝试,每次尝试都可以得出一个结果。将得到的结果综合起来,就是集合的所有子集。 * */void allPermutation(char* str,NSS.

2021-06-25 17:00:08 1610

原创 iOS 锁的性能测试

1、主线程中测试代码:1.1、通过clock_gettime() 转换为微秒时间进行比较 ,通过在主线程中分别尝试10000次加锁,解锁操作 得出diff:static uint32_t getCurrentTimeIntervalMicrosecond(){ struct timespec time = {0, 0}; clock_gettime(CLOCK_MONOTONIC, &time); return (uint32_t)(ti

2020-08-10 13:42:56 501

原创 Wireshark抓取发起一次请求并返回小部分 流程解读

1、共计收到的包数量与消耗的字节数:2、 三次握手不解释,直接进入TLSv1.2 C与S发生了什么:3、ack确认包的计算:

2020-07-30 16:32:50 267

原创 使用Wireshark 抓取三次握手与四次挥手包

1、TCP数据包格式:2、三次握手图:3、四次挥手4、第一次握手数据包:5、第二次握手数据包:6、第三次握手数据包:7、第一次挥手数据包:8、第二次挥手数据包:9、第三次挥手数据包:10、第四次挥手数据包(没找到???????)11、出现flag= REST:12、 Wireshark抓取的记录:...

2020-07-29 17:00:18 1128

原创 备忘录模式

备忘录模式:在不破坏封装前提条件下,捕获一个对象的内部状态,在对象之外,保存状态,以便在适当的时候恢复对象,应用实例:1、玩游戏时的存档2、Command + zexample:Originator 发起请求将需要保存的信息保存到Memento(备忘录)中,然后将对象提交到Caretaker实例保管类图:...

2020-06-09 16:49:33 130

原创 建造者模式(Builder)

建造者模式:将一个复杂对象的构建与它的表现分离,使得同样的构建过程可以创建不同的表现。构建过程分为:客户-指导-生成器 Client - Director - Builder:类图:时序图:具体实现:#import <iostream>#import <string>//最终被建造产品class IHouse{public: virtual ~IHouse(){}protected: int _foundationCount...

2020-06-09 16:43:40 140

原创 原型模式(Prototype)

原型模式:使用原型实例指定创建对象的种类,并通过复制这个原型创建新的对象Objective-C 实现原型模式应用场景:Cocoa Touch框架为Object的派生类提供了实现深复制的协议NSObject的子类需要实现NSCopying协议及方法 - (id)copyWithZone:(nullable NSZone *)zone否则发送copy消息引发异常。简单理解原型模式就是对象的复制。#import <iostream>#import <str...

2020-06-08 18:43:08 127

原创 策略模式

策略模式:把相关算法分离为不同的类,称为策略,这些算法可以相互替换,本模式使得算法可独立于使用它的客户而变化#import <string>#import <iostream>using namespace std;class IStrategy{public: ~IStrategy(){}public: virtual bool doMethod(std::string str) const = 0;};class ByCarStrategy:p

2020-06-08 17:58:30 87

原创 BeeHive、CTMediator、MGJRouter

BeeHive提供以key为@protocol(协议),value为class实现协议的键值对,当协议发生改变时候,编译阶段能够及时感知.BeeHive组件化产生背景:1)、功能代码之间的依赖复杂,可维护性差;2)、协同开发过程中,并行开发存在block;3)、功能界限不清晰,基础功能模块变动,会导致上层业务受到影响;4)、各团队负责功能模块,在主工程中有耦合代码(其它模块发生改变,主工程也需要改变);5)、上层业务出现反向提供功能给底层情况(违反了设计模式的依赖反转原则);6)、性能优化

2020-06-02 18:17:38 809

原创 单列模式

单列模式要求类的实例,在整个应用的生命周期只会实例化一次无论任何时候,返回的都是同一个实例#import <Foundation/Foundation.h>#import <pthread.h>//这种写法出现在多线程中就会出现实例化多个singleInstanceclass SingletonDemo1{private: static SingletonDemo1* singleInstance;public: static Singleto..

2020-05-28 17:47:10 98

原创 责任链模式

责任链模式:是多个对象都有机会处理请求,从而避免请求的发送者和接受者之间发生耦合,此模式形成一条链,并延着这条链的传递请求,直到有一个对象能够处理它为止责任链主要思想是,对象引用了同一类型的另一个对象,形成一条链。链中的每个对象实现了同样的方法,处理链中第一个对象发起一个请求,如果对象不知道如何处理请求,就把他传递下一个响应者。UIView响应者链就是一个完美的责任链模式具体应用:#import <Foundation/Foundation.h>#import <.

2020-05-28 17:07:33 108

原创 组合模式

组合模式把相同基类型的对象组合到树状结构中,父节点包含同类型的子节点形成"部分-整体"的层次结构部分-整体:既包含对象的组合又包含作为叶子节点的单个对象的一种层次机构每个组合体包含其它节点,可以使叶子节点或者其它组合体,这种关系在层次结构中递归重复,每个组合或者叶子节点具有相同的基类,同样的操作可以应用他们中的每一个,不必再客户端做类型检查。Objective-C中使用UIView实现组合模式,UIView的实例可以包含其它实例形成统一的树形结构,让客户端对单个UIView对象和UIView

2020-05-28 15:17:21 159

原创 代理模式

代理模式类图: NSProxy继承NSObject协议 作为抽象基类和NSObject同级别的基类 发送给NSProxy子类(代理)的消息会被转发给真正的实体对象,或者让代理加载 真正的实体对象,或把代理自身变成实体对象,让开销比较大的对象实行 懒实例化(邮件Mail应用)收到邮件消息中只会显示一些基本信息,当用户点击站位图形 时,开始加载真正的图形内容,原先的站位图标作为一个代理 Clie...

2020-05-27 19:35:58 152

原创 适配器模式

适配器模式:将原来不能够在一起工作的类变得能在一起工作类适配器:通过实现接口和继承实现对象适配器:通过实现和组合实现1、iPhone 6 充电电压5V,插座电压220V 手机通过电源适配器直接能够用上目标电压5V,220V电压作为适配者(Adaptee)。2、Objective-C 中协议充当Target需要被实现,UIViewController充当适配者,如何让协议和UIViewController进行通信,这时候需要自定义视图控制作为适配器让协议和UIViewControll.

2020-05-27 15:10:17 119

原创 命令模式(C++版本和Objective-C)

#import <Foundation/Foundation.h>#import <iostream>#import "NSInvocationTest.h"// receiverclass AirConditioning{public: void turnOn(){ NSLog(@"AirConditioning turnOn"); } void turnOff(){ NSLog(@"AirCondit..

2020-05-26 15:06:47 141

原创 装饰模式笔记(网络改编而成)

#import <Foundation/Foundation.h>#include <string>#include <iostream>using namespace::std;class Hamburger{public: Hamburger(){ } ~Hamburger(){ }public: virtual float get_privice(){ return 0.0f; } ..

2020-05-25 18:38:47 99

原创 架构设计

1、测试阶段未发现缺陷,很可能导致线上用户大规模异常,如果未修复,造成用户损失;2、业务迭代,功能复杂,卡顿现象频出,用户体验差;3、关键业务监控不到位,出现业务异常,无感知;4、支付宝开发测试,仅仅占整体工程量的25%,以下即响应工作拆解;...

2020-05-25 15:37:34 122

原创 访问者模式(根据改编而成)

#import <Foundation/Foundation.h>#import <string>#include <list>using namespace std;class Engine;class Manager;class Visitor{public: virtual void visitor(Engine* engine) = 0; virtual void visitor(Manager* manager) = 0;..

2020-05-25 13:48:24 141

原创 技巧

1、-(void)performSelector{ SEL selector = @selector(printImp); IMP imp = [self methodForSelector:selector]; void (*setter)(id,SEL,BOOL) = (void(*)(id,SEL,BOOL))imp; setter(self,sele...

2020-01-09 19:09:19 293

原创 AVL树

#pragma mark AVL tree(平衡二叉树)#define avl_node_len(p) (p == NULL ? 0 : (p) -> height)typedef struct _avl_node{ int key; struct _avl_node* left; struct _avl_node* right; int ...

2019-09-05 15:58:38 117

原创 关于开发ios instruments性能工具

1、libimobiledevice原理是破解iTunes和iPhone通讯后,实现了该协议。iTools也是用这玩意; 1.1、通过使用make命令运行makefile文件,从而libimobiledevice整个工程编译成多个可执行文件, 拿到设备(uuid,设备名称,设备字符模型,cpu架构,网卡信息,系统版本等一切硬件信息)、对整个设备进行备份,获取时间,截屏,...

2018-11-27 10:39:01 3647 7

转载 你有1元、5元、7元三种硬币,求一种方法,用最少的硬币凑出m元

转载:https://blog.csdn.net/wjheha/article/details/77924642/* * 代码:学习动态规划的思想,采用自底向上,用迭代去实现。 * * 硬币数目的最小单元是1、3、5,凑一次必须使用三个单元之一,假设 * 钱的数目为m,则 m = 1 * x + 3 * y + 5 * z; * * 如果要凑够0元,只有一种方案,使用0个硬币...

2018-08-20 11:41:09 3404

原创 iOS 性能优化点

1、整体优化思想:2、xCode为可执行文件瘦身 移除符号原理3、开发SDK遇到的问题:44、头条优化思想:

2018-05-28 15:55:09 244

原创 数据库性能优化-4-减少对数据库的连接次数

原因:1、频繁的对数据库操作将影响其他正常用户的访问。2、为了保护数据的安全会牵涉到锁:数据库级锁,表级锁,块级锁,页级锁,行级锁。3、对数据库的访问会牵涉到磁盘IO的操作,经过一段时间分析发现网站性能差主要是在数据的读写。4、每次读数据库的更新操作会写日志,减少不必要的磁盘写入。解决方法:1、能合并一条指令的尽量合并成一条(一次查询将相关的数据写入到临时表中,后续

2017-11-03 10:09:14 4973

原创 数据库性能优化-3-创建合适的索引

索引:实际上是一个平衡二叉树的数据结构去维护数据表能够快速的查找想要的数据,提升用户的访问速度。1、聚集索引:叶子节点上面存储用户的真实数据,通常一张表最多只能有一个聚集索引,        通常为一张表某个字段创建一个主键,那么在SQL SERVER默认情况下,为这个主键是创建的是聚集索引,通常为一个主键数据类型UUID,这时候性能非常差,我们在插入数据的时候是随机插入的,同一天订单的数

2017-11-03 10:08:40 415

原创 二分排序

二分排序:1、先将数据进行二分组,将组分到不能再分为止;2、将组分到不能再分为止的,两块合并成一块,并且排序;      #include&lt;stdio.h&gt;    #include&lt;string.h&gt;    #include&lt;stdlib.h&gt;    void binary_merge_sort(int *vector,int l...

2017-11-03 10:08:04 847

原创 数据库性能优化-1-使用SQL Server Profiler工具和执行计划分析

背景:由于项目人数众多,同一个界面可能有几个人进行编码。不同的人在SQL语句性能上有所不同。有些页面存在短暂的卡屏,为了快速找出问题所在。由于涉及的项目使用的SQL SERVER数据库,这里使用SQL Server Profiler工具:1、打开SQL Server Profiler 工具:2、可以使用WIndows认证,也可以使用sa认证3、1)、

2017-11-03 10:07:29 2072

原创 weak 原理&&@synchronized 原理

基于Objective-C语言构建的类似eChart的图形处理库: https://github.com/aimsgmiss/XLChart. 构建背景:做数据分析的时候急切需要图形处理更直观显示数据,当时在网上没有找到合适图形处理库基于Objective-C,自己动手基本从画线,画圆、画弧、渐变颜色、填充封装成基础的图形处理引擎,后续展示在界面的图形控件基于基础的图形处理引擎。由于后...

2017-11-02 11:07:36 753

原创 其他人优秀的软件设计

1、大型网站系统架构的演化:http://www.cnblogs.com/leefreeman/p/3993449.html

2017-10-25 10:15:40 496

原创 根据GUID找到位于那张表,那一列

根据某条记录中某一列内容 找到该内容位于那些表中并且输出表名和列名IF (OBJECT_ID('searchPropertyFrom','P') IS NOT NULL) DROP PROC searchPropertyFromGOCREATE PROCEDURE searchPropertyFrom( @value VARCHAR(1024)) AS BEGIN SET NO

2017-06-27 16:56:39 411

原创 设计包含min函数的栈

定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)。

2017-02-16 17:20:31 305

原创 把二元查找树转变成排序的双向链表

.把二元查找树转变成排序的双向链表题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。 10/ \614/ \ / \48 12 16转换成双向链表4=6=8=10=12=14=16。void insertOrderToQueue(TN* head,std::queue<TN*>&amp...

2017-02-16 14:56:03 308

原创 快速排序

快速排序:1、选择一个基点(通常选取某一块中第一个元素),一趟排序下来,左边的所有数据小于基点,右边的所有数据大于基点;2、使用递归排序; void quick_sort(int *vector,int low,int high){ if (low &gt;= high) { return; } int ind...

2017-02-05 15:26:22 301

原创 代码上传到github,gitlab等git仓库进行托管

1、以github为例,首先创建账号;2、在github上创建一个代码仓库3、创建项目名称,如下图:4,创建完之后,需要ssh key    (1) 在终端输入:ssh-keygen -t rsa -C 'your email@domain.com' //输入你的邮箱,其实默认这个也可以。(2)终端会提示(Enter file in which to save

2016-08-25 21:58:32 2308

自定义时间控件

一次看到Android上一个时间控件做的非常漂亮,然后下定决心已定要模仿出来,资源有点大是因为曾近有过其他源代码。

2015-05-24

ios 天气预报源代码

看到360浏览器天气预报,心血来潮就模仿一下。非常简单的天气预报,能够正常使用。

2015-05-19

连连看源代码

有次面试问到这个题,当时问傻了,后来经过几天的努力移到xcode上开发的,很简单的连连看。

2014-04-17

i捕鱼源代码

半年前写的程序,好久没有弄过了,内存管理方面有待提升,文件很大里面很多不必要的图片资源,场景切换有问题,需要你们改正,还是能够运行的,总体效果还行。

2014-04-17

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除