洋仔的博客 洋仔的博客
首页
  • 个人心法总结

    • 价值心法
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • iOS基础知识
  • 前端
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 投资体系
  • 毛选
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

洋仔

奋斗的小青年
首页
  • 个人心法总结

    • 价值心法
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • iOS基础知识
  • 前端
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 投资体系
  • 毛选
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 技术文档

  • GitHub技巧

  • Nodejs

  • 博客搭建

  • iOS基础知识

    • iOS底层相关

    • Runloop系列

    • Runtime系列

    • 内存管理系列

    • Block系列

    • 线程系列

    • KVC跟KVO系列以及通知中心

    • UI系列

    • 离屏渲染系列

    • 组件化系列跟架构

    • OC跟webview交互系列

    • 持久化系列

    • APP编译系列

    • APP性能优化系列

    • cocoapods系列

    • swift系列

    • Git系列

    • 网络相关

    • 三方库系列

    • 系统原理

    • 总结系列

      • 总结面试题有感
      • 面试
    • 算法系列

    • 数据结构系列

  • 前端

  • 技术
  • iOS基础知识
  • 总结系列
洋仔
2024-10-11

面试

一、面一

1、常用修饰符:

strong 强引用

Weak 循环引用

copy 修饰

Assign 基本数据类型

基本使用可以,互相切换使用可能造成的问题,不清楚。

2、内存方面

引用计数-散列表

小对象-有了解

3、分类原理

知道部分,解答的跟网络上的差不多,不准确。

4、启动优化(有了解,但是深度不够)

检测方向:工具+xcode 环境变量 (知道但是不知道具体变量名)

优化方向:pre-main和main函数之后

知道优化+load 但是不知道+load的具体作用。

知道优化动态库,但是不知道动态库不能合并。

知道干掉无用类,但是没说具体的检测方法。

知道二进制重排(hook 和 插装),原理知道一二,但是不知道具体如何做的。

5、对runtime有一定了解。

二、面二

  • Property本质。协议中使用property,不完全正确

  • weak/assign,尚可

  • dispatch_once原理不清楚

  • 列表优化,尚可

  • 约束:抗压缩、抗拉伸

  • load/initialize,有错误

  • 多线程使用,只熟悉GCD。

  • 锁不熟悉

  • 二进制重排不熟悉

面三、

底层原理:

1、类的加载

  • 加载时机,回到在main之前做的。回答错误。

  • +load方法,只用过hook,但是不知道其他作用。

2、消息转发机制

  • 能知道快速查找,慢速查找,然后三次转发。但是具体的快速怎么查找,慢速怎么查找就不清楚了。

3、类结构

  • 知道一些很久以前的结构。

业务使用:

1、常用修饰符,weak、strong、copy、assign使用和区别,回答的可以。集合类型可以区分何时使用copy和strong,知道用assign修饰对象会引发野指针。

2、frame 和bounds区别,坐标系不同。

3、block种类和使用注意事项

  • 知道循环引用,并用weak和strong搭配使用解决。

  • 知道三种类型,但是不太清楚没中类型的辨别。

  • 知道修改外部变量,全局或者静态直接修改,局部需要加__block.远离了解一些,但不深入

4、timer的使用和注意方式

  • 知道会造成内存泄漏,知道原因是RunLoop引用造成的,解决方案知道,但是不清楚是怎么做的。

5、分类的使用和注意事项

  • 知道分类方法的调用顺序,但是不准确。

  • 知道方法可以通过关联对象的方式添加属性。

  • 知道不能添加成员变量,是因为成员变量决定类分配内存的大小,动态改变会造成内存的错乱,这点理解的很好

面四

1结合runloop的状态来做启动优化 怎么从这个run loop的这个状态去监测他有没有卡顿 或者说他哪些东西占用时间太长。

加参数,真机上运行的话,它会把你每个阶段的那个耗时都给打印出来,run loop可以加一个observer,就是监听一下run loop的状态。

2 多线程

pthread

NSThread 可以查询线程状态、是否是主线程

Operation 依赖 / 最大并发数

GCD 方法多

DispatchQueue

3KVO实现

isa_swizzing

4动画的阶段,卡顿的原因,这些动画实际上有哪些优化的点

CPU负担过重,比如说计算这个frame或者是计算它的位置,或者是开辟空间,然后gpu去绘制它的那个,要么就阴影啊或者圆角啊,这些就是反正有一个时间耗长。

5.在iOS中,一张图片从磁盘加载到屏幕上的过程和可能的耗时

6.table view列表有哪些东西常见的耗时

然后在数据转模型的过程中,就把这个高度给计算好,然后这样的话,在方法里面直接把计算好的那个就是我们的行返回。

7.组件间的通信

8.列表的视频播放

9.H5和NA之间的通信方式

面五、

1、KVO

2、H5与NA之间的通信方式:不清楚,使用统一封装

3、OC和swift混合开发:介绍了swift和oc的差异,但是swift没有持续关注

4、多线程方面:使用 &了解的比较少,不清楚锁

5、App提交审核:不了解审核不通过的原因和解决方案

6、新技术适配:做过一些比较久了,现在的新的没太去了解

Strong:强引用,自定义一些属性,UI元素等,字符串可变用

