自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ios生命周期

每个 iOS 应用都有一系列的状态和状态转换,从用户点击图标启动,到应用被系统终止。理解应用生命周期是 iOS 开发的基础,它决定了:何时初始化数据、加载 UI何时保存用户数据、释放资源如何处理前后台切换如何在系统终止应用前优雅退出iOS 应用的生命周期由 UIKit 框架的 UIApplication 对象以及 AppDelegate/SceneDelegate 共同管理。每个 iOS 可执行程序底层都存在 main 入口函数,它调用 UIApplicationMain 函数来启动应用。

2026-07-01 18:32:07 228

原创 ios客户端架构

MVVM框架介绍model作为纯粹的数据载体,数据变更通过绑定通知 ViewModelviewModel收敛全部业务逻辑,监听 Model 的原始数据,预处理为适配页面渲染的 UI 专用数据view层接收上层传入的 UI 渲染数据,完成页面绘制,同时捕获用户点击、滑动、输入等交互事件,通过回调抛给 ViewController,再由viewController转发进行业务处理RN数据流思想。

2026-06-25 20:11:58 238

原创 ios中的RunLoop

其中pthread代表当前线程,modes存储当前RunLoop注册过的所有运行模式,currentMode代表当前运行的mode,而commonModes不是真实 Mode,是虚拟别名集合:给 Timer/Source 绑定 CommonModes 时,底层会自动把任务同时添加到集合内所有真实 Mode 中。核心规则:同一时刻,RunLoop 只能运行在一种 Mode 下,切换 Mode 时,当前未处理的事件会暂时搁置。线程销毁时,其对应的 RunLoop 也会自动销毁。

2026-06-23 00:06:52 174

原创 ios中的Block和多线程

仅仅针对于栈局部自动变量 使用目的:在 Block 内部修改外部的局部变量,并且内外双向同步__Block给变量套一层带 isa 的 __Block_byref 小型 OC 包装结构体;编译器自动将其包装成结构体,比如对于int num// __block 变量包装结构体// 1. isa:小型OC对象标记;栈上为nil,拷贝到堆后赋值类对象// 2. 【最核心】转发指针,解决栈/堆地址同步问题// 3. 标记位:标识内部是否持有OC对象、内存状态int __size;

2026-06-18 00:59:46 320

原创 ios内存管理

若未找到 entry:创建新的 weak_entry_t,初始化 referent 和第一个 referrer,检查 weak_table 是否需要扩容(weak_grow_maybe),将新 entry 插入 weak_table(weak_entry_insert)查找 referent 对应的 weak_entry_t(通过weak_entry_for_referent:函数内部通过哈希算法计算对应index,从而在弱引用表中得到这个对象对应的弱引用的数组)

2026-06-13 01:15:54 251

原创 runtime

objc_class继承objc_object,其包含三个数据结构,其中cache_t是方法缓存,其作为一个Hash表,存储bucket_t(key = selector,value = IMP(方法实现体)),class_data_bits_t存储类的相关信息。

2026-05-24 10:57:27 248

原创 OC语言基础特性

什么是分类,分类的原理和机制是怎么样的关联对象,扩展,代理通知实现机制和原理,KVO实现机制,KVC是什么原理,属性和关键字。

2026-05-24 08:41:59 531

原创 简单谈谈ios开发中的UI

UITableView 内部维护了一个 重用缓存池核心流程缓存池结构:字典形式: key = 重用标识符,value = 闲置的 cellcell 滑出屏幕:系统自动把它扔进缓存池,标记为「可重用」;需要新 cell:调用 dequeueReusableCell 方法优先去缓存池找对应重用标识符的闲置 cell,找到直接复用,没找到系统进行创建重用标识符:唯一标识一种 cell 样式。

2026-05-21 17:08:51 351

原创 ios学习路线-- swift基础2

面向对象三大特性:继承,封装,多态从整体上看,swift中的类,结构体,枚举三者具有完全平等的地位枚举和结构体是值类型的,类是引用类型的。

