SP专场问题整理(一)

1.C#中协程的原理是什么?线程和协程的区别是什么?协程的底层实现原理是什么?如果同时运行多个协程需要注意什么?

进程是系统资源分配的最小单位,线程是任务调度的最小单位,可以理解协程是一种用户态的轻量级线程,它提供了由程序员来控制的何时开启并在何时暂停的机制。

协程拥有自己的寄存器上下文和栈,协程调度切换时,会将当前的寄存器上下文和栈保存在另一个地方,在切换回来的恢复之前的寄存器上下文和栈,由于是直接操作栈,所以性能高效。

线程的执行涉及到同步与锁的问题,然而协程本身不是多线程,它和update函数一样在主线程中执行,完成等待时间或者某个操作结束后再执行后面的代码。

协程本身就是一个大的迭代器,每次yield return相当于add了一个新的对象,同时该迭代器的moveNext()函数可以继续往后执行,所以就继续迭代,直到moveNext返回false则curent为空,协程结束。

本质上说,协程不是多线程,不需要考虑同步和锁的问题,但是如果同时调用多个协程可能会让程序执行的过程变的混乱,这个时候如果想让协程按特定顺序执行,可以使用stopCoroutine来暂停协程以让某个协程先执行。

2.给类的成员函数加const的意义是什么?

class String{private: string s1; public: void func(string s) const {}},这个意义在于不能在该函数中修改类的数据成员的值。既然不需要该函数对数据成员进行修改,我们应该告诉编译器它的权限所在,以防止可能的修改,这也是一种值得提倡的编码习惯。

3.lua元表的概念以及元方法__index和__newindex的区别?

元表实现了table之间的操作,改变两个table之间的行为,为一个表设置另一个表为该表的元表(metatable),当这另一个表实现了__index方法后,在表中索引时,找不到则会去元表中查找。如果是实现的__newindex则当查找不存在的索引时,会调用__newindex方法,而不会加入新的键值对。

4.进程通信的方式有哪些?

5.什么是内存泄漏,如何防止内存泄漏,如何检测内存泄漏,什么是智能指针?

6.解决哈希冲突的常用方法有哪些?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值