算法
回文串数量 --- dp
最大回文子串 --- dp
两数之和 --- 哈希表
三数之和 --- 排序(分类讨论)
快速排序 --- 递归
二叉树最小深度 --- 分类,递归
反转链表
前中遍历还原树
后中遍历还原树
K个一组反转
水塘抽样算法
考点
iOS:
struct和class的区别
struct是值类型 class是引用类型 struct有写时复制机制 class可以被继承 所以它有引用计数
struct有自动的初始化器 class没有
class可以进行类型转换 struct不可以 struct在栈上 class在堆上(指针在栈上)
闭包的本质
闭包的本质是结构体 有isa指针 当作对象处理 会捕获外界的变量到结构体中 在堆上开辟空间保存(局部变量捕获 复制值到结构体中 静态变量 传递指针进去 全局变量 什么都不传)
响应链传递链机制
hitTest和pointInside
nextResponse self.next
触摸点在视图外怎么进行处理
渲染
离屏渲染
layout prepare display commit
渲染管线
事务的提交 标记为待处理 在runloop循环末尾统一处理
光栅化
抗锯齿 --- 位图 平滑插值处理
动画
CABaseAnimation长时间动画
多线程
死锁条件 互斥 持有等待 循环等待 不可抢占(非剥夺)
看OC代码 说输出顺序
GCD NSOperation NSThread
线程与runloop一一对应(字典方式)
锁 自旋锁 互斥锁 递归锁 读写锁 条件锁
内存
ARC机制
MRC机制
循环引用
自动释放池 ---双向链表
栈结构所构成的
优化---基本都考虑 懒加载 预加载 复用池 缓存 多线程
内存优化
卡顿检测与优化 tableView卡顿优化处理 复用池机制
图片渲染优化 --- 上下文(缩小图片尺寸)或者进行下采样处理 数据缓冲区 --->(解码) 图像缓冲区 位图缓冲区
runloop
怎么实现卡顿检测
runloop和线程的关系
点击屏幕会发生什么(还涉及到响应链和传递链) 手势识别的过程(touchesCancel)
runtime
KVC 可以实现运行时获取属性
KVO isa-swizzling(生成一个新的子类 重写父类方法实现监听)
为类拓展存储属性---关联对象
消息传递
网络:
TCP和UDP的区别(可靠传输和非可靠传输)
流量控制 ------ 滑动窗口协议 拥塞控制 ------ 慢开始 拥塞避免 快重传 快恢复
序号 确认机制
HTTPS连接方式
三次握手四次挥手
握手为什么三次而不是两次
挥手为什么四次而不是三次
签名证书 SSL/TLS 对称加密非对称加密
状态码 Http1.0 1.1 2.0 3.0有什么变化 头部压缩 多路复用 服务器推送 二进制传输
六大设计原则
单一职责原则
里氏替换原则
接口隔离原则
开放封闭原则
依赖倒置原则
合成复用原则
设计模式
结构型模式
创造型模式
行为模式
操作系统:
进程和线程的区别
进程间通信方式
线程间通信方式
虚拟内存
调度算法
分页、分段、存储管理
中断和异常处理
并行与并发的概念
内核态和用户态
内核级线程和用户级线程 (协程、线程)
内核级线程由内核统一调度可以利用多核CPU
用户级线程不能利用多核CPU
同一个进程的不同线程可以在不同的核心上运行
超线程技术 一个核心同时运行两个线程 假设A、B两个线程 A需要整数寄存器 B需要浮点寄存器 就能够并行 都需要整数寄存器 那就是并发 ---超线程
并发并行都有
图灵机 冯诺依曼模型---总线 输入设备 输出设备 处理器 内存 控制单元 算术逻辑单元
64位比32位机器好在哪
for循环中jump后面要跟随一条nop指令---------因为CPU会预读和预处理一些指令 为了防止下一条指令被执行 采用CPU空转的方法
进程 重定向 管道(命名管道------mkfifo pipes ls-l > pipes ls-l &> pipes将错误输出重定向到标准输出然后存到pipes) ls-l |
Linux用户和组 最小权限原则
可执行文件是如何运行的 加载---解析和链接---初始化---执行---运行时---结束
数据库:
脏读 幻读 不可重复读
事务的特性
算法与数据结构:
怎么判断一个四边形是正方形
怎么判断一个点在三角形内部 差积
渲染 离屏渲染 图片加载 tableView的优化 复用池 内存优化 自动释放池 循环引用 闭包 sidetables