2026-03-14 00:57:11 348

原创 ios学习路线 -- Swift基础(1)

我们使用operator关键字进行运算符的定义和声明自定义运算符,新的运算符需要作用在全局范围内。

2026-03-10 01:44:12 447

原创 ios学习路线 -- objective-c 基础

摘要:Objective-C(OC)是一种面向对象的C语言扩展,其文件扩展名包括.h(头文件)、.m(OC/C代码)和.mm(支持C++)。OC语法除面向对象特性外与C语言一致,消息传递采用动态运行时机制。字符串处理通常使用NSString对象,类通过@interface声明和@implementation实现,支持方法重写和嵌套消息。属性(@property)简化了存取方法定义,支持多种内存管理修饰符(strong/weak/copy等)。协议(Protocol)定义方法列表,分类(Category)可扩

2026-03-02 00:20:16 1508

原创 秋招ios面试 -- 真题篇(三)

属性(Property):一套对外声明 + 访问约定的语法糖,synthesize & denamic就是控制其是否编译器是否为其自动生成setter/getter方法以及对应的ivar,并且附带内存管理和线程语义成员变量(ivar):对象在内存中实际存放的数据槽位,由类定义时确定布局,运行时直接存取语法糖:语法糖(Syntactic Sugar)是编程语言中一种语法设计方式,旨在通过更简洁、易读的写法替代复杂的代码结构,但不会改变语言的实际功能或底层逻辑。其核心目的是提升代码的可读性和开发效率。

2025-12-04 10:30:57 592

原创 秋招ios面试 -- 真题篇(二)

传值通知:传值是进程内的组件通信,范围小,延迟低,不依赖网络常见方式a. 直接回调/闭包如:A 页面弹出 B 页面,B 做完事把结果回传给 A。b. 委托/协议(delegate)如:一个对象(委托方/被委托者,通常是“子组件/下游”)将某些“决定/事件处理”交给另一个对象(代理/委托对象,通常是“上层/外部”)来完成。c. 通知中心如:一对多广播,模块松耦合,不想建立直接引用。// 发送// 监听String??"")如:对某个状态变化感兴趣的多个订阅者。

2025-12-02 17:53:06 867

原创 秋招ios面试 -- 真题篇(一)

结构特点:单列垂直滚动,数据分为Section和Row,每个cell通常都是全宽度核心类:UITableView,UITableViewCell,UITableViewDataSource,UITableViewDelegatedata.count结构特点:支持多列,网格,横向/纵向滚动,复杂自定义布局,数据分为section和item。

2025-12-01 21:24:57 1120

原创 ios面试底层题目

使用KVC中的setValue forkeypath的方法,其会先寻找set(key)方法,如果该方法不存在,就会寻找_set(value)方法,如果找到了上述两种方法之一,那么就会传递参数,调用对应的方法,否则,查看accessinstanceVariablesDirectly方法的返回值(该方法标记是否可以访问成员变量,默认可以访问成员变量),如果该值为NO的话,抛出异常,如果该值为YES的话,按顺序依次查找_key,_iskey,key,iskey,如果找到了直接赋值。

2025-10-19 23:34:05 645

原创 安卓开发学习

UI是指用户交互接口UI包含窗口和控件。

2025-10-03 22:01:14 801

原创 ios面试八股文

​​KVC​​ 是一种由非正式协议启用的机制,允许开发者通过字符串名称(键)​​间接​​访问对象的属性,而不是通过调用属性的访问器方法(Getter / Setter)或直接访问实例变量。KVO​​ 是一种基于 KVC 实现的通知机制,允许一个对象监听另一个对象特定属性的变化。当被监听的属性发生改变时,观察者对象会收到通知。这是观察者设计模式的一种实现。KVO 的实现依赖于 Objective-C 强大的运行时(Runtime),其核心是 ​​isa-swizzling(isa 指针混合)​​。

