这几天在准备找工作,拿出了以前的一些资料,整理了一下分享出来看看,一是方便自己查漏补缺,二来其中的大部分问题是自己理解概括的,有大佬如果看到有错误的地方能够评论交流一下自然是最好的啦!希望早点找到一个工作可以不用在家躺尸了......
以下开始归纳题目——第一部分
1.点乘与叉乘,几何意义及公式
点乘:计算投影和两个向量之间的夹角 |a||b|cos
叉乘:计算两个向量组成平面的法线方向,计算法线,可以计算出a向量与b向量组成的平行四边形的面积 |a||b|sin
2.以下代码的意图是什么?有没有什么问题?应该怎么写?
for(int i=0;i<10;i++)
{
if(list[i]==9)
{
list.RemoveAt(i);
}
}
超出索引值,因为在移除指定下标的元素后会丢失元素,所以索引最多只能到8,而不能到9,并且在遍历的时候不应该删除元素。
3.数组,List,ArrayList的区别
数组:在内存中是连续存储的,有下标,访问迅速,便于赋值以及修改数据,但是需要预先向内存申请指定的空间。
ArrayList:在ArrayList中插入不同类型的数据是允许的,将所有数据都转化为Object来使用,可能出现不匹配的问题,类型是属于不安全的数据结构类型,而且装箱和拆箱操作会导致性能受到很大的损耗。
因此导致了List诞生,也因此衍生了泛型的概念。
List:可以使用泛型来动态的指定对象的类型,减少了类型转换和运行时出错的可能性,动态地根据加入或减少的元素数量进行空间的删减,存储不是连续的,移除某个元素之后会导致后面的元素移动到前面。
4.有一个需求,要求体力每5分钟增加1点,可以通过int GetTimeStamp()函数获取当前时间戳,如何实现该需求,要保存什么数据,或者应当用什么方式来刷新体力。
时间戳:从1970年1月1日00点00分00秒开始至今的总毫秒数。
方法:通过记录上一次保存的时间戳,使用当前的时间戳与上次保存时的时间戳相减,得到的时间除以5分钟换算而成的毫秒数,得到中途经过了多少个5分钟,再增加体力值。
PS:如果需求改为在每天的0点更新(增加2点),则将此时的时间戳减去上次更新的时间戳,并且除以86400秒,则可以得到距离上次更新的时间戳的间隔时间为多少天,多一天则增加2点。
PPS:如果改为在每天的凌晨5点更新,则应该将此时的时间戳以及上次的时间戳都移除去5小时*86400秒,整体偏移5个小时的差别,则可以得到应该更新的次数,并且作出更新。
5.举例说明对象池的作用,设计一个对象池,应该具有哪些重要字段以及方法
对象池的作用:对象池能够节省创建和初始化所耗费的时间,简化对象获取和使用的过程,对于那些被系统频繁请求和使用的对象,使用这种机制可以使性能达到很大提高,是以空间来换时间的操作。
在C#中为了避免GC机制,对象池可以较好地节省消耗的资源。
重要字段有:对象池所使用的对象,能用来判断当前对象是否在使用的flag标签
重要方法有:保存方法,对象池中所使用的保存当前对象的方法,取出对象并且使用对象的方法,都是需要有的。
6.LinkedList是什么?优缺点是什么?用途是什么?
LinkedList是链表