达达面试题

达达面试题

达达面试题

1.深拷贝、浅拷贝区别。数组里放对象,copy 数组,是深拷贝还是浅拷贝?数组里对象的指针是一样的吗?

  • 浅拷贝:指针拷贝,不会创建一个新的对象。对指向对象的指针拷贝,产生一个新的指向对象的指针。两个指针指向同一个对象。对象的引用计数+1;

  • 深拷贝:内容拷贝,会创建一个新的对象。深拷贝就是拷贝地址中的内容。

深拷贝和浅拷贝的本质是内存地址是否相同。

copy 可变数组是深拷贝。copy 不可变数组是浅拷贝。数组里对象的指针是一样的。

copy mutableCopy
NSString NSString 浅拷贝 NSMutableString 深拷贝
NSMutableString NSString 深拷贝 NSMutableString 深拷贝
NSArray NSArray 浅拷贝 NSMutableArray 深拷贝
NSMutableArray NSArray 深拷贝 NSMutableArray 深拷贝
NSDictionary NSDictionary 浅拷贝 NSMutableDictionary 深拷贝
NSMutableDictionary NSDictionary 深拷贝 NSMutableDictionary 深拷贝

2.布局使用 Masony 还是 Xib

3.StatefulWidget、StatelessWidget 区别

  • Widget 是部分界面的不可变的描述信息。
  • StatelessWidget 和 StatefulWidget 没有本质区别,他们的所有属性都是不可变的。它们都没法更新,除非用一个新的 Widget 去替换它们。
  • StatefulWidget 拥有一个可变的 State。

StatefulWidget 和 StatelessWidget 的区别在于可变的 State。本质区别是能否自我重新构建(self rebuild)。

StatelessWidget和StatefulWidget区别

参考链接:简书-StatelessWidget和StatefulWidget的区别

4.UITableView、UICollectionView 的调用流程区别

5.常用的 pod 命令

pod init: 创建 Podfile 文件。

pod install:会根据 podfile.lock 文件中指定的 pod 依赖库的版本去拉去项目的 pod 依赖库。

pod install --no-repo-update: 协作开发时使用此命令可以根据 podfile.lock 文件限制第三方库的版本。

pod update:这个命令会检查 podfile.lock 文件中的 pod 依赖库的版本,并进行更新,会重新生成一个 podfile.lock 文件。

pod repo add NAME URL[branch] :添加 pod 源。

pod search:搜索可以使用的 pod 依赖库。

pod list:列出所有项目依赖仓库中的 pod 依赖库。

pod repo:用来管理 pod 依赖仓库的地址。

pod spec:管理 pod 规范。

pod env:来打印出 pod 的环境,一般是 podfile 文件中的内容。

pod cache:管理 cocoapod 的缓存:可以用来清空内存,也可以用来查看每个 pod 库的缓存。

制作私有库使用

pod lib create [仓库名]:在本地创建一个基于 pod 模板的 git 仓库。

pod lib lint:pod 本地库验证,验证 .podspec 文件是否有错。

pod repo add NAME URL[branch]:添加自己的 pod 仓库。

pod spec lint:pod 远程库验证。

pod repo add xxx https://gitxxxx :放置 spec 文件的 git 仓库地址,给自己添加私有仓库。

pod repo push 索引库名 podspec文件名:命令执行会先将 pod 索引添加到本地的索引库,然后会自动推送到远程的索引库。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Commands:
+ cache Manipulate the CocoaPods cache
+ deintegrate Deintegrate CocoaPods from your project
+ env Display pod environment
+ init Generate a Podfile for the current directory
+ install Install project dependencies according to versions from a
Podfile.lock
+ ipc Inter-process communication
+ lib Develop pods
+ list List pods
+ outdated Show outdated project dependencies
+ plugins Show available CocoaPods plugins
+ repo Manage spec-repositories
+ search Search for pods
+ setup Setup the CocoaPods environment
+ spec Manage pod specs
+ trunk Interact with the CocoaPods API (e.g. publishing new specs)
+ try Try a Pod!
+ update Update outdated project dependencies and create new
Podfile.lock

6.图文混排有没有做过,有没有内存、性能问题

参考链接:简书-iOS开发之富文本(图文混排)

7.写过哪些脚本,有没有写过函数,按顺序执行的函数。

bugly、Fastlane、切换 SDK 配置文件

参考链接:菜鸟教程- Shell 教程

8.闪退捕获,Flutter 错误捕获

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void main() {
// Flutter framework 异常捕获
FlutterError.onError = (FlutterErrorDetails details) {
bool isDebugMode = false;
assert(() {
isDebugMode = true;
return true;
}());
if (isDebugMode) {
FlutterError.dumpErrorToConsole(details);
} else {
//profile,release两个模式下下捕捉异常信息
reportFrameworkError(details);
}
};
// 其他类型异常
runZoned(
() => runAutoSizeApp(MyApp(), width: 375, height: 667),
onError: (dynamic ex, StackTrace stack) {
reportError(ex, stack);
},
);
}

参考链接:Flutter异常捕捉原理和异常上报

9.埋点是怎么做的?页面上的某一个 view 的停留时长怎么统计?

10.性能优化、图片加载优化、安装包大小优化做了啥,没用到的代码或图片有写脚本来检查吗?

  • 未使用的代码可以用 AppCode 来检测。

  • 未使用的图片可以用 LSUnusedResources 来检测。

12.界面渲染流程、UIView 渲染流程,有没有做过异步绘制?

UIView的绘制原理

系统绘制流程

异步绘制时序图

13.解决遇到的线程问题描述一下,在子线程刷新 UI 会怎么样?

14.有没有做过组件模块化?

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×