2025-09-23 01:50:36 1052

原创 ios面试八股文

核心原因在于UIkit不是线程安全的(避免资源竞争),且主线程被设计为唯一负责UI调度的专属线程,主线程绑定了一个RunLoop,其核心职责就是调度所以UI相关的任务,包括处理用户交互,UI绘制,布局计算等。iOS 中常见的多线程方案有哪些?1.Documents:用户生成的重要数据,需要进行备份,存储用户主动生成的,需要长期保留的文件(如文档、编辑的内容、用户保存的文件等)沙盒本质上是一个独立的文件目录系统,每个App安装的时候,系统自动为其差创建一个唯一的沙盒目录,路径由系统随机生成,App无法修改。

2025-09-09 20:16:07 1097 1

原创 ios开发八股文--内存管理

而离屏渲染是指:由于某些UI效果无法直接在屏幕中完成,系统需要在一个临时的离屏缓冲区完成渲染计算,再将计算结果合并到屏幕帧缓冲区中显示的过程。NSTimer会持有其Target的强引用,而Target也会持有NSTimer的强引用,故会造成循环引用。不能,当两个对象相互持有对方强引用的时候,导致双方的引用计数无法降低为0,这样就会造成循环引用。内存泄漏指的是程序中不再使用的对象,其内存未被系统回收,长期占用内存空间的情况。当自动释放池被 “销毁”(如作用域结束)时,会遍历池内所有对象,调用它们的。

2025-09-08 17:07:54 919

原创 ios面试八股文

