peropero面试
基础差(主要是拷打八股文)1.协程原理以及底层实现Unity协程核心本质都是迭代器 + 状态调度。 总结:Unity 协程的底层本质上就是“迭代器 + 状态机调度”机制。它依赖 C# 的 IEnumerator 接口和 yield return 语法实现,当我们通过 StartCoroutine() 开启一个协程时,Unity 并不会创建新线程,而是把这个协程注册到主线程的调度系统中执行。编译器会把带有 yield return 的协程函数自动转换成一个状态机类,这个类会保存协程执行时的上下文信息,比如当前执行到哪一步、局部变量的值以及当前等待条件等。当协程运行到 yield return 时,会先暂停当前执行,并把等待信息返回给 Unity;之后 Unity 在合适的时机继续调用这个迭代器的 MoveNext() 方法,使协程从上一次暂停的位置继续往下执行,直到函数执行结束或再次遇到新的 yield return。因此,协程本质上仍然是在主线程中分段执行的函数,它能够把逻辑拆分到多个帧里完成,但不能真正解决耗时计算造成的主线程阻塞问题。 2. 调度器的 “心跳” 作用协程不会自...
Lua面试学习
1.Table表基本原理: 在lua中不存在字典,列表等数据类型,同时也不存在class与struct等数据类型,所有的这些类型都是基于Table表实现的。 lua是关联性数据结构,可以使用任意类型的值来表示索引,但不可以是nil lua是不固定大小的数据结构,可以自动进行扩容 如果在table中允许nil存在,他是会占一个索引位 {}相对于匿名table,如果判断一个table是否为nil,不能直接进行与{}比较,因为相对于2个table,而非空。if next(data) == nil then end进行判断 12345678910111213141516171819202122--数组(如果使用Table表来实现数组,默认索引是从1开始的,但是可以指定元素索引。并且lua中的数组中元素类型可以不相同)--在lua中的#是取出数组长度,但是遇见nil会直接停止,不会获取后序的元素local Mytable = {1,3,"av",1.2,true}Mytable["123"] = "123...
设计模式
以下是 10种设计模式 的完整技术实现方案,包含 类图(PlantUML)、应用场景、核心代码,按结构化方式组织: 工厂模式:封装对象创建逻辑,客户端无需知道具体类。 策略模式:定义可互换的算法族,运行时动态切换。 装饰器模式:动态扩展对象功能,避免继承层次过深。 组合模式:统一处理单个对象和对象集合,形成树形结构。 观察者模式:一对多依赖关系,状态变化自动通知所有依赖对象。 状态模式:对象行为随内部状态改变而变化,避免条件分支。 中介者模式:封装对象间交互,降低直接耦合。 单例模式:确保一个类只有一个实例,并提供全局访问点。 代理模式:控制对目标对象的访问,增强功能(如缓存、权限)。 享元模式:共享细粒度对象,减少内存开销(如字符、图形复用)。 模板方法模式:定义算法骨架,子类重写特定步骤而不改变结构 一、组合模式(Composite)想表示对象的部分-整体层次结构希望用户用一致的方式处理个体对象和组合对象。 类图 ———————————————————————————————————————————————————————————————- 核心代码123456789...
note-87
./tools/build-test.sh 先看看就好。 docs/algorithms/solitaire docs/algorithms/sudoku 核心是我这个库 会有测试驱动重点关注算法开发,算法测试你如果能够在widdows上让./tools/build-test.sh 运行起来,基础能力基本过关了
谷歌Play注册要求
谷歌Play注册要求 一个全新的Gamil账户:如果是用作企业相关,建议为企业邮箱 一张支持外币支付,并且未绑定过其他谷歌开发者账户的信用卡VISA/MasterCard 个人账户:身份证正反面照片 企业账户:营业执照,邓白氏编码,公司地址和电话 鸿蒙注册要求 注册和实名认证的手机号和邮箱 个人账户:身份证信息 企业账户:营业执照,公司地址和电话 谷歌play的注册流程(科学上网) 准备一个全新的Goggle邮箱 进入Goggle Play Console官网 登录Goggle账户:选择公司还是个人账户。(后续不可更改,个人账户无法升级为企业账户) 填写详细信息: - 开发者名称:显示在Goggle Play应用商店的名称 - 联系信息:包括邮箱,电话,地址(需要验证) - 企业账号专属:邓白氏编码 填写经验与应用信息:根据实际情况填写是否具有PlayConsole使用经验,计划发布的应用数量和应用类别 同意协议和支付:阅读开发者协议,支付一次性25$注册费 等待账号审核 因为我的账户是个人账户,所以谷歌检测为个人账户,建议使...
Xml
数据持久化数据持久化是指将应用程序中的临时数据(如游戏进度、玩家设置等)永久保存到存储设备(硬盘、SD卡等)中的过程,以便在应用程序关闭后再次启动时能够恢复这些数据。 Xml 固定语法 1<?xml version="1.0" encoding="UTF-8"?> <!--版本和编码格式--> 在C#中读取XML文件的方法在C#中,你可以使用多种方式读取XML文件。以下是几种常用的方法: 1. 使用XmlDocument类(传统方式)1234567891011121314151617181920212223242526using System.Xml;// 创建XmlDocument对象XmlDocument xmlDoc = new XmlDocument();// 加载XML文件xmlDoc.Load("path/to/your/file.xml");// 获取根节点XmlNode root = xmlDoc.DocumentElement;// 遍历节点foreach (XmlNod...
PlayerPrefs
数据持久化数据持久化是指将应用程序中的临时数据(如游戏进度、玩家设置等)永久保存到存储设备(硬盘、SD卡等)中的过程,以便在应用程序关闭后再次启动时能够恢复这些数据。 PlayerprefsPlayerPrefs是Unity提供的一个简单的键值对存储系统(键:string类型,值: int float string),用于在游戏会话之间保存和加载玩家偏好设置或简单游戏数据。它是Unity中最基础的数据持久化解决方案,是Unity提供的可以用于存储玩家数据的公共类 轻量级存储:适合存储少量简单数据(如设置、分数等) 跨平台:在所有Unity支持的平台上工作 自动持久化:数据会保存在设备本地 三种数据类型:支持int、float、string三种基本类型 关于Playerprefs最基础的用法是直接使用Set方法进行数据的存储,但是在运行的过程中只会存储在内存中,需要在结束时,Unity会自动将其存入硬盘中。如果游戏运行的过程中崩溃,那么则不会存储在硬盘中。可以使用自带的Api,Save方法进行自动存储。 12345678910using UnityEngine;public ...
2进制
字符串类型以及非字符串类型转换为字节数组分别使用BitConverter类和Encoding类进行转换 12byte[] bytes = BitConverter.GetBytes(1); //非字符串byte[] bytes1 = Encoding.UTF8.GetBytes("11111"); //字符串 字节数组转为其他类型的数据 12int i = BitConverter.ToInt32(bytes,0); string str = Encoding.UTF8.GetString(bytes1);//这个字符数组全是字符串 对于如何将类序列化,不能直接使用C#中的BinaryFormatter进行2进制的序列化,因为是C#语言的规则与其他语言的兼容性不好,如果使用它那么其他语言开发的服务器无法进行反序列化,使用需要自定义处理类对 文件写入以及创建12345678910111213141516FileStream fs = File.Create(path);//创建文件------------------------------------...