├── Interview.md └── README.md /Interview.md: -------------------------------------------------------------------------------- 1 | 2 | ## 得物 3 | 4 | KVO will change value什么时候调用 5 | 6 | CocoPod install和update有什么区别 7 | Pod文件干嘛用的 8 | lock文件是干嘛用的 9 | [造成死锁的四个条件](https://blog.csdn.net/jyy305/article/details/70077042?utm_source=app&app_version=4.14.1) 10 | 自旋锁和递归锁的区别 11 | Nslock是什么锁 12 | Nslock里面加Nslock 13 | atomic 安全吗?用的什么锁 14 | 信号量里面加信号量有什么问题 15 | 监听卡顿怎么监听的,为什么在beforewaiting 16 | 为什么在主线程刷新UI 子线程也可以刷新UI 17 | runloop 是一个循环吗 18 | 在main中 子线程调用不会执行 19 | FMDB用的什么线程 20 | weak怎么处理 21 | weak属性什么时候销毁 22 | 自动释放池原理,自己写auto release和不写autoreleas有什么区别 23 | 并行 串行 信号量是什么锁 24 | 字典用的什么hash表 25 | hash碰撞怎么解决的,放在减1的位置, 26 | 为什么 打包用的ipa是怎么加壳 27 | 一个字典里面存储10000个数据,怎么快速找到 28 | Nsoperation里面的KVO是怎么监听的,源码看过吗 29 | Afnet取消是怎么处理的,这个时候可能服务器有响应,或者没响应 30 | 31 | 2.0和3.0区别 内存怎么分,有堆栈。。。 32 | 实现一个读写锁 runloop 的三个阶段 33 | 34 | ## B站面试 35 | 36 | 锁忘了释放,怎么办,怎么处理,比如oc的try cache 37 | 38 | __block 多线程 HTTP2.0加了什么东西 39 | 40 | 下面代码有什么问题 41 | #import int main(int argc, const char * argv[]) { //变量存在寄存器中 @autoreleasepool { __block NSObject *obj = nil; dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INTERACTIVE, 0), ^{ while (YES) { NSLog(@"%@", [obj description]); } }); while (YES) { obj = [NSObject new]; NSLog(@"new obj"); } } return 0; } 42 | 43 | ##阿里 44 | 大数据存储 45 | 用事物 46 | 国密算法 都有哪些 47 | 48 | ##平安 49 | mutableCopy进行自定义对象拷贝 50 | 为分类添加关联属性,怎么添加一个weak的 属性默认的是atomic 51 | 字符串用等号可以判断吗 相同字符串,创建地址相同 52 | 计算属性,可以节省资源 53 | 当第一次调用的时候,会调,如果属性里面的值一直不变,则计算属性不会再调用 54 | 55 | ##百度 56 | 内存管理,引用计数,什么时候不是0 57 | 一个ip地址,怎么转成int,且,可以变回字符串 58 | AFN和原生的请求有什么区别 内存管理 weak修饰可选型 unown修饰非可选型,有区别的 59 | 60 | ##哈罗面试 61 | 62 | autorelease 什么时候释放 63 | 64 | 点击事件扩大范围 65 | 事件响应 66 | GCD怎么取消 67 | autorelease和runloop什么关系 68 | 69 | Https 是怎么通信的 70 | 71 | Block里面什么时候要强引用一下 72 | 73 | __weak 和__strong 一定要成对出现吗? [举个例子](https://www.jianshu.com/p/fe772a3536ca) 74 | 75 | 抓包需要证书吗? 76 | 怎么抓取微信的包 77 | 78 | Https 安全吗? 不安全怎么办 79 | 80 | 81 | ## 哈罗二面 82 | 83 | KVO是多线程的吗,同步还是异步 84 | 大量数据对一个属性观察,有什么问题 怎么实现一个埋点 85 | 86 | ## 识货 87 | 自己实现一个异常的捕获 88 | html怎么调用oc 底层怎么实现的 89 | Swift中的RAC 不管是哪个vc怎么获取viewdidload方法 90 | 用方法交换 怎么让父类的initial方法不调用 奔溃有几种方式 91 | 92 | ## 中通一面: 93 | 94 | AFN的缓存 怎么存储的 【AFNetworking的缓存机制】https://mbd.baidu.com/ma/s/cky7ZwnW 95 | 96 | [关于AFNetworking的缓存机制](https://mbd.baidu.com/ma/s/9KDRqHLu) 97 | 98 | LRU缓存和 NSCache怎么存储的 99 | 100 | 101 | 怎么去中断一个线程 https://jingyan.baidu.com/article/d169e18658875a436611d8f4.html 102 | https://www.jianshu.com/p/cbe3945b7316 coreData 中怎么创建主键 103 | //https://blog.csdn.net/iCloudEnd/article/details/108089925 coreData 没有主键的概念 104 | CoreData 多线程 105 | https://www.jianshu.com/p/283e67ba12a3 106 | 107 | 读写文件 时,读和写都不安全吗 108 | 109 | ## 京东 110 | 111 | c语言 const* 和 *const 112 | 当在最前面的时候,表示指针不允许被改变,值可以改变. 113 | const NSString * nameFir = @"test"; 114 | 当在中间的时候,同上 NSString const * nameSec = @"test"; 115 | 当在最后的时候,表示指针可以被改变,但是值不能改变(最常用) NSString * const nameThi = @"test"; 116 | 经验总结 const右边最近的内容不可以被改变. 117 | c语言,结构体和共同体 118 | bss段 https://www.jianshu.com/p/2d4acf4a53f9 119 | 内存分为5个区域,分别指的是----->栈区/堆区/BSS段/数据段/代码段 栈:存储局部变量,当其作用域执行完毕之后,就会被系统立即收回 120 | 堆:存储OC对象,手动申请的字节空间,需要调用free来释放 121 | BSS段:未初始化的全局变量和静态变量,一旦初始化就会从BSS段中回收掉,转存到数据段中 122 | 数据段:存储已经初始化的全局变量和静态变量,以及常量数据,直到结束程序时才会被立即收回 123 | 常量区:存放常量字符串,程序结束后由系统释放 124 | 代码段:存放函数的二进制代码,直到结束程序时才会被立即收回 125 | 126 | int和NSinteger有什么区别 127 | NSInteger会自动识别当前电脑系统是32位还是64位数,然后自动返回最大的类型(int还是NSInteger)。例如,当前电脑为32位系统,你声明的NSInteger自动变为int。当前电脑为64位系统,你声明的NSInteger还是NSInteger。 128 | 所以32位系统,int的长度等于NSInteger的长度;64位系统,int的长度小于NSInteger的长度;也就是说NSInteger的长度一定是大于等于int的长度的。 129 | 知道了这个原理,当你不知道电脑的系统是几位,并且你正在声明一个整形变量,你一定要使用NSInteger,不要使用int,你可以当成一种规范。记住:在多数情况下一定尽可能的使用NSInteger。 130 | 重定向码是多少,放在那个字段里面 重定向,300-399,放在location字段 131 | 为什么4次挥手 132 | 133 | 内存管理,引用计数,什么时候不是0 134 | 一个ip地址,怎么转成int,且,可以变回字符串 135 | 136 | AFN和原生的请求有什么区别 137 | 138 | 内存管理 139 | weak修饰可选型 140 | unown修饰非可选型,有区别的 141 | 142 | oc调is 143 | 144 | 要先注册 145 | 二 我们在控制器中初始化WKWebView,注册方法. 146 | 147 | 1.初始化 148 | 149 | ```objectivec 150 | //创建网页配置对象. 151 | WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init]; 152 | //是使用h5的视频播放器在线播放, 还是使用原生播放器全屏播放 153 | configuration.allowsInlineMediaPlayback = YES; 154 | //设置视频是否需要用户手动播放 设置为NO则会允许自动播放 155 | if (@available(iOS 10.0, *)) { 156 | configuration.mediaTypesRequiringUserActionForPlayback = YES; 157 | } else {} 158 | //设置是否允许画中画技术 在特定设备上有效 159 | configuration.allowsPictureInPictureMediaPlayback = YES; 160 | //设置请求的User-Agent信息中应用程序名称 iOS9后可用 161 | configuration.applicationNameForUserAgent = @"ChinaDailyForiPad"; 162 | 163 | //自定义的WKScriptMessageHandler 是为了解决内存不释放的问题. 164 | WeakWebViewScriptMessageDelegate *weakScriptMessageDelegate = [[WeakWebViewScriptMessageDelegate alloc] initWithDelegate:self]; 165 | //这个类主要用来做native与JavaScript的交互管理 166 | WKUserContentController * wkUController = [[WKUserContentController alloc] init]; 167 | //注册一个name为jsToOcNoPrams的js方法 设置处理接收JS方法的对象 168 | [wkUController addScriptMessageHandler:weakScriptMessageDelegate name:@"jsToOcNoPrams"]; 169 | [wkUController addScriptMessageHandler:weakScriptMessageDelegate name:@"jsToOcWithPrams"]; 170 | configuration.userContentController = wkUController; 171 | 172 | //创建设置对象. 173 | WKPreferences *preference = [[WKPreferences alloc]init]; 174 | //最小字体大小 当将javaScriptEnabled属性设置为NO时,可以看到明显的效果 175 | preference.minimumFontSize = 0; 176 | //设置是否支持javaScript 默认是支持的 177 | preference.javaScriptEnabled = YES; 178 | //在iOS上默认为NO,表示是否允许不经过用户交互由javaScript自动打开窗口 179 | preference.javaScriptCanOpenWindowsAutomatically = YES; 180 | configuration.preferences = preference; 181 | 182 | self.webView = [[WKWebView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height) configuration:configuration]; 183 | //UI代理. 184 | self.webView.UIDelegate = self; 185 | //导航代理. 186 | self.webView.navigationDelegate = self; 187 | //是否允许手势左滑返回上一级, 类似导航控制的左滑返回. 188 | self.webView.allowsBackForwardNavigationGestures = YES; 189 | 190 | (滑动显示更多) 191 | 192 | autolayout 与frame区别 193 | 194 | 值类型
属性包装器 195 | 196 | 怎么判断对钩手势 197 | assign修饰,释放不了,出现野指针 198 | 199 | 状态机 200 | 201 | 【iOS开发笔记之七十三——基于状态机的页面构建方案_iOS开发笔记-CSDN博客_ios 状态机】https://blog.csdn.net/lizitao/article/details/81055648 202 | 203 | 关联库 204 | 205 | 设计一个app,架构上 206 | 点击H5会调原生的方法,原理是因为拦截 207 | 要先注册 208 | 209 | https://mp.weixin.qq.com/s/iFEfgzU1g9RghFb9rpLHCg 210 | 211 | 212 | left和leading 区别 213 | 在中国 ,left和leading是一样的,但是在阿拉伯,leading相当于right 214 | 215 | 三等分一个view 216 | 217 | Swift 218 | 219 | 逃逸与非逃逸注意点 220 | MVVM 221 | MVVM的作用就瘦身吗 222 | 二进制重拍 223 | 线程同步,使用锁 224 | 检测存在uiwebview 用逆向 225 | Grep 226 | block获取的是地址值吗 227 | 228 | 229 | nsurlsession 和nsurlconnection 区别 230 | 231 | 232 | 设计一个malloc 和release 233 | 234 | UIGraphicsBeginImageContextWithOptions(contentSize, NO, [UIScreen mainScreen].scale); 235 | CGContextRef content = UIGraphicsGetCurrentContext(); 236 | 237 | 238 | UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); 239 | UIGraphicsEndImageContext(); 240 | CFRelease(path); 241 | 242 | http 缓存 243 | Cache-control 244 | 245 | copy自定义对象?如何拷贝大的数据量 246 | 使用归档 247 | 248 | 如果对象很多或者层级很多,实现起来还是很麻烦的。如果需要实现完全复制同样还有另有一种方法,那就是归档: 249 | 250 | 251 | 252 | UI问题,tableciew有3个半,那一共有几个 253 | copy很多数据 254 | 方法不让别人用,报错,怎么写代码 255 | 256 | 组件化,使用字典会有很多字符串(硬编码) 257 | 258 | 怎么优化,传递模型? 259 | 260 | ,Swift 261 | Json转Model 262 | 263 | https://juejin.cn/post/7019910939340193805 264 | 265 | 面试 266 | 267 | https://juejin.cn/post/7006273689675120677 268 | 269 | lazy遇到的问题 270 | 271 | https://juejin.cn/post/6844903571209584653 272 | 273 | 没故事的桌同学 Swift Collection 中的 lazy 作用 274 | 275 | 276 | https://juejin.cn/post/6844903566772027406 277 | 278 | 279 | 全局队列有2个枚举
 280 | 竞争和非竞争 281 | 282 | http 3次握手之前做什么 283 | DNS 转ip 284 | 285 | 286 | 瀑布流 287 | 288 | 锁怎么工作的 289 | Runloop 有几种不同状态,会退出吗 290 | 291 | Hook方法注入是动态库,那系统是如何调用我们的方法的 292 | 293 | 如何交换c语言的方法 294 | 检测FPS 295 | Socket和HTTP区别 296 | 交换oc方法,但是要自己写的方法和交换的方法都执行,怎么处理 297 | imp和sel区别,和Select有什么区别 298 | OC如何实现多继承 299 | 300 | 301 | 给一个数字,怎么判断有没有2个要找的数, 302 | 303 | 304 | socket和http区别: 305 | HTTP协议:简单对象访问协议,对应于应用层 ,HTTP协议是基于TCP连接的 306 |   tcp协议: 对应于传输层 307 |   ip协议: 对应于网络层 308 |   TCP/IP是传输层协议,主要解决数据如何在网络中传输;而HTTP是应用层协议,主要解决如何包装数据。 309 |   Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,才能使用TCP/IP协议。 310 |   http连接:http连接就是所谓的短连接,即客户端向服务器端发送一次请求,服务器端响应后连接即会断掉; 311 |   socket连接:socket连接就是所谓的长连接,理论上客户端和服务器端一旦建立起连接将不会主动断掉;但是由于各种环境因素可能会是连接断开,比如说:服务器端或客户端主机down了,网络故障,或者两者之间长时间没有数据传输,网络防火墙可能会断开该连接以释放网络资源。 312 | 313 | 314 | mmap 315 | 316 | 熟悉fastlane的工具 317 | 318 | 319 | 点击一个按钮,runloop 怎么走的 320 | 321 | 322 | Masonry有什么缺点,时间复杂度是多少 323 | 324 | 网络访问ip 325 | 目标ip和源ip会有变化吗 326 | 327 | 328 | 329 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 2021_Interview 2 | 2021_Interview 3 | --------------------------------------------------------------------------------