关联对象本质上是通过 Runtime 函数,将一个对象(值)与另一个对象(宿主)建立关联关系,并通过唯一的 key 来标识这种关联。类对象继承链:类对象 → 元类对象(Meta Class,类的 “类”)→ 父元类对象 → 根元类(Root Meta Class)→ 根类((考察 runtime 关联对象的理解)用于给已经存在的类添加新方法,不能添加新的成员变量,可以有单独的文件,经常用于讲将一个庞大的类拆分为多个模块。本质上是类的匿名分类,只能定义在类的实现文件中,可以添加私有成员变量,方法和属性。

2025-09-08 13:21:43 1223

原创 ios八股文 -- Objective-c

当我们调用addobserver这个方法的时候,系统会为我们动态创建NSKVONotifying_A这个类(继承A,重写setter方法),然后将原来类A的isa指针指向这个新的类。并且分类方法会覆盖宿主类方法,因为我们时根据选择器名称查找的吗,并且找到第一个就返回,所以宿主类方法依然存在,但是被覆盖。编译时倒序遍历,最先访问最后编译的分类,也就是最后编译的分类中的方法会生效。4.属性:声明的对应的get和set方法,并没有添加实例变量。只以声明的形式存在,多数情况下寄生于宿主类的.m文件中。

2025-08-20 18:12:16 743 2

原创 计算机网络总结

无需建立连接,不存在连接时延无连接状态首部开销小没有拥塞控制支持一对多通信发送方对于应用层交下来的报文,不合并也不拆分,原封不动的进行封装TCP面向连接,是一条逻辑连接每个TCp只能存在两个端点,且每一条连接只能是一对一的TCP提供可靠交付的服务TCP提供全双工通信,为此TCP连接的两端都设有发送缓存和接收缓存面向流的,TCP把应用程序交下来的数据视为一连串的无结构的字节流。

2025-07-25 20:37:42 1123

原创 操作系统总结

协程是一种更轻量级别的线程,可以在某个位置停止执行稍后继续执行的函数,核心是协作多任务,协程上下文切换只发生在用户级,多个协程可以运行在同一个线程由创建者所定义的,具有文件名称的一组相关元素的集合,可分为有结构文件和无结构文件有结构文件:若干相似记录组成无结构文件:一个字符流。

2025-07-20 19:56:46 764

原创 C++后端面试八股文

Linux中的文件描述符不是文件本身,也不是指向文件内容的指针,其为一个非负整数,代表一个进程级别打开文件表的条目索引,每个进程都存在一个打开文件表,当进程打开一个文件的时候,内核会在这个表中创建一个条目,这个表中存在指向系统级别打开文件表的指针,文件的访问模式等,同时存在一个系统打开文件表,每个条目代表一个真正被打开的文件实例,时间上,这个文件描述符就是已打开IO资源的句柄。解决了无锁或低锁并发编程中的核心问题,安全,高效的在多线程环境下访问和修改共享数据,而无需每次都使用重量级别的互斥锁。

2025-07-15 00:09:02 1497 1

原创 C++面经

const定义的叫做常量,编译方式为把常量名字出现的地方,用常量的值进行替换,还可以定义常成员方法,将this指针 =》const Test *this 普通对象和常对象都可以调用。异常是try catch,try里面放的是可能会抛出异常的代码,catch捕获想要异常类型对象,进行处理,完成后,代码继续向下运行,避免代码异常终止。C++支持函数重载,引用,new/delete,const,带默认值的参数,模板,类和对象=》就可以存在设计模式了,STL,异常。纯虚函数 =》抽象类,派生类必须重写纯虚函数。

2025-06-04 09:14:22 927

原创 软件工程期末速成--附带几道题

层次图层次图(也称H图)是在总体设计阶段最常使用的图形工具之一,它常用于描绘软件的层次结构。矩形代表一个模块,连线表示调用关系,适于在自顶向下设计软件的过程中使用;与层次方框图类似HIPO图是IBM公司发明的“层次图加输入/处理/输出图”的缩写;为了能使HIPO图具有可跟踪性,在H图例除了最顶层的方框之外,每个方框都加了编号:和H图中的每个方框相对应,有一张IPO图描述这个方框代表的模块的处理过程。IPO图能够方便地描述数据输入、数据处理和数据输出之间的关系。结构图。

2025-05-28 20:19:52 1248

原创 抖音客户端训练营--first

Pascal 命名法是指一种命名惯例,采用这种命名法时,复合词中每个单词的首字母大写。Pascal 命名法与驼峰命名法之间的区别在于:在 Pascal 命名法中,所有单词的首字母都大写;这是 Compose 中的一种常见且推荐的做法,因此您需要熟悉代码的格式。或者使用in,使用某个范围内的值,添加一个表示范围起点的数字,后跟两个不含空格的点,然后使用另一个表示范围终点的数字作为结尾。形参进行缩放时,系统会均匀缩放图片以保持宽高比不变,进而使图片的宽度和高度等于或大于屏幕的相应尺寸。

2025-05-27 10:45:01 883

原创 C++高级用法--绑定器和函数对象

如果希望function使用类内的成员函数,但是成员函数的调用又依赖于对象。bind1st :operator() 的第一个形参变量绑定为一个确定的值。bind2st :operator() 的第二个形参变量绑定为一个确定的值。void(*)() 函数指针类型:表示指向返回值为空,无参数的函数的指针。绑定器,函数对象,lambda表达式,都只能使用在一条语句中。因为对于类内的成员函数,都存在一个this指针,也就是类*我们通过定义function来获取绑定器的返回的函数对象。void() 函数类型。

2025-05-18 21:35:32 592

原创 C++中的容器

基于键(Key)有序存储,支持快速查找(通常用红黑树实现)。基于哈希表实现,键无序但查找更快(平均 O(1))。存储元素的线性序列,支持按顺序访问。基于其他容器实现的特定数据结构接口。

2025-05-18 10:54:08 1260

原创 操作系统知识总结

所谓打开,其实就是当系统检索到某个目录项的时候,将该目录项从外存复制到内存打开文件表的一个表目中,并将该文件的索引号返回给用户,当用户再次访问该文件的时候,直接通过该索引号(也叫做文件描述符)来访问文件,当文件关闭的时候,调用close系统调用,系统将从打开文件表中删除这一表目。每当要访问的页面不存在于内存的时候,就产生一个缺页中断,请求操作系统的缺页中断处理程序处理,缺页的进程阻塞,放到阻塞队列,如果内存存在空闲页框,就为内存分配一个页框,将所缺页面装入页框中,并修改页面对应表项。

2025-05-16 10:19:23 1178

原创 数据库原理期末考试速成--最后附带两套题

本文概述了数据库系统的核心概念和操作,包括关系数据库的基本操作(如选择、投影、连接等)、数据库独立性、SQL语言的使用、数据库安全性和完整性、关系规范化、数据库设计与编程、日志系统、数据库恢复技术、并发控制以及MySQL集群的主从复制与读写分离。文章还涉及了数据库设计中的ER图转换、关系模型结构的建立、候选码的确定,以及通过关系代数、元组关系演算和SQL进行数据检索的方法。此外,文章还讨论了函数依赖集的计算、关系范式的判定和分解过程,以及如何通过封锁协议和意向锁来解决并发控制中的问题。整体上,本文为数据库学

2025-05-12 20:30:40 1259

原创 计算机网络--2

1. 由于网络情况复杂,可能会出现丢包现象,如果第二次握手的时候服务器就认为这个端口可用,然后一直开启,但是如果客户端未收到服务器发送的回复,那么就会重新发送请求,服务器就会重新开启一个端口连接,这样就会浪费一个端口。syn cookie:服务器根据该数据包的源地址和端口计算出一个cookie作为自己的synack包的序列号,回复后,不为其分配资源,等收到发送方的ack包后,重新计算,如果序列号正确,那么连接建立,否则丢弃。半连接队列存放的就是三次握手未完成的队列,同时全连接队列存放的就是完成连接的队列。

2025-05-11 15:24:16 1214

原创 redis八股--1

redis是一种基于键值对的NoSQL存储数据库value支持hash,string,list,set,zset,bitmaps等等多种数据结构。

2025-05-10 21:21:38 1039

原创 计算机网络八股文--day1

端口号位443,加入了SSL/TSL协议,使得报文可以加密传输,TCP握手后,还需要进行SSL/TSL握手包含以下机制:信息加密:保证信息不被窃取校验机制:无法篡改信息内容身份证书:证明自己是自己HTTPS的工作流程:1.客户端发出HTTPS请求,连接服务器443端口2.服务器由一套数字证书,发送给客户端3.客户端收到证书以后,验证证书合法性,如果安全,就会生成一个随机的对称密钥,用证书的公钥加密4.客户端将公钥加密后的密钥发送给服务器。

2025-05-10 19:51:43 1254

原创 操作系统 == 内存管理

看到这个名字,相比你就知道其与上面的区别了,虽然装入模块被装入到内存,但是只有运行的时候才会发生地址转换,存在一个重定位寄存器来实现动态运行时装入‘分段管理的方式考虑到了程序员和用户,将用户进程逻辑地址空间划分为若干大小不等的段,并分配一段连续的地址空间。地址转换在进程装入时就完成,缺点是一个作业装入内存,必须给它分配足够的存储空间,且运行期间无法移动。地址转换,内存分配和回收,内存空间的扩充(虚拟存储技术),内存共享,存储保护。思想:将内存分为若干固定大小的分区,称为页框,页帧,物理块。

2025-05-09 15:23:48 1016

原创 操作系统基础知识介绍

看了上面那么多,你肯定在疑惑特权指令不允许用户使用,那么用户如何使用操作系统中的各类资源呢,那就是系统调用,一个操作系统提供给应用程序使用的接口,凡是和共享资源相关的,就需要通过系统调用方式向操作系统提出请求,由操作系统代为完成,结果返回用户。但是CPU只有一个,我这边占着,老大哥就用不了,那么我只能先退下来(得告诉老大哥一声我下来了,它该上了),那么这个通知手段叫做陷入指令,也就是上面提到的软件中断,记住:老大哥很仗义,只有陷入指令才会让其抢夺我的控制权。

2025-05-06 10:58:28 1439

原创 C++专业面试题

select原理: select是一种IO多路(多个TCP连接)复用技术,具体实现原理是—— 1.select会维护一个文件描述符列表fd_set,用来存放需要监听的文件描述符fd,其本质是一个1024bit的bitmap数组,1代表需要检测的fd,0代表不需要检测的fd,初始时bitmap的元素全为1;在这种做法中,内核检测到一个文件描述符就绪了,然后可以对这个就绪的 fd 进行 IO 操作,如果不作任何操作,内核还是会继续通知。8.请你介绍一下死锁,产生的必要条件,产生的原因,怎么预防死锁。

2025-05-04 16:13:22 689

原创 C++八股--6--mysql 日志与并发控制

2.幻读:同一个事务多次查询同一范围内的数据,结果集的行数不同(别的事务插入或者删除了数据导致,这个事务觉得自己眼睛花了,所以叫幻读)锁在作用范围上分为表锁和行锁,表锁就是对表加锁(这实际上会造成效率低下),行级锁是mysql的innodb支持的锁,相较于表锁效率更高。这张表中的数据没有被获取过X锁!排它锁(写锁 X锁):事务T对对象A上锁后,只允许T读取和修改A,其余事务不允许再加锁了,直到T释放锁。共享锁(读锁 S锁):事务T对对象A上锁后其余人也可以继续加X锁,但是不能加X锁,知道所有事务的锁释放。

2025-05-04 15:01:03 520

原创 C++八股--5--设计模式--适配器模式,代理模式,观察者模式

/通过代理对象的freeMovie,来访问真正委托类对象的freeMovie。主要关注对象的一对多关系,也就是多个对象都依赖于一个对象,当该对象状态改变时,其余对象都能得到对应的通知。观察者模式实际上就是创建一个主题类,然后当有消息来到的时候,主题负责通知各个观察者,也就是函数调用。实际上上述代理模式的原理在于创建一个代理类,在代理类中定义委托类指针,不同的代理类指行不同的函数。//这个是我们的网站,实现看vip电影和free电影,也就是我们的委托类。cout<<"VGA接口"<<endl;

2025-05-03 21:50:29 1200 1

原创 计算机网络八股文--day4 --传输层TCP与UDP

服务器收到请求,发送响应,转为关闭等待(close-wait),此时服务器仍然可以向客户端发送没有发完的数据。数据部分不足,补0,如果校验和结果为0,那么用全1填充,不想使用校验和,该段为全0。8B首部:包含源端口,目的端口,UDP长度,16位校验和(二进制反码求和),每个16位。这个内部包括源IP,目的IP,一字节0,自己使用的端口17,以及UDP长度。然后进行二进制反码求和再取反,(三部分一起,包括伪首部,首部,数据部分)2. TCP:面向连接服务,面型字节流,开销大,可靠,可以保证按序的交付。

2025-05-03 19:00:26 1025

C++跨平台线程池,面向对象编程

C++跨平台线程池,面向对象编程

2025-03-09

QT实战小游戏-翻金币

QT实战小游戏--翻金币

2025-02-28

大学生期末课程设计+C++

大学生课程设计的机房预约系统,使用c++语言编写 本机房预约系统共有三种用户,包括校长,老师,学生 1.学生实现的功能 申请预约,显示我的预约,显示所有预约,取消预约 2.老师实现的功能 查看所有预约,预约审核 3.校长实现的功能 添加账号,查看账号,查看机房信息,清空预约记录 身份文件为identity.h 其余三个身份分别引入该文件 全局文件添加:由于不同身份会用到不同的文件,将所有文件名定义到一个全局文件中 在头文件添加global.h 机房为room.h 预约为order.h 校长的账号和密码需要在文件master.txt添加

2025-02-18

空空如也

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

TA关注的人

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