- 博客(57)
- 收藏
- 关注
原创 秋招ios面试 -- 真题篇(三)
属性(Property):一套对外声明 + 访问约定的语法糖,synthesize & denamic就是控制其是否编译器是否为其自动生成setter/getter方法以及对应的ivar,并且附带内存管理和线程语义成员变量(ivar):对象在内存中实际存放的数据槽位,由类定义时确定布局,运行时直接存取语法糖:语法糖(Syntactic Sugar)是编程语言中一种语法设计方式,旨在通过更简洁、易读的写法替代复杂的代码结构,但不会改变语言的实际功能或底层逻辑。其核心目的是提升代码的可读性和开发效率。
2025-12-04 10:30:57
522
原创 秋招ios面试 -- 真题篇(二)
传值通知:传值是进程内的组件通信,范围小,延迟低,不依赖网络常见方式a. 直接回调/闭包如:A 页面弹出 B 页面,B 做完事把结果回传给 A。b. 委托/协议(delegate)如:一个对象(委托方/被委托者,通常是“子组件/下游”)将某些“决定/事件处理”交给另一个对象(代理/委托对象,通常是“上层/外部”)来完成。c. 通知中心如:一对多广播,模块松耦合,不想建立直接引用。// 发送// 监听String??"")如:对某个状态变化感兴趣的多个订阅者。
2025-12-02 17:53:06
800
原创 秋招ios面试 -- 真题篇(一)
结构特点:单列垂直滚动,数据分为Section和Row,每个cell通常都是全宽度核心类:UITableView,UITableViewCell,UITableViewDataSource,UITableViewDelegatedata.count结构特点:支持多列,网格,横向/纵向滚动,复杂自定义布局,数据分为section和item。
2025-12-01 21:24:57
1012
原创 ios面试底层题目
使用KVC中的setValue forkeypath的方法,其会先寻找set(key)方法,如果该方法不存在,就会寻找_set(value)方法,如果找到了上述两种方法之一,那么就会传递参数,调用对应的方法,否则,查看accessinstanceVariablesDirectly方法的返回值(该方法标记是否可以访问成员变量,默认可以访问成员变量),如果该值为NO的话,抛出异常,如果该值为YES的话,按顺序依次查找_key,_iskey,key,iskey,如果找到了直接赋值。
2025-10-19 23:34:05
593
原创 ios面试八股文
KVC 是一种由非正式协议启用的机制,允许开发者通过字符串名称(键)间接访问对象的属性,而不是通过调用属性的访问器方法(Getter / Setter)或直接访问实例变量。KVO 是一种基于 KVC 实现的通知机制,允许一个对象监听另一个对象特定属性的变化。当被监听的属性发生改变时,观察者对象会收到通知。这是观察者设计模式的一种实现。KVO 的实现依赖于 Objective-C 强大的运行时(Runtime),其核心是 isa-swizzling(isa 指针混合)。
2025-09-23 01:50:36
968
原创 ios面试八股文
核心原因在于UIkit不是线程安全的(避免资源竞争),且主线程被设计为唯一负责UI调度的专属线程,主线程绑定了一个RunLoop,其核心职责就是调度所以UI相关的任务,包括处理用户交互,UI绘制,布局计算等。iOS 中常见的多线程方案有哪些?1.Documents:用户生成的重要数据,需要进行备份,存储用户主动生成的,需要长期保留的文件(如文档、编辑的内容、用户保存的文件等)沙盒本质上是一个独立的文件目录系统,每个App安装的时候,系统自动为其差创建一个唯一的沙盒目录,路径由系统随机生成,App无法修改。
2025-09-09 20:16:07
1029
1
原创 ios开发八股文--内存管理
而离屏渲染是指:由于某些UI效果无法直接在屏幕中完成,系统需要在一个临时的离屏缓冲区完成渲染计算,再将计算结果合并到屏幕帧缓冲区中显示的过程。NSTimer会持有其Target的强引用,而Target也会持有NSTimer的强引用,故会造成循环引用。不能,当两个对象相互持有对方强引用的时候,导致双方的引用计数无法降低为0,这样就会造成循环引用。内存泄漏指的是程序中不再使用的对象,其内存未被系统回收,长期占用内存空间的情况。当自动释放池被 “销毁”(如作用域结束)时,会遍历池内所有对象,调用它们的。
2025-09-08 17:07:54
883
原创 ios面试八股文
关联对象本质上是通过 Runtime 函数,将一个对象(值)与另一个对象(宿主)建立关联关系,并通过唯一的 key 来标识这种关联。类对象继承链:类对象 → 元类对象(Meta Class,类的 “类”)→ 父元类对象 → 根元类(Root Meta Class)→ 根类((考察 runtime 关联对象的理解)用于给已经存在的类添加新方法,不能添加新的成员变量,可以有单独的文件,经常用于讲将一个庞大的类拆分为多个模块。本质上是类的匿名分类,只能定义在类的实现文件中,可以添加私有成员变量,方法和属性。
2025-09-08 13:21:43
1151
原创 ios八股文 -- Objective-c
当我们调用addobserver这个方法的时候,系统会为我们动态创建NSKVONotifying_A这个类(继承A,重写setter方法),然后将原来类A的isa指针指向这个新的类。并且分类方法会覆盖宿主类方法,因为我们时根据选择器名称查找的吗,并且找到第一个就返回,所以宿主类方法依然存在,但是被覆盖。编译时倒序遍历,最先访问最后编译的分类,也就是最后编译的分类中的方法会生效。4.属性:声明的对应的get和set方法,并没有添加实例变量。只以声明的形式存在,多数情况下寄生于宿主类的.m文件中。
2025-08-20 18:12:16
680
2
原创 计算机网络总结
无需建立连接,不存在连接时延无连接状态首部开销小没有拥塞控制支持一对多通信发送方对于应用层交下来的报文,不合并也不拆分,原封不动的进行封装TCP面向连接,是一条逻辑连接每个TCp只能存在两个端点,且每一条连接只能是一对一的TCP提供可靠交付的服务TCP提供全双工通信,为此TCP连接的两端都设有发送缓存和接收缓存面向流的,TCP把应用程序交下来的数据视为一连串的无结构的字节流。
2025-07-25 20:37:42
1056
原创 操作系统总结
协程是一种更轻量级别的线程,可以在某个位置停止执行稍后继续执行的函数,核心是协作多任务,协程上下文切换只发生在用户级,多个协程可以运行在同一个线程由创建者所定义的,具有文件名称的一组相关元素的集合,可分为有结构文件和无结构文件有结构文件:若干相似记录组成无结构文件:一个字符流。
2025-07-20 19:56:46
727
原创 C++后端面试八股文
Linux中的文件描述符不是文件本身,也不是指向文件内容的指针,其为一个非负整数,代表一个进程级别打开文件表的条目索引,每个进程都存在一个打开文件表,当进程打开一个文件的时候,内核会在这个表中创建一个条目,这个表中存在指向系统级别打开文件表的指针,文件的访问模式等,同时存在一个系统打开文件表,每个条目代表一个真正被打开的文件实例,时间上,这个文件描述符就是已打开IO资源的句柄。解决了无锁或低锁并发编程中的核心问题,安全,高效的在多线程环境下访问和修改共享数据,而无需每次都使用重量级别的互斥锁。
2025-07-15 00:09:02
1171
1
原创 C++面经
const定义的叫做常量,编译方式为把常量名字出现的地方,用常量的值进行替换,还可以定义常成员方法,将this指针 =》const Test *this 普通对象和常对象都可以调用。异常是try catch,try里面放的是可能会抛出异常的代码,catch捕获想要异常类型对象,进行处理,完成后,代码继续向下运行,避免代码异常终止。C++支持函数重载,引用,new/delete,const,带默认值的参数,模板,类和对象=》就可以存在设计模式了,STL,异常。纯虚函数 =》抽象类,派生类必须重写纯虚函数。
2025-06-04 09:14:22
867
原创 软件工程期末速成--附带几道题
层次图层次图(也称H图)是在总体设计阶段最常使用的图形工具之一,它常用于描绘软件的层次结构。矩形代表一个模块,连线表示调用关系,适于在自顶向下设计软件的过程中使用;与层次方框图类似HIPO图是IBM公司发明的“层次图加输入/处理/输出图”的缩写;为了能使HIPO图具有可跟踪性,在H图例除了最顶层的方框之外,每个方框都加了编号:和H图中的每个方框相对应,有一张IPO图描述这个方框代表的模块的处理过程。IPO图能够方便地描述数据输入、数据处理和数据输出之间的关系。结构图。
2025-05-28 20:19:52
1192
原创 抖音客户端训练营--first
Pascal 命名法是指一种命名惯例,采用这种命名法时,复合词中每个单词的首字母大写。Pascal 命名法与驼峰命名法之间的区别在于:在 Pascal 命名法中,所有单词的首字母都大写;这是 Compose 中的一种常见且推荐的做法,因此您需要熟悉代码的格式。或者使用in,使用某个范围内的值,添加一个表示范围起点的数字,后跟两个不含空格的点,然后使用另一个表示范围终点的数字作为结尾。形参进行缩放时,系统会均匀缩放图片以保持宽高比不变,进而使图片的宽度和高度等于或大于屏幕的相应尺寸。
2025-05-27 10:45:01
838
原创 C++高级用法--绑定器和函数对象
如果希望function使用类内的成员函数,但是成员函数的调用又依赖于对象。bind1st :operator() 的第一个形参变量绑定为一个确定的值。bind2st :operator() 的第二个形参变量绑定为一个确定的值。void(*)() 函数指针类型:表示指向返回值为空,无参数的函数的指针。绑定器,函数对象,lambda表达式,都只能使用在一条语句中。因为对于类内的成员函数,都存在一个this指针,也就是类*我们通过定义function来获取绑定器的返回的函数对象。void() 函数类型。
2025-05-18 21:35:32
550
原创 C++中的容器
基于键(Key)有序存储,支持快速查找(通常用红黑树实现)。基于哈希表实现,键无序但查找更快(平均 O(1))。存储元素的线性序列,支持按顺序访问。基于其他容器实现的特定数据结构接口。
2025-05-18 10:54:08
1141
原创 操作系统知识总结
所谓打开,其实就是当系统检索到某个目录项的时候,将该目录项从外存复制到内存打开文件表的一个表目中,并将该文件的索引号返回给用户,当用户再次访问该文件的时候,直接通过该索引号(也叫做文件描述符)来访问文件,当文件关闭的时候,调用close系统调用,系统将从打开文件表中删除这一表目。每当要访问的页面不存在于内存的时候,就产生一个缺页中断,请求操作系统的缺页中断处理程序处理,缺页的进程阻塞,放到阻塞队列,如果内存存在空闲页框,就为内存分配一个页框,将所缺页面装入页框中,并修改页面对应表项。
2025-05-16 10:19:23
1130
原创 数据库原理期末考试速成--最后附带两套题
本文概述了数据库系统的核心概念和操作,包括关系数据库的基本操作(如选择、投影、连接等)、数据库独立性、SQL语言的使用、数据库安全性和完整性、关系规范化、数据库设计与编程、日志系统、数据库恢复技术、并发控制以及MySQL集群的主从复制与读写分离。文章还涉及了数据库设计中的ER图转换、关系模型结构的建立、候选码的确定,以及通过关系代数、元组关系演算和SQL进行数据检索的方法。此外,文章还讨论了函数依赖集的计算、关系范式的判定和分解过程,以及如何通过封锁协议和意向锁来解决并发控制中的问题。整体上,本文为数据库学
2025-05-12 20:30:40
1137
原创 计算机网络--2
1. 由于网络情况复杂,可能会出现丢包现象,如果第二次握手的时候服务器就认为这个端口可用,然后一直开启,但是如果客户端未收到服务器发送的回复,那么就会重新发送请求,服务器就会重新开启一个端口连接,这样就会浪费一个端口。syn cookie:服务器根据该数据包的源地址和端口计算出一个cookie作为自己的synack包的序列号,回复后,不为其分配资源,等收到发送方的ack包后,重新计算,如果序列号正确,那么连接建立,否则丢弃。半连接队列存放的就是三次握手未完成的队列,同时全连接队列存放的就是完成连接的队列。
2025-05-11 15:24:16
1184
原创 redis八股--1
redis是一种基于键值对的NoSQL存储数据库value支持hash,string,list,set,zset,bitmaps等等多种数据结构。
2025-05-10 21:21:38
1015
原创 计算机网络八股文--day1
端口号位443,加入了SSL/TSL协议,使得报文可以加密传输,TCP握手后,还需要进行SSL/TSL握手包含以下机制:信息加密:保证信息不被窃取校验机制:无法篡改信息内容身份证书:证明自己是自己HTTPS的工作流程:1.客户端发出HTTPS请求,连接服务器443端口2.服务器由一套数字证书,发送给客户端3.客户端收到证书以后,验证证书合法性,如果安全,就会生成一个随机的对称密钥,用证书的公钥加密4.客户端将公钥加密后的密钥发送给服务器。
2025-05-10 19:51:43
1213
原创 操作系统 == 内存管理
看到这个名字,相比你就知道其与上面的区别了,虽然装入模块被装入到内存,但是只有运行的时候才会发生地址转换,存在一个重定位寄存器来实现动态运行时装入‘分段管理的方式考虑到了程序员和用户,将用户进程逻辑地址空间划分为若干大小不等的段,并分配一段连续的地址空间。地址转换在进程装入时就完成,缺点是一个作业装入内存,必须给它分配足够的存储空间,且运行期间无法移动。地址转换,内存分配和回收,内存空间的扩充(虚拟存储技术),内存共享,存储保护。思想:将内存分为若干固定大小的分区,称为页框,页帧,物理块。
2025-05-09 15:23:48
989
原创 操作系统基础知识介绍
看了上面那么多,你肯定在疑惑特权指令不允许用户使用,那么用户如何使用操作系统中的各类资源呢,那就是系统调用,一个操作系统提供给应用程序使用的接口,凡是和共享资源相关的,就需要通过系统调用方式向操作系统提出请求,由操作系统代为完成,结果返回用户。但是CPU只有一个,我这边占着,老大哥就用不了,那么我只能先退下来(得告诉老大哥一声我下来了,它该上了),那么这个通知手段叫做陷入指令,也就是上面提到的软件中断,记住:老大哥很仗义,只有陷入指令才会让其抢夺我的控制权。
2025-05-06 10:58:28
1383
原创 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
665
原创 C++八股--6--mysql 日志与并发控制
2.幻读:同一个事务多次查询同一范围内的数据,结果集的行数不同(别的事务插入或者删除了数据导致,这个事务觉得自己眼睛花了,所以叫幻读)锁在作用范围上分为表锁和行锁,表锁就是对表加锁(这实际上会造成效率低下),行级锁是mysql的innodb支持的锁,相较于表锁效率更高。这张表中的数据没有被获取过X锁!排它锁(写锁 X锁):事务T对对象A上锁后,只允许T读取和修改A,其余事务不允许再加锁了,直到T释放锁。共享锁(读锁 S锁):事务T对对象A上锁后其余人也可以继续加X锁,但是不能加X锁,知道所有事务的锁释放。
2025-05-04 15:01:03
486
原创 C++八股--5--设计模式--适配器模式,代理模式,观察者模式
/通过代理对象的freeMovie,来访问真正委托类对象的freeMovie。主要关注对象的一对多关系,也就是多个对象都依赖于一个对象,当该对象状态改变时,其余对象都能得到对应的通知。观察者模式实际上就是创建一个主题类,然后当有消息来到的时候,主题负责通知各个观察者,也就是函数调用。实际上上述代理模式的原理在于创建一个代理类,在代理类中定义委托类指针,不同的代理类指行不同的函数。//这个是我们的网站,实现看vip电影和free电影,也就是我们的委托类。cout<<"VGA接口"<<endl;
2025-05-03 21:50:29
1171
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
992
原创 C++八股--three day --设计模式之单例和工厂
工厂方法:提供了一个纯虚函数创建产品,定义派生类负责创建对应的产品,可以做到不同产品在不同工厂创建,实现对现有工厂和产品修改封闭。static Singleton * getInstance()//获取唯一实例对象的接口方法。static Singleton * getInstance()//获取唯一实例对象的接口方法。static Singleton * getInstance()//获取唯一实例对象的接口方法。
2025-05-02 19:40:41
1477
原创 C++日更八股--first
这里简单介绍一下:count计数私有化,随后构造函数中需要在参数列表中对其初始化,再有就是=运算符重载,实现所有权的共享,但是要注意的是这里需要实现对原有资源的释放,不然会造成内存泄露的(-_-)。首选每个进程维护一个进程打开文件表,这个里面记录了进程打开的文件,同时表中的每个条目(文件描述符),注意打开文件最初是使用文件名去找寻文件对应的inode,找到后就可以使用文件描述符访问文件了<br>不增加引用计数,不拥有资源所有权,用于解决shared_ptr的循环引用问题,经常用于转换this指针<br>
2025-04-29 21:04:07
762
原创 mysql
获取当前使用的字符集: const char *mysql_character_set_name(MYSQL *mysql)c. 建立连接. MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd,const char *db, unsigned int port, const char *unix_socket, unsigned long client_flag);
2025-03-21 18:43:37
995
原创 Linux的用户与权限--第二天
认知root用户(超级管理员)root用户用于最大的系统操作权限普通用户的权限,一般在HOME目录内部不受限制。
2025-03-04 20:48:06
1084
原创 Linux知识-第一天
Linux的目录机构为一个树型结构其没有盘符这个概念,只有一个根目录,所有文件均在其之下在Linux系统中,路径之间的层级关系 使用开头表示根目录,后面的表示层级关系。
2025-03-03 21:43:54
1326
原创 linux命令
作用:查看一个用户的基本信息(包含用户id,用户组id),该指令不指定用户,则显示当前用户基本信息。路径分为两种:绝对路径(从root开始寻找即可),相对路径(存在参照物,为当前工作路径)如果在删除的时候不想确认,增加选项“-f”表示force 强制删除,不提示是否删除。以管道符作为分界线,前面的命令有个输出,后面需要先输入,然后再过滤,最后再输出。文档类型:-表示文件,d表示文件夹,f表示文件。TTY 发起该进程的终端设备,如果为?蓝色表示文件,黑色表示文件,绿色表示其权限为拥有所有权限。
2025-02-04 16:40:35
1165
原创 C++的算法
语法:for_each(iteraror begin,iterator end,_func)//分别表示起始迭代器,结束迭代器,函数或函数对象。语法 transfrom(iterator beg1,iterator end1,iterator beg2,_func)bool binary_search(beg,end,value);copy(beg,end,dest) //dest为目标起始迭代器。语法:find_if(beg,end,_pred)
2025-01-17 15:36:06
1006
原创 c++----文件和模板
普通函数调用可以发生隐式类型转换,函数模板隐式类型推导不可以发生隐式类型转换,而用显示指定类型,可以发生隐式类型转换。建立一个通用函数,其函数返回值和形参类型可以不具体制定,而是用一个虚拟的类型来代表。模板必须要确定出T的类型,才可以使用,就算函数没参数,你也要指定T的数据类型。隐式类型推导:必须推导出一致的数据类型才可以使用,就是参数T必须保持一致。以二进制方式对文件进行读写操作,打开方式要指定为ios::binary。建立一个通用类,类中的成员可以不具体制定,用一个虚拟的类型来代表。
2025-01-04 19:51:19
882
原创 贪心算法概述
贪心算法总是作出当前看来最好的选择,是局部最优可以使用贪心算法的问题一般具有两个重要的性质贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择来达到其与动态规划的问题区别在于,动态规划算法通常以自底向上的方式解决子问题,贪心为自顶向下的方式进行。最优子结构性质一个问题的最优解包含其子问题的最优解。
2025-01-02 10:09:03
1706
大学生期末课程设计+C++
2025-02-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