面试总结1

设计模式多总结几种

1 单例模式

主要是为了避免常用类的频繁创建和销毁
定一个全局变量的入口,用于访问该类

2 工厂模式

子类实现接口,父类主要用于接口定义和供外部的调用

3 建造者模式

多个简单的类,构建成一个复杂的类型。(类比,套餐和单品的关系)

4 观察者模式

类存在一对多的关系, 当这个类对象被修改的时候, 自动通知所依赖他的类

5 mvc , mvp , mvvm类型

view ,controller 和model层
mvc: 单向链接
在这里插入图片描述

Mvp :可双向访问
在这里插入图片描述

mvvm: view和viewmodel层次可自动根据变化更新
在这里插入图片描述

把常用的排序在多记几种

交换排序:

冒泡排序:

前后两个做对比,小的放前面,大的放后面,依次循环几次

快速排序:

先取出最小的排,然后在从剩余的里面找到最小的排在已经排好的序列后面

插入排序

简单插入

假设第一个已经拍过了, 然后从剩下的序列里拿出一个,和已经拍好的序列,从后往前做比较,插入到合适的位置

希尔排序:先把序列分成若干的子序列,分别进行简单插入排序,排好之后在整体进行简单插入排序

原理:
一个无序的数组,
设置一个间隔n,每次间隔n取一个数字,然后把这些数组进行分组,分别进行插入排序。
再设置一个间隔m, m是小于n的也可以是 m=n/2, 然后再次进行插入排序
间隔依次递减,最终间隔为1的时候, 在最后进行一次插入排序。
完成排序
基本有序的数组,进行插入排序的效率更高,越有序,时间复杂度越接近O(n)
1.当数组长度很大时,使用插入排序有个弊端,就是如果最小值排在很末端的时候,插入排序需要从末端开始,逐个往前比较到第一个位置,很低效。而希尔排序通过分组的方式,直接让前端跟末端的元素进行比较,解决了插入排序的这个弊端。
2.在希尔排序中,一个数组在进行了n-排序之后,再进行更细化的k-排序,这个数组仍然是满足n-排序的,所以这个数组是越来越有序。
3.当一开始 增量n 很大的时候,每一个子数组的元素很少,所以对每个子数组用插入排序进行内部排序是很高效的;而后随着增量n不断减小,这个数组是越来越有序的,此时使用插入排序也是很有利的。
所以希尔排序会比插入排序更快,而且数组的大小越大,提升越明显。

选择排序

归并排序

把序列分成n/2个子序列,先让子序列有序,然后,排好的子序列合并成最终的一个序列

快速排序

选择一个基准,把小于的放基准的前面,大于的放后面,然后对这两部分在分别进行快速排序

哈希map和哈希set的区别

哈希map:
HashMap是实现Map;接口的一个实体类,它对键值做了一对一的映射关系,当然里面键值不能重复。Map接口提供三种collection视图,允许以键集、值集或键-值映射关系集的形式查看某个映射的内容。映射顺序定义为迭代器在映射的collection视图上返回其元素的顺序。某些映射实现可明确保证其顺序,如TreeMap类;另一些映射实现则不保证顺序,如HashMap类。
哈希set:
HashSet是实现Set;接口的一个实体类,数据是以哈希表的形式存放的,里面的不能包含重复数据。Set接口是一种一个不包含重复元素的collection。

双向链表的实现

Struct Node{
    Int Data;
    Node PreN;
    Node NextN;
}

如何判断链表是否有环?

1 快慢指针
2 哈希set表

cpu优化

1 DrawCall 2 物理组件 3 GC

优化方式:
1 Drawcall:合批处理
动态合批:场景中使用相同材质的游戏对象,并且满足一些列条件,会自动进行动态合批
静态合批:场景中不会动的游戏对象,勾选static的属性,会进行静态合批。通过消耗内存的方式,缓存网格信息,提高渲染效率
2 物理组件:
结合效果和效率考虑fixupdate的处理内容
不要使用网格碰撞器(mesh collider)
3 GC
触发条件
·堆上内存不足的时候
·手动调用
优化方式
·频繁调用的类,做缓存
·删除不用的代码接口
·update中检测控制,减少开销

动态合批条件

一个游戏对象的总顶点数量小于900 (如果你的着色器使用顶点位置,法线和UV值三种属性,那么你只能批处理300顶点以下的物体;如果你的着色器需要使用顶点位置,法线,UV0,UV1和切向量,那你只能批处理180顶点以下的物体。 )
2 不使用缩放。 缩放的(scale不是1,1,1)会合批, 不缩放的合批(scale是1,1,1)
3 使用不同材质会打断合批
4 静态合批过的网格会打断合批
5 受到不同前向光源处理会打断合批

热更原理

本地存储一个bundlelist , 内容是 版本号,资源列表

1 本地bundlelist和服务器的bundlelist 对比版本号, 本地的小于服务器的就需要更新

2 解析bundle的资源,本地和服务器的对比,
名字路径相同的,对比哈希值,哈希值不同,则需要更新。
如果服务器的资源中有,本地没有的,说明是新增资源需要更新
3 有更新的话,用服务器的bundlelist文件,替换本地的

图片的压缩格式, 和原理

1 Etc1的压缩原理:
没有被压缩的图片,如果是一个44 大小一块区域,那么他需要的内存是 :44*(38)
如果是ect1 4
4的压缩方式的话, rgb rgb tf+ 颜色修正表。大小的话: 444
压缩倍数 大概是原来大小的六分之一
不带透明通道
2 ect2 : 压缩原理差不多,带透明通道
后续整理一篇有关图片压缩格式原理的文章吧~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值