Unity3d面试题(每天五个)

1.什么是TCP什么是UDP?
 

TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。
UDP (User Datagram Protocol 用户数据报协议)是OSI(Open System Interconnection开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。


两者的区别:
第一种:
TCP面向连接,在发送数据之前,需要客户端和服务器之间建立连接,而UDP不需要实时连接,在每次传输时根据IP和端口号将报文发送给指定的用户。
TCP中有数据安全校验,更为安全和复杂,能够保障数据正确的传输,且有重发机制,能提供可靠的传输。
UDP结构较为简单,开销小,传输速度快,但不保证传输数据的正确性,因此UDP的传输不可靠。
但随着网络的不断升级,数据在传输过程中差错率已大大降低,UDP可以一对多的传输,且其程序开销小,传输速度快,因此其应用也越来越广泛。

第二种:

1.TCP提供的是面向连接的、可靠的数据流传输;UDP提供的是非面向连接的、不可靠的数据流传输。
2.TCP提供可靠的服务,通过TCP连接传送的数据,无差错、不丢失,不重复,按序到达;UDP尽最大努力交付,即不保证可靠交付。
3.TCP面向字节流;UDP面向报文。
4.TCP连接只能是点到点的;UDP支持一对一、一对多、多对一和多对多的交互通信。
5.TCP首部开销20字节;UDP的首部开销小,只有8个字节。
6.TCP的逻辑通信信道是全双工的可靠信道;UDP的逻辑通信信道是不可靠信道。





2.MeshRender中material和sharedmaterial的区别?

修改material仅仅是改变当前游戏对象在缓存中拷贝的材质数据,因此仅对当前游戏对象造成影响。
如果修改shareMaterial则是修改引用Assets中的原材质信息,因此会对所有使用该材质的其他游戏对象造成影响。

3.你用过Soscket通信吗?简单描述一下Socket通信 

 

Socket是网络套接字,包含ip地址和端口号,两个主机之间通过套接字进行连接和传输数据。

4.简述下对象池,你觉得在FPS哪些东西适合使对象池

对象池是指在Unity开发中使用列表的方式存储一组对象,在需要用到时从列表中拿出对象进行使用,不需要该对象时,就将其设置为隐藏状态,这样就可避免重复性的创建和销毁对象,减少了内存消耗,也优化了程序的执行效率。
在FPS游戏中,频繁使用的子弹对象可以放入对象池中进行管理。

5.GameObject和Transform和关系  以及如何处理网络延时造成的丢包,粘包,半包问题

每个GameObject对象身上都有一个Transform组件,Transform组建可调节对象在3D世界中的位置信息,以及控制对象的旋转和缩放,是游戏对象比不可少的组建。

解决方案1:在数据包中添加长度的方式,即在数据包中的固定位置封装数据包的长度信息,服务器接收到数据后,先是解析包长度,然后根据包长度截取数据包,但是有个小问题就是如果客户端第一个数据包数据长度封装的有错误,那么很可能就会导致后面接收到的所有数据包都解析出错,需要开发者对接收到的有问题的包进行人为的丢弃处理(客户端有自动重发机制,故而在应用层不会导致数据的不完整性)

解决方案2: 可在数据尾部添加结尾符,标志一个数据包的结束
即我们在封装要传输的数据包的时候,采用固定的符号作为结尾符(数据中不能含结尾符),这样我们接收到数据后,如果出现结尾标识,即人为的将粘包分开,如果一个包中没有出现结尾符,认为出现了分包,则等待下个包中出现后 组合成一个完整的数据包,这种方式适合于文本传输的数据,如采用/r/n之类的分隔符

 

你可能感兴趣的:(Unity3D)