Weak:弱引用,代理、Block场景解决循环引用

Copy:不可变字符串,不可变为啥用copy?Block

.包体积优化

1.二进制文件优化:无用类、方法、动态库、APPCode扫描删减

2.资源文件优化:图片无用资源删减、图片优化

  • 单例。有差错

  • 多线程。能说出GCD/NSOperation基本使用方式、差别;任务取消有偏差

  • 启动优化。主要思路清晰:pre-main/post-main。二进制重排、page fault

  • 组件化。有了解常规方案,私有Pod

  • load/initialize。能说明调用顺序及使用场景,编译顺序调整有偏差。

1.iOS属性的修饰符有哪些?怎么使用的?

strong:强引用

weak:弱引用

Assin:基本数据类型

readOnly:

原子性:默认原子性,一般使用非原子性

2.什么是循环引用?循环场景有哪些?怎么处理?不会造成循环引用的场景?

双重强引用

协议使用weak避免

Block是使用 weakSelf

NSTimer:

打破强引用环

GCD

UIView

AFN

SD

Masony

3.包体积优化

图片:无损压缩

三方库

Xcode工具检测

4.多线程编程技术有哪些?

GCD、NSOperation 常用

NSThread不常用

NSOperation:设置优先级、设置最大并发数、管理线程的生命周期

GCD:队列、栅栏函数、延迟执行

5.H5和NA之间的通信方式?

1.直接NA通讯

2.通过三方JSBridge

  1. 大图下载发生了OOM。如何排查与优化(降采样)

  2. ~~dispatch_once是线程安全的吗?它的实现原理是什么

  3. 用copy修饰可变数组会有什么问题

    说说retain、copy、assign、weak关键字的理解(回答OK)

  4. 讲一下atomic的实现机制;为什么不能保证绝对的线程安全(最好可以结合场景来说)?(回答OK)

  5. weak修饰的对象在被释放的时候自动置为nil的原理(回答OK)

  6. NSTimer和CADisplayLink的比较 ?(回答OK)

  7. 说说几种几种多线程方案以及它们的对比(回答OK)

  8. 性能优化相关:启动优化与卡顿优化(回答OK)

  9. 静态链接了解么?静态库和动态库的区别?

    • 谈谈对线程和进程的理解;chrome每一个tab窗口是线程还是进程;

    • 网络分层及每一层的作用,http协议在一层,他是基于什么协议实现的;

    • tcp是位于哪一层;tcp和udp区别;tcp握手有几次,可以可以精简次数;

    • 面向对象和面向过程语言区别;面向对象语言三个特性及理解;

    • 常见的数据有哪些。栈和队列区别,如何用队列实现栈~~

一.什么是线程和进程

进程是操作系统资源分配的基本单位

线程是CPU调度的基本单位

传输层协议

TCP:协议头、可靠、拥塞控制、流量控制、建立连接。

UDP:不可靠、数据包形式传输、实现广播。

TCP场景:需要可靠连接的场景

UDP:流式场景、视频会议

三、3次握手的必要性

1.客户端具有发送能力、服务端具有接收能力

2.服务端具有发送能力、客户端具有接受能力

3.服务端不知道客户端具有接收能力

  1. KVO的实现原理 ?如何手动触发KVO ?直接修改成员变量会触发KVO吗?(不了解)

  2. initialize和load方法的区别(不了解)

  3. 异步执行(async)一定会开启新的线程吗(不了解)

  4. 封装了很多第三方框架。问题:封装在什么场景下使用什么设计模式:常见的设计模式。(不了解)

  5. 简历里面提到优化 SDWebImage 导致的内存暴涨问题 ? 具体说说。为什么会出现。引申出:sdwebImage的几个问题:

(1). SD的缓存机制(回答OK,双缓存机制)。
(2). SD如何解决快速滑动,多张图片加载错乱问题。(不了解)
(3). TableView滑动下的下载处理

  1. 项目里面有做过iap。iap遇到过哪些问题 ,使用OC还是swift? 如何进行票据校验的。 如果后台需要将票据都存储起来做数据分析。你这边会如何设计。(IAP不知道是什么,就是做了简单的流程,续订的不太了解)。

  2. 图片加载过程(不了解)

  3. 什么是离屏渲染? 是不是设置圆角就一定会触发离屏渲染?(不知道什么是离屏渲染)

算法:
查找两个子视图的公共父视图(不会)

多任务按顺序依赖执行有哪些方式实现

常见的排序算法及原理

Charles 抓包原理

  • 设计一个图片下载器 (下载、缓存)、LRU实现原理

  • 快排原理、最好最差时间复杂度、 最差情况优化

  • 最长覆盖子串说出思路

  • 自定义类如何实现copy

  • 日志回捞 使用Hook简单打点

    Crash治理 增加了下页面路径等手段

编辑 (opens new window)
上次更新: 2024/10/23, 23:26:17
总结面试题有感
构建自己的算法体系

← 总结面试题有感 构建自己的算法体系→

最近更新
01
数组
10-25
02
数组双指针系列之对撞指针
10-25
03
数组双指针系列之快慢指针
10-25
更多文章>
Theme by Vdoing | Copyright © 2019-2024 Evan Xu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式