为了做好运维面试路上的助攻手,特整理了上百道 【运维技术栈面试题集锦】 ,让你面试不慌心不跳,高薪offer怀里抱!
这次整理的面试题,小到shell、MySQL,大到K8s等云原生技术栈,不仅适合运维新人入行面试需要,还适用于想提升进阶跳槽加薪的运维朋友。
本份面试集锦涵盖了
- 174 道运维工程师面试题
- 128道k8s面试题
- 108道shell脚本面试题
- 200道Linux面试题
- 51道docker面试题
- 35道Jenkis面试题
- 78道MongoDB面试题
- 17道ansible面试题
- 60道dubbo面试题
- 53道kafka面试
- 18道mysql面试题
- 40道nginx面试题
- 77道redis面试题
- 28道zookeeper
总计 1000+ 道面试题, 内容 又全含金量又高
- 174道运维工程师面试题
1、什么是运维?
2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?
3、现在给你三百台服务器,你怎么对他们进行管理?
4、简述raid0 raid1raid5二种工作模式的工作原理及特点
5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?
6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?
7、Tomcat和Resin有什么区别,工作中你怎么选择?
8、什么是中间件?什么是jdk?
9、讲述一下Tomcat8005、8009、8080三个端口的含义?
10、什么叫CDN?
11、什么叫网站灰度发布?
12、简述DNS进行域名解析的过程?
13、RabbitMQ是什么东西?
14、讲一下Keepalived的工作原理?
15、讲述一下LVS三种模式的工作过程?
16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?
17、如何重置mysql root密码?
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
* [2.3.禁用Read/Write Enables](#23ReadWrite_Enables_94)
* [2.4.不勾选其他辅助功能](#24_101)
* [2.5.调整网格压缩](#25_106)
* [2.6.使用LOD技术](#26LOD_113)
+ [3、字体](#3_120)
+ - * [3.1.区分字何功能](#31_121)
* [3.2.制作字体](#32_126)
- 二、代码部分
-
-
-
- 1.AssetBundle文件
* 2.建立对象池管理资源
* 3.留意装箱拆箱
* 4.事件注册移除
* 5.物体寻找
* 6.可见性设置
* 7.静态类
* 8.避免重复
* 9.数据类型
* 10.字串操作
* 11.使用枚举和常量
* 12.反射和动态
* 13.避免try catch
* 14.避免Camera.main找摄像机
- 1.AssetBundle文件
-
-
- 三、托管部分:
- 总结:
想拿《1024达人勋章》,帮忙点个赞,谢谢。
关于Unity性能优化
总结内存的优化主要分为以下三部分,资源,代码和托管。资源部分往往是大头,很多情况下都能占据工程的内存70%~80以上的大小,所以这一部分的优化至关重要。
一、资源部分:
1、图片
关于纹理主要检查以下几个部分:
-图片大小
-压缩格式
-导入设置
从性能优化的角度上看,图片的处理有以下几个事需要做:
1.1、 图片尺寸越小越好
按需求而定,在够用的情况下,越小越好。需要知道的是1024X1024的图片大小将是512X512的四倍,而不是二倍。如下图是1024大小3m,而512只有0.8m.
而然这只是图片大小,当使用时放到内存中将会进一步增大。
1.2、使用2N次幂大小
由于Unity对2的N次幂大小的图片处理更为友好,尽量使用此尺寸大小。
1.3、取消勾选Read/Write Enabled
当勾选此选项时,该图片将会在CPU中多存一份备份让CPU访问,如果没有读写需求可以请关闭此选项。
1.4、图片压缩
在你选压缩格式以前,Unity本身会对图片有一部分处理,转换为我们工程中使用的Texture 2D。
为什么转换好了格式还需要我们选择压缩的方式呢?因为Unity有个明显的优势即平台的通用与适配性。
因而对单一平台的处理会相对薄弱,而平台的性能优势又不尽相同。所以我们需要根据平台的来选择。
格式 | 内存占用 | 质量 | 透明 | 二次方大小 | 建议使用场景 |
---|---|---|---|---|---|
RGBA32 | 1 | 100% | 有 | 无需要 | 清晰度要求极高 |
RGBA16+Dithering | 1/2 | 80% | 有 | 无需要 | UI、头像、不带渐变、颜色不丰富 |
RGBA16 | 1/2 | 60% | 有 | 无需要 | UI、头像、不带渐变、颜色不丰富、不拉伸放大 |
RGB16+Dithering | 1/2 | 80% | 无 | 无需要 | UI、头像、不透明、不拉伸放大 |
RGB16 | 1/2 | 60% | 无 | 无需要 | UI、头像、不透明、不渐变、不拉伸放大 |
RGB(ETC1)+Alpha(ETC1) | 1/4 | 60% | 有 | 需要,可长宽不同 | 尽可能使用,不满足要求再考虑上列格式 |
RGB(ETC1) | 1/8 | 60% | 无 | 需要,可长宽不同 | 尽可能使用,不满足要求再考虑上列格式 |
PVRTC4 | 1/8 | 40% | 无 | 需要,长宽相同 | 尽可能使用,不满足要求再考虑上列格式 |
RGBA32通常作为一种高保真的压缩格式,质量好性能消耗大。
而RBGA16+Dithering可以理解为RBGA32的阉割版,色彩分级大,过度也不够顺滑。
最后ETC1+Alpha/PVRTC4则是移动端常用的压缩格式,性能上有明显的优势。
1.5、禁用多余的Mip Map
类似于模型的Lod(Level of Detail)技术,会根据距离远近来展示图片的精度。
可以节省部分性能,但Mip map会增大部分内存,因而UI则没有必要开启功能。
当一张Texture开启Mipmap后,占用的内存将会是原来的4/3.
1.6、合并图集
合并图集优化的是图片渲染中Draw Call数量,基本原理即是将会经常一起出现的图片合并成一张图,当需要渲染的时候就一起发送给GPU去渲染。
由于DrawCall是由CPU调用GPU的命令,从而可以提升CPU的性能表现。
通过Edit > Project Setting > Editor > Sprite Packer > Mode > Always Enabled(Legacy Sprite Packer)
然后图片上就可以通过Packing Tag命名来区分合并的包了
通过Windows > 2D > Sprite Packer 可以打开图集窗口 点击Pack即可合并
2、模型
模型的优化更多的是建模人员的内容,模型的规范等。
2.1.限制模型面数
我们知道模型的构成即是由一个个点连成三角面,再由一个个三角面堆叠而成的。
所以面数的多少在一定程度上会影响模型文件的大小,所以不能无限制的添加。
2.2.限制贴图的大小
贴图会影响到模型的精细度,因而也会一定程序上影响大小。具体原理参照上面的图片部分讲解。
这部分也是容易被忽略的部分。
2.3.禁用Read/Write Enables
这个和图片的有点类似,打开后也会在CPU中保留一份Mesh数据让脚本访问,
在游戏当不需要对模型进行操作的时候则关闭此选项。
默认是禁用的,优化时可以排查一下。
2.4.不勾选其他辅助功能
与Reader/Write Enables类似,基本上在Unity中都是需要消耗一定资源去维护的。
因为未明确功能及需求不要点开。
2.5.调整网格压缩
调整Mesh Compression,此选项可以调整模型网格的压缩率,降低精度,从而获得性能的提升。
调整Optimize Mesh: 默认勾选的,确定三角形的网格中列出的顺序,获得更好的性能。
调整Normal:是否导入法线数据,默认导入,如果不需要做光照处理可以关闭。
2.6.使用LOD技术
这个是Unity提供的一个基于距离来决定展示精细度的功能,模型需要准备好指定内容的高、中、低模。
距离近的时候展示高模型,远一些时候使用中模,最远使用低模。
但这个技术也有个缺点,会大大增加模型工作量,同时也会让工程的包体变的巨大。
3、字体
3.1.区分字何功能
字体包有的含有中、英文,而有的则只是有英文。这点也非常容易被忽略,
如果一个字体我们只需要用到英文部分则,则应当优先考虑使用只有英文字体的包。
3.2.制作字体
此外如果字体我们只需要用到其中的小部分字符,我们可以考虑使用BMFont等字体
制作插件,制作自己独有的字体,以减少资源的大小。
字体少则1m,大的有数十兆,个人认为这点非常重要。可以考虑和美术同学协同优化。
总体而言,资源部分在满足效果需求的情况下,应该越小越好。
二、代码部分
1.AssetBundle文件
AssetBundle加载后要使用Unload卸载镜像文件
AssetBundle文件下载后可以考虑存本地作为缓存
2.建立对象池管理资源
什么是对象池资源太多了,自行查阅吧 Y(^ _ ^)Y,这里不坠述了。
3.留意装箱拆箱
避免装箱拆箱操作比如yield返回值、Foreach、ArrayList等…
4.事件注册移除
-比方说,Button.onClick.AddListener()加载的按钮事件,使用后则需要使用:Button.onClick.RemoveListener()来移除。-Evnet中的+=事件,需要使用-=来移除
否则将因为内容一直被引用而点用,可能造成内存泄露。
5.物体寻找
避免 频繁大量
Find()或GetComponent()函数.因为他会在当前全场景中搜索,产生较高开销。
可以考虑使用MonoBehaviour脚本下挂载引导,以减少搜索次数。
6.可见性设置
在非静态类中,全局变量会在该类补实例化过程中占用资料,而非局部变量则会在方便使用过程中占用资源。
7.静态类
非静态类会在实例化后占用资料,而静态类则会在首次补调用后,在程序中一直存在。
因而不要过多的使用静态类。
8.避免重复
需要注意在Update或for等循环、递归结构中的资源使用。在这些结果中通常重复次数较多,则容易产生大量的资源使用。比如就不要在Update中不断的实例化、销毁物体,而因考虑使用对像池。
9.数据类型
刚开始学习的时候我也很不理解,既然int和float都能存放数字,为什么需要区分开?
后面才知道他们占用的空间是不同的。在够用的情况下,我们应当使用更清量级的数据类型。
同理,选择数组时也当如此。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
te或for等循环、递归结构中的资源使用。在这些结果中通常重复次数较多,则容易产生大量的资源使用。比如就不要在Update中不断的实例化、销毁物体,而因考虑使用对像池。
9.数据类型
刚开始学习的时候我也很不理解,既然int和float都能存放数字,为什么需要区分开?
后面才知道他们占用的空间是不同的。在够用的情况下,我们应当使用更清量级的数据类型。
同理,选择数组时也当如此。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!