线程同步的几种方式
1.信号量pv操作
2.互斥加锁
3.条件变量
五层网络协议指的是哪五层
1.应用层
2.运输层
3.网络层
4.链路层
5.物理层
TCP和UDP区别
tcp 面向连接,保证发送顺序,速度慢,必须在线,三次握手,4次挥手
udp 不需要连接,适合直播推流,速度快,对方可能丢包
深度缓存的作用
shader是什么,简述工作原理
mipmap是什么,有什么优缺点?
根据距离的远近决定物体绘制时候选择的贴图纹理
优点:更低的像素分辨率,减轻渲染压力
缺点;占用更多内存,增大打包存储
OpenGL常用缓存buffer
Frame Buffer
Depth Buffer
Color Buffer
Stencil Buffer
https://www.cnblogs.com/ArsenalfanInECNU/p/18001468
shader透明公式
协程和线程的异同
协程通过迭代器每隔一段时间看一眼是否满足条件,根据条件决定是否进行到协程的下一句,协程依旧在主线程上运行
在一个完整的生命周期中,有哪些协程参与工作,如果有,是在哪几个阶段?
update yield retur null
lateupdate yield return waitforendframe
fixedupdate yeidl return waitforfixedupdate
FishManager是一个单例类,且这个单例可能被多个线程引用,完成类的定义
public class FishManager
{
// 私有静态变量用于存储单例实例
private static volatile FishManager _instance;
// 锁对象用于同步线程
private static readonly object _lock = new object();
// 私有构造函数防止外部实例化
private FishManager()
{
// 初始化代码
}
// 公共静态方法用于获取单例实例
public static FishManager Instance
{
get
{
// 第一次检查:如果实例已经存在,则直接返回
if (_instance == null)
{
// 进入同步块之前再次检查实例是否已经被创建
lock (_lock)
{
// 第二次检查:确保在进入锁之后没有其他线程创建了实例
if (_instance == null)
{
_instance = new FishManager();
}
}
}
return _instance;
}
}
}
写出下列代码的输出结果
a={[1]="a1",[2]="a2",[3]="a3",[5]="a4",[6]="a5"}
for key,value in pairs(a) do
print(key,value)
end
删除链表中的第n个节点
求出包含重复元素的整数数组的所有可能得子集
class Solution {
public:
vector<vector<int>> subsetsWithDup(vector<int>& nums) {
// 时间复杂度O(N*2^N),空间复杂度O(N)
vector<vector<int>> ans;
vector<int> path;
sort(nums.begin(), nums.end());
dfs(nums, 0, path, ans);
return ans;
}
void dfs(vector<int>& nums, int idx, vector<int> &path, vector<vector<int>> &ans) {
if (idx == nums.size()) {
ans.push_back(path);
return;
}
path.push_back(nums[idx]);
dfs(nums, idx + 1, path, ans);
path.pop_back();
// 如果不选当前数,则后面和这个数相同的数都要跳过
while (idx + 1 < nums.size() && nums[idx] == nums[idx + 1]) ++idx;
dfs(nums, idx + 1, path, ans);
}
};
用一段Lua代码实现类的继承
用lua代码启动一个协程,并在1秒后输出’666’
Lua代码怎么避免内存泄露,说说你的理解
闭包内的变量不使用了就置为nil