老虎国际

老虎国际

1.组件化,怎么通信的,有没有公共数据,组件传值,多个组件都可以修改这个值 值变化时通知到另一个组件

2.SDK 体积优化,构建提效,为啥构建那么久

3.IM 页面复杂吗?底层怎么实现的?IM 从数据库读出来的和接口拉回来的数据怎么合并,有冲突了怎么办?IM 的异常场景,发送失败之类的

4.SSE 直接更新 UI 和其他方式

5.鸿蒙遇到的问题,有没有鸿蒙版本的问题,用的是 V2 还是 V1

算法:

从4个算法题中选择,要求用 OC 或 Swift 实现,用飞书运行

1.子串是否是回文子串

2.数组是否是调性数组

参考答案

1.组件化,怎么通信的,有没有公共数据,组件传值,多个组件都可以修改这个值 值变化时通知到另一个组件

共享数据模型:

单例 + Notification

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// SharedModel.h
@interface SharedModel : NSObject
@property (nonatomic, copy) NSString *value;
+ (instancetype)shared;
@end

// SharedModel.m
@implementation SharedModel
+ (instancetype)shared {
static SharedModel *instance;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [[SharedModel alloc] init];
});
return instance;
}
@end

// 修改值时发通知
[SharedModel shared].value = @"new value";
[[NSNotificationCenter defaultCenter] postNotificationName:@"SharedValueDidChange"
object:nil
userInfo:@{@"newValue": [SharedModel shared].value}];

// 监听值变化
[[NSNotificationCenter defaultCenter] addObserverForName:@"SharedValueDidChange"
object:nil
queue:[NSOperationQueue mainQueue]
usingBlock:^(NSNotification * _Nonnull note) {
NSLog(@"值变化: %@", note.userInfo[@"newValue"]);
}];

单例 + KVO

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 监听
[[SharedModel shared] addObserver:self
forKeyPath:@"value"
options:NSKeyValueObservingOptionNew
context:nil];

// 回调
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object
change:(NSDictionary<NSKeyValueChangeKey,id> *)change
context:(void *)context {
if ([keyPath isEqualToString:@"value"]) {
NSLog(@"值变化:%@", change[NSKeyValueChangeNewKey]);
}
}

单例 + Block 回调(自定义)

你也可以在 SharedModel 里维护一个回调列表,当值修改时手动调用回调。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
typedef void(^ValueChangeBlock)(NSString *newValue);

@interface SharedModel : NSObject
@property (nonatomic, copy) NSString *value;
@property (nonatomic, strong) NSMutableArray<ValueChangeBlock> *observers;
+ (instancetype)shared;
- (void)addObserver:(ValueChangeBlock)block;
@end

@implementation SharedModel
+ (instancetype)shared {
static SharedModel *instance;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [[SharedModel alloc] init];
instance.observers = [NSMutableArray array];
});
return instance;
}

- (void)setValue:(NSString *)value {
_value = [value copy];
for (ValueChangeBlock block in self.observers) {
block(value);
}
}

- (void)addObserver:(ValueChangeBlock)block {
[self.observers addObject:[block copy]];
}
@end

// 使用
[[SharedModel shared] addObserver:^(NSString *newValue) {
NSLog(@"值变化了:%@", newValue);
}];
[SharedModel shared].value = @"hello";

2.SDK 体积优化,构建提效,为啥构建那么久

3.IM 页面复杂吗?底层怎么实现的?IM 从数据库读出来的和接口拉回来的数据怎么合并,有冲突了怎么办?IM 的异常场景,发送失败之类的

4.SSE 直接更新 UI 和其他方式

5.鸿蒙遇到的问题,有没有鸿蒙版本的问题,用的是 V2 还是 V1

算法:

从4个算法题中选择,要求用 OC 或 Swift 实现,用飞书运行

1.子串是否是回文子串

2.数组是否是调性数组

Your browser is out-of-date!

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

×