2020-06-18 面试总结

1.实现一个计算器 输入1+2 输出 1+2=3,注意扩展,以及面向对象,设计模式
这是个好问题,当时感觉时间不够,说明平时基础设计还应再努力思考,实现输入分割方法,但是没有之后拼接运算,面试后使用两个栈(运算符,操作数)实现运算,判断运算符优先级再弹栈。
设计模式应该主要是Operator的工厂模式,说了,但是不记得工厂模式的具体实现。其实很简单 Factory类,Operator父类,具体Operator类;Factory类根据String Switch返回具体Operator类。Operator类定义num1,num2操作。
那么为啥用工厂模式,它和外部或者我写在的CalcBrain(帮助类)里有什么不一样?
高端名词:依赖倒置原则,也就是高层不依赖低层代码。也就是说其实我加一个具体Operator类,我的Brain不用做什么就能支持了。 。。。这还是很难的,后来接着写的时候,就在想运算符优先级的问题,括号还是很难的。。。 可以能原题没这么复杂

2.MRC 函数返回值 autorelease释放时机
还需深入研究 简单的说是 nsrunloop 循环结束时

3.CAAnimation子类都有哪些
这个问题问的少。。。
CAAnimation是所有动画对象的父类

image.png

这篇文章说的很详细:
https://www.jianshu.com/p/d3dc740b97a8

4.都有哪些队列,自定义队列和globel队列区别
这个问题之前遇到过一次,网上查答案较难,stackOverFlow:https://stackoverflow.com/questions/51754147/in-gcd-when-do-i-use-a-global-concurrent-queue-vs-a-custom-concurrent-queue
四点:
1.可以指定label方便调试
2.能够 暂停队列 dispatch_suspend(queue); dispatch_resume(queue); globel队列dispatch_suspend没反应
3.Set and get app-specific data 这个没理解,试了下 设置 globel_queue 也可以设置context
4.提交栅栏任务上有区别:
dispatch_barrier_async 设置是global queue时,不阻塞,直接接着做提交到queue的block任务,
dispatch_barrier_async 设置是自定义 queue时 阻塞
dispatch_barrier_sync 设置是global queue时,阻塞接着做提交到queue的block任务,因为提交的线程被阻塞了
dispatch_barrier_sync 设置是自定义 queue时 阻塞

总结:
还是要不放过技术细节,还好最近远程面试,容易想起面试题。虽然好多东西在实际开发没有太多价值。

你可能感兴趣的:(2020-06-18 面试总结)