|
发表于 2022-9-20 08:59:41
|
显示全部楼层
最近老大在一顿面试,招聘小弟,然后今天收到了一份8分的卷子(总分100分),这让她怀疑起自己的卷子,顺手就把卷子扔给我,让我测试一下,看看是不是卷子出难了。我揣摩了一下出题人的意图。凉了,老大想开我!!这是两年前测试我的卷子,我又做了一遍,emmm,50、60分吧,完了我要被开除了,赶紧补一下基础。。。想要面试的同学赶紧补起来。 一、 操作系统
1. (5分) 堆和栈的区别
①申请速度:
- 栈的申请速度较快,但却不受程序员的控制;
- 堆的申请速度较慢,容易产生内存碎片,但是用起来比较方便
②申请大小:
- 栈申请的容量较小1-2M
- 堆申请大小虽受限于系统中有效的虚拟内存,但较大
③存储内容
- 栈主要保存线程代码的执行位置和一些调用代码的数据
- 堆主要保存对象和数据
④管理者
- 栈自我管理
- 堆,由项目脚本运行时的内存管理器(Mono或IL2CPP)管理。
自己的记忆口诀:手动堆,自动栈
【拓展】怎么确定数据分配到了哪个内存区?怎么确定数据分配在栈还是堆上?
两个原则
- a.值类型和指针总分配在被声明的地方,声明在哪儿就分配在哪儿
- b.非空引用类型对象和所有装箱值类型对象总是分配在堆内存上
【拓展】值类型一定分配在栈上吗?
不对。
如果声明在函数的局部变量,就分配到线程栈中;
如果声明在一个class类中,就分配在堆内存中 <hr/>2. (5分) 协程和线程有什么区别。
先理清楚一个概念:
一个进程可以有多个线程
一个线程可以有多个协程 ①多线程
- 线程是并行的,多个线程可以同时运行。
- 协程是串行的,在任何一个时刻,同一线程中的协程,只有一个协程在跑。
②开销
- 协程不需要多线程的锁机制。不存在同时写变量冲突。
- 协程执行效率高,协程是单个线程执行,以子程序中断的形式切换,没有多线程切换的开销。
③管理
- 线程需要由内核调度,不受程序管理
- 协程由程序员自己管理,不受内核调度
<hr/>二、语言基础
1. (5分) ArrayList和List之间的主要区别是什么?这两种类型有什么优缺点?
区别:ArrayList不安全,需要装箱拆箱,List类型安全,支持泛型,不用装箱拆箱效率高。
2、(5分)下面代码有什么问题,为什么?0分
class A
{
public int value1 = 0;
};
class B : A
{
public int value2 = 99;
};
A pa = new A();
B pb = new B();
A a = pb;
B b = pa;
B b = pa;这个赋值操作会报错因为父类型无法显示转化成子类型,编译的时候就会报错,A类型无法隐式转换成B,就算改写成B b = (B)pa;,也会报错
InvalidCastException: Cannot cast from source type to destination type.
A a = pb;不会报错,因为b就是从A继承出来的,所有值都能保留 3. (15分)用你熟悉的任意语言输出以下内容

看到题目,不要冲动,分析完再下手,老大说当年是看在我这题做对了才让我进来的,然后现在我做错了,完了,退步了,面临就业危机emmm 这题就是打印九九乘法表
几个注意点就是:内外层循环分别要输出什么,然后注意换行
先用伪代码输出一遍,
外层循环i,遍历[1,9],每次i=+3
内层循环j,遍历[1,9],每次i=+1,然后输出输出9行,3个一换行,所以每行分别输出i+1的乘法和 i +2 的乘法 void WriteMutiplicationTable()
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
for(int i = 1; i <= 9; i+=3)
{
for(int j = 1; j <= 9; j++)
{
string formatStr = &#34;{0}*{1}={2}\t{3}*{1}={4}\t{5}*{1}={6}\r\n&#34;;
sb.Append(string.Format(formatStr, i, j, i * j ,i + 1,(i + 1)* j,i+2,(i + 2) * j));
}
sb.Append(&#34;\t\t\t\r\n&#34;);
}
Debug.Log(sb);
}
三、Unity基础
2、(5分) Unity的ScrollRect由哪些组件组成?描述一下ScrollRect的实现原理。
todo 研究一下
3、(5分) DC是什么?UI界面的DC受哪些因素影响?
Draw Call就是CPU调用图形编程接口,比如DirectX或OpenGL,来命令GPU进行渲染的操作。
影响DC因素:材质、图集、深度、Alpha = 0 四、三维几何
1. (5分) 简单说一下,向量的点乘、叉乘的几何意义。

向量的点乘:a · b = |a| * |b| * cosθ

点乘的几何意义:
- 计算两个向量之间的夹角,判断这两个向量是否垂直。
- 计算一个向量在另一个向量方向上的投影长度。
向量的叉乘:a ∧ b = |a| * |b| * sinθ

点乘的几何意义:
- 在三维几何中,向量a和向量b的叉乘结果是一个向量,更为熟知的叫法是法向量,该向量垂直于a和b向量构成的平面。
- 在二维几何中,叉乘还有另外一个几何意义就是:aXb等于由向量a和向量b构成的平行四边形的面积。
在3D图像学中,叉乘的概念非常有用,可以通过两个向量的叉乘,生成第三个垂直于a,b的法向量,从而构建X、Y、Z坐标系。如下图所示:

<hr/>2. (15分)如下图,已知L向量和单位向量N,向量N和向量P垂直,求P向量
(注意N是单位向量,不可以使用三角函数)

这题我是真的不会。。。因为我前面这道几何意义的题没答对,只是背下来了,没有理解。
解答:(我现在查了一下,再做一遍)
求的是P向量,根据向量的点积几何意义,向量L点乘向量N可以得到向量L在N上的投影长度
len = L·N 那么N * len得到有大小的N矢量,然后根据矢量相加,就可以得到P向量
P = L + N * len
P = L + N * (L · N)
参考
Unity内存问答笔记
用大白话讲进程和线程、协程的区别 - 简书
unity_scroll_rect |
|