自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 收藏
  • 关注

原创 C++之程序的内存分布

程序内存分布

2022-08-07 19:09:18 400

原创 Objective-c runtime之消息转发机制

我们使用某个实例对象调用该对象所属类的某个方法:[receiver message];以前:receiver调用了message方法。OC:message这个方法向receiver发送了消息。OC方法调用会转化为C语言方法调用:转化为:objc_msgSend(id receiver , SEL selector , …);1、会根据receiver和selector一起来确定方法的实现体,即IMP2、会传递相关的信息给IMPid (*IMP)(id receiver, SEL,

2021-03-20 00:20:10 218

原创 runtime之SEL与IMP

SEL首先,SEL是一个选择器,我们来看看SEL在runtime中的定义:/// An opaque type that represents a method selector.typedef struct objc_selector *SEL;可见SEL是一个指向objc_selector结构体的指针。那么selector有什么用呢,当我们执行方法调用的时候,OC会根据selector来执行对应的方法。但是,两个类之间,不管他们有没有关系,只要他们类中的方法名一样,那么他们的SEL是同一个

2021-03-18 14:45:29 215

原创 runtime之成员变量

在OC中,成员变量就是一个结构体,如下: struct objc_ivar{ char * ivar_name; char *ivar_type; int ivar_offset; }这个结构体描述了成员变量的名字,类型和偏移量。同时runtime也为我们提供了相应的函数来获取类的成员变量的信息。Ivar _Nonnull * _Nullableclass_copyIvarList(Class _Nullable cls, unsigned int * _Nullable outC

2021-03-16 23:42:38 134

原创 runtime之metaClass

网络上有一张经典的图,如下:这张图的大概意思就是:实例对象的isa指针指向其类,该类的isa指针指向其元类(MetaClass),而其元类的isa指针指向NSObject的元类,而NSObject的元类的isa指针指向自己。下面通过代码来证明一下正确性: NSObject *obj = [[NSObject alloc] init ]; //实例化一个NSObject对象 Class objClass = [obj class]; //获取该实例对应的类

2021-03-15 23:33:45 80

原创 剑指offer 最小的k个数 (快速排序)

题干如下:题目很简单,如果之间调用库函数sort(),两行代码就可以解决。class Solution {public: vector<int> getLeastNumbers(vector<int>& arr, int k) { sort(arr.begin(),arr.end()); vector<int> ans(arr.begin(),arr.begin()+k); return ans;

2021-03-14 19:38:42 77

原创 LeetCode 503 下一个更大的元素 (单调栈)

最近做每日一题,逐渐的有感觉了,虽然原题没做过,但是基本能想到其他题目类似的解法来解决不同的问题。比如这道题。题干如下:这一题要求下一个更大的元素,并且是当成循环数组来处理,所以,答案数组中,只可能最大的数没有下一个更大的数,其他的数都应该存在下一个更大的数。读完题目,立马想到一道类似的题:每日温度,解法也随之想到:单调栈!经过调试之后,修改完所有BUG,提交成功,代码如下:class Solution {public: //自己做出来的方法,单调栈,类似每日温度那题 vector&l

2021-03-07 16:03:43 98

原创 LeetCode 131 分割回文串(自己解法与官方解法对比)

今天力扣的每日一题,是关于回文串的题目,一想到回文串,脑海里已经浮现了两道经典的题目了,一道是求最长回文子串,一道是判断回文子串,响应的解法也浮现出来了。但是,今天这道题有点不一样。题干如下:题目要求所有非回文子串的分割方案。题目读完,脑海里浮现除了另外的一道类似的题目,组合总数。第一感觉需要使用到类似回溯的算法。经过分析,写出了下面的代码:自己解法:class Solution {public: //自己的解法 vector<vector<string>>

2021-03-07 15:30:56 105

原创 IOS开发之App启动图的展示

现在我们打开App,几乎绝大多数App都会在进入主页之前有一个启动图的展示,基本上都是一些广告,App背后的公司通过App启动页面展示广告来赚取广告费用。比如我打开微博,微博App的启动页面有化妆品的广告。那么今天要实现的功能就是如何给App添加启动页面,并且在启动页面实现一些自定义的逻辑。这里有三种方法实现启动图的闪屏逻辑。第一种:Launch Screen + Splash Screen这是系统级的闪屏逻辑,实现非常简单,但是时间段,App的加载资源准备好后就会立即消失。第二种方法:As

2021-03-04 14:18:31 312 1

原创 IOS开发之App之间的拉起和跳转

我们平时在浏览HTML5页面的时候,经常会遇到跳转到微信、淘宝、京东等App页面,如下图所示:那么IOS是如何实现App之间的跳转呢?今天就来学习一下。URL Scheme:IOS在系统层面为我们提供了URL Scheme来实现App之间的通信,比如App启动,跳转和参数传递。其拉起的格式如下:比如我们想拉起微信,可以在浏览器页面输入:weixin://就可以跳转到微信app页面。当然我们也可以在weixin:// 后面追加内容,让其跳转到子页面。接下来我就演示一下如何在Safari浏览器

2021-03-04 13:40:36 2755 1

原创 LeetCode 338 比特位计数(动态规划+位运算)

首先,题干如下:这一题要求给定数num从0—>num的二进制位的数组并返回该数组。最直观的解法就是直接求每个数的二进制位中1的个数,并返回数组。题解如下:直观解法:class Solution {public: //直接计算 vector<int> countBits(int num) { vector<int> numOfBit(num+1,0); for(int i = 0;i<=num;i++){

2021-03-03 22:47:41 153 1

原创 LeetCode 1438 绝对差不超过限制的最长连续子数组(滑动窗口,单调队列)

题目一看就是采用滑动窗口来解决,之所以记录一下是想复习一下单调队列的语法逻辑。题干如下:我们可以枚举每一个位置作为右端点,找到其对应的最靠左的左端点,满足区间中最大值与最小值的差不超过 \textit{limit}limit。注意到随着右端点向右移动,左端点也将向右移动,于是我们可以使用滑动窗口解决本题。这里我们需要一个数据结构来存储滑动窗口中的元素,并且需要对滑动窗口的元素进行排序,在C++中,map和set就有这样的功能,考虑到滑动窗口中的元素有可能重复,所以这里采用C++ STL中的mult

2021-02-22 20:55:37 215

原创 LeetCode 697 数组的度(一种哈希表的新的遍历方法)

在遍历哈希表的时候,我一般采取的是iterator的方法来遍历,这样遍历很不方便,在leetcode 697题中,了解了一种新的哈希表遍历方法,这种基于auto关键字的遍历应该是在C++ 11中支持的,非常方便。题干如下:题目本身不难,我们可以采用哈希表来记录数组中每个元素出现的频率,当出现频率最高的元素是唯一的时候,我们只要取该元素第一次出现和最后一次出现的区间长度,返回该区间的长度。当出现频率最高的元素不唯一时,我们需要比较他们的区间长度,取最小的区间长度返回。同时,每个元素的区间长度等于该元素

2021-02-22 11:40:43 145

原创 LeetCode 547 省份数量(图论复习:BFS、DFS、并查集)

这是一道经典的关于图论的联通分量的问题。题干如下:把n个城市和它们之间的关系看成图,城市是图中的节点。城市之间的相连关系看成图的边。题干中给出的isConnected矩阵就是典型的图论的邻接矩阵表示法,题干中要求得省份数量也就是图中的连通分量个数。统计图的连通分量个数,可以使用深度优先搜索,广度优先搜索和并查集。深度优先搜索(DFS):class Solution {public: //方法1:深度优先搜索 int findCircleNum(vector<vector<

2021-02-10 21:59:18 170

原创 HTTP与HTTPS的区别

HTTP与HTTPS的介绍超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS,为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL/TLS协议,SSL/TLS依靠证书来验证服务

2021-02-09 22:30:40 107

原创 使用SDWebImage开源框架实现图片的下载与存储

之前我们已经在多线程基础中,通过把图片的网络请求放到非主线程中,来优化了整个app的卡顿情况。但是,这并不是最优解,因为当我们滑动页面的时候,图片并没有被保存下来,每次显示相同的图片,仍然要从网络中请求并加载。进一步的优化是应该把初次请求的图片保存在缓存中,下一次显示的时候直接从缓存中读取,由于读取缓存的速度肯定大大小于网络请求的速度,所以通过把图片存储下来,可以进一步优化app的流畅性。接下来我们就介绍下在ios开发中图片存储的方案和流程。同样的,这里我们介绍一个开源框架–SDWebImage来实现图

2021-02-08 20:36:59 658

原创 Flutter为什么选择Dart?

我们知道,Flutter 开发框架采用的开发语言是 Dart,所以要用好这个框架,我们必须要搞清楚 Dart 语言。什么是Dart?Dart是Google在2011年10月在丹麦召开的GOTO大会上发布的一门新的编程语言。如同 Kotlin 和 Swift 的出现,分别是为了解决 Java 和 Objective-C 在编写应用程序的一些实际问题一样,Dart 的诞生正是要解决 JavaScript 存在的、在语言本质上无法改进的缺陷。那么JavaScript具有什么特性呢?JavaScript 之

2021-02-07 21:48:20 729

原创 TCP协议如何保证可靠性

我们都知道TCP是可靠的传输层协议,那么TCP是如何保证传输可靠的呢?TCP确保传输可靠的方式主要有:序列号确认号超时重传快速重传超时时间间隔加倍GBN 协议与 SR 协议混合体的差错恢复机制流量控制拥塞控制序列号:报文段第一个数据字节的字节流编号。序列号对于在累计确认机制中扮演着重要作用。确认号:服务端在接收到客户端发送的报文时,会给客户端返回ACK确认号,这个ACK确认号的内容里存放的是服务端希望接受的下一段字节流的编号。PS:序列号与确认号都是TCP的首部字段的重要内容,也

2021-02-06 20:20:51 526

原创 flutter Running Gradle task ‘assembleDebug‘

Android Stdio一运行Flutter项目就卡住了。在网上搜索了答案,这里记录一下解决方案。百度查询原因是因为Gradle的Maven仓库在国外, 因此需要使用阿里云的镜像地址。maven { url ‘https://maven.aliyun.com/repository/google’}maven { url ‘https://maven.aliyun.com/repository/jcenter’}maven { url ‘http://maven.aliyun.com/nexus/c

2021-02-05 22:27:58 136

原创 TCP和UDP的区别

复习一下计算机基础知识,准备春招…TCPTCP(Transmission Control Protocol,传输控制协议)可靠数据传输协议(保证数据正确性)、面向连接的、面向字节流、传输慢,安全漏洞多,容易受到攻击(syn flood 如果在第二次握手后服务器就分配资源)、TCP 首部开销20 字节(TCP 报文段由首部字段和数据字段组成,首部字段一般 20 字节,但是由于首部字段中 TCP 的选项字段是可变的,所以 TCP 的首部长度是可变的。(选项字段为空,TCP 首部字段 20 字节))、要求系统

2021-02-05 18:38:47 160

原创 IOS开发之多线程基础(NSThiread、GCD、NSOperation、Runloop)

IOS中的进程和线程通长来说一个app就是一个进程ios开发中较少的运用进程间的通信(XPC),绝大多数使用线程。在ios开发中,为了保证流畅性以及线程安全,所有与UI相关的操作都应该放在主线程,所以有时候主线程也叫UI线程。影响UI体验,耗时时间较长的操作,尽量放到非主线程中。比如网络请求以及和本地的IO操作。在IOS开发中有关于多线程的知识点主要包括:NSThread、GCD、NSOperation和RunloopNSThreadNSthread就是一个线程,它的底层是对pthread的封

2021-02-04 22:08:21 233

原创 LeetCode 480滑动窗口中位数(vector+选择排序)

这题我是直接采用选择排序写出来的,写出来去看官方解答,发现官方题解用的数据结构也太多了,实在让人看不下去,所以就记录下我的题解吧,欢迎大家讨论。首先我们需要一个数据结构来实时存储窗口中的值,并且要能够实时删除值,插入一个值,并且进行排序,然后找到中位数。这里我采用vector来存储,主要考虑到这个数据结构的大小不会变,只要存储k个元素,采用vector可以直接取下标,所以寻找中位数的时间复杂度是O(1)。接下来的问题就是要在排序好的数组中找到要删除的元素,这里的时间复杂度是O[k]。然后我把要插入的

2021-02-03 15:15:03 113

原创 LeetCode 424 替换后的最长重复字符(双指针法)

之前接触过不少双指针的题目,还都比较简单,不过这一题读完,我压根没想到会用到双指针,以为又是动态规划。题干如下:刚读完题目都没有读懂,看了下面两个例子才看明白。力扣官方解法给的是双指针的解法,但是其实这仅仅靠双指针并不能解决此题,还需要记录双指针left与right之间最高频率字母出现的次数。开始左右指针都处于0位置,起初我们先每次把右指针向右移动一个位置,然后更新当前字符出现的频率,然后更新最大频率,每次我们都需要判断,左右指针之间的字符数量如果已经超过最高频字符数量+可以改变k个字符的数量的话

2021-02-02 22:28:38 193

原创 mac系统Flutter开发环境搭建以及创建第一个Flutter项目

寒假在家,时间挺多的,然后这两天我即将入职的公司的team leader找我聊了几句,大概就是帮我规划了下我所从事的岗位需要掌握的技术栈,并且建议我提前学习,好入职的时候能够快速上手业务,在这里感谢一下leader的指导吧。由于leader秋招那会也建议我多学习下flutter,这次又进一步建议我学习下flutter的skia渲染原理,说实话,我到现在还没开始学flutter呢。好吧,既然flutter那么重要,寒假的学习flag又多一个flutter!看了网上的资料,flutter的开发环境配置就挺折腾

2021-02-01 22:15:43 623 2

原创 zsh: command not found: flutter

最近在学习flutter开发的相关知识,发觉flutter的开发环境配置好后,退出终端,再进入终端,输入flutter doctor命令后,会显示,zsh: command not found: flutter的错误。经过查找资料,发觉是从 macOS Catalina 版开始,您的 Mac 将使用 zsh 作为默认登录 Shell 和交互式 Shell。您还可以在较低版本的 macOS 中将 zsh 设置为默认 Shell。如果你不嫌麻烦,你还是可以通过每次打开终端输入一下命令使用flutter命令。

2021-02-01 20:25:39 3447 2

原创 IOS文件管理系统:沙盒、NSFileManager、NSFileHandle、NSCoding、NSKeyedArchiver解析

什么是沙盒?苹果为我们每个app都分配了一个固定的文件夹,我们在开发过程中可以向文件夹存入我们想要存储的数据,同时也能从这些文件夹取这些数据,但是我们不能取到其他app所存储的数据。简单说,沙盒就是这个文件夹。沙盒是苹果的一种安全机制的设计,就是一个app只能访问该app对应的文件夹,以及一些相关的资源,两个app之间是不能共享文件的。每个app只能访问自己沙盒中的文件的。而沙盒就是一个存储app资源的地方。它主要包括bundles文件和Datas文件。而bundles文件主要是系统来管理的,我们开发a

2021-01-31 17:49:25 371

原创 LeetCode 839 相似字符串组(并查集解题模板)

一月的力扣每日一题似乎是并查集月,在一月的最后一天,总结一下并查集的解题模板吧。在解决图论相关问题的时候,如果我们不关心图的路径如何连接,而只关心图的连通性和连通分量的个数,我们可以考虑采用并查集来解决。并查集最重要的两个操作是查找和合并操作。同时,为了提高并查集的合并和查找效率,在查找的时候我们可以执行路径压缩,在合并的时候我们可以采取按秩合并的方案。接下来我总结了并查集这个数据结构的标准模板,包括了合并与查找操作。class UnionFind {public: vector<in

2021-01-31 13:02:18 146

原创 LeetCode 493翻转对 (归并排序算法总结)

今天在刷代码题的时候,又遇到了套用归并排序秒杀的解题模板。题目如下:这一题和《剑指offer》中逆序对哪一题如出一辙,都是用归并排序来解决的,当然力扣官方题解还介绍了别的一些高级的解法,我也不太熟悉,大家感兴趣的可以自己的学习。具体的分析我在代码注释中已经写得十分详细了,这里我主要是给自己备注一下,看不懂的可以去看力扣官方题解。class Solution {public: //与《剑指offer》中逆序对那题如出一辙,不理解可以参考官方题解 int reversePairs(vecto

2021-01-30 15:04:39 178

原创 charles为什么能够截取https的报文

上一篇博文我实现了使用charles抓包手机端app,但是并没有解释为什么charles能够抓包手机端app,因为可以看到,手机端请求的数据都是采用https协议传输的,https协议是安全的传输协议,那么charles为什么能够截获https的报文呢?本篇文章我就来一探究竟。首先我们先了解一下charles在蒸锅过程中都做了哪些事?其实charles主要做了两件事:1 截获真是客户端的https请求,伪装客户端向真实服务器发送请求。2 接收真是服务器的响应,用charles自己的证书伪装服务端发送的数据

2021-01-29 22:10:24 308 3

原创 使用cocoapods集成AFNetworking开源框架

什么是AFNetworking?AFNetworking是一款用于网络通信的开源框架。在使用cocoa提供的NSURL实现app的网络请求的时候,当我们的请求特别复杂,逻辑也特别复杂的时候,会使代码量骤增,重复代码特别多,AFNetworking就解决了这种代码使用不优雅的问题。它通过非常简单的接口和回调,让我们使用者在开发网络请求方面的工作时非常方便。使用系统的第三方资源库带来了一个问题,就是如何管理和依赖AFNetworking?在介绍后续内容之前,我们需要先了解两个概念,一个是project,一

2021-01-28 22:06:51 389

原创 mac安装charles完全教程(抓包手机端ios)

最近在学习网络抓包相关的知识,回想秋招那会面试网易的时候,被问到抓包原理,当时没有回答的太好,所以想记的再好不如实操,所以在家在家就下载了charles这款软件,实际体验了一下网络抓包的流程,中间遇到了几个bug,特地记录一下。charles下载和破解首先去官网下载charles软件:https://www.charlesproxy.com/download/根据你使用的是什么系统选择相应的版本下载就行,这里我下载了macos版本的charles。官方正版的charles是使用30天的,所以作为学习

2021-01-27 20:58:59 1861 2

转载 ARP协议

只要确定了 IP 地址后,就能够向这个 IP 地址所在的主机发送数据报,这是我们所熟知的事情。但是再往深了想,IP 地址只是标识网络层的地址,那么在网络层下方数据链路层是不是也有一个地址能够告诉对方主机自己的地址呢?是的,这个地址就是MAC 地址。认识MAC地址MAC 地址的全称是 Media Access Control Address,译为媒体访问控制地址,它是网络上以太网或网络适配器的唯一标识符。MAC 地址能够区分不同的网络接口,并用于多种网络技术,尤其是大多数 IEEE 802 网络。MAC

2021-01-27 15:39:46 3670

原创 IOS开发之代码规范与重构

最近学习到了ios开发的一些代码规范技巧,在此记录一下。一、Rename对当前文件夹下某个文件名进行重命名二、注释:Option + Command + ‘/’ , 添加注释三、#pragma mark -对于较长的代码,可以使用#pragma mark -进行分组四、command + F进行查找操作,然后使用replace进行替换。五、使用new Group进行文件结构设置六、XCFormatXcode的一个小插件,一个自定义代码规范。点击Xcode Extensions进

2021-01-18 13:39:31 228

原创 IOS开发之1:Xcode11之后didFinishLaunchingWithOptions函数初始化window失败问题

IOS开发之1:Xcode11之后didFinishLaunchingWithOptions函数初始化window失败问题刚刚开始学习IOS开发相关的知识,由于秋招公司用的是OC开发的,所以学习书籍都很老了。OC学了两个月,把语法学的差不多了。最近开始写IOSapp,跟着书和视频写,发觉有个BUG让我抓狂了好久。问题如题目,跟着书在appdelegate.m文件didFinishLaunchingWithOptions函数中初始化window界面,书里面运行正常,视频教程运行正常,可我的Xcode里死活

2020-12-24 15:43:34 979

空空如也

空空如也

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

TA关注的人

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