面试经历存档(六)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

最近秋招热门,因为本人自身的专业是地图制图学与地理信息工程,目前在考公、找企业直接纠结,海投了也海投了不少,为了提升自己的面试经验,总结面试的经验教训,并且为之后的面试打基础,特此写下该系列博文,以供自己随时查阅。继之前的五家公司,今天又来到了湖南长沙参加中国电建中南院的面试。主要是本科同学也在这家单位,所以顺便来老友重聚一下。

一、中国电建中南院

中国电建集团中南勘测设计研究院有限公司( 简称“中南院”) 始建于1949 年,是世界五百强企业中国电力建设集团有限公司的重要成员企业。公司总部位于湖南省长沙市,在粤港澳大湾区、华东、华北、华中、西部5个区域建立了区域总部,同时在浙江、江苏、山东、福建、安徽、海南、雄安新区等24地设立分支机构。在亚太、欧亚、东南亚、中西非、中北非、美洲设立了海外区域总部。公司是全国首批取得设计综合甲级资质的14家单位之一,也是目前湖南省唯一一家设计综合甲级设计企业,是全国同时拥有工程勘察综甲、工程设计综甲和工程咨询综甲三项最高级别资质和资信的10家单位之一。
中南院面向国内、国际两个市场,国内业绩遍布全国所有省份,同时在全球40多个国家先后承接了200余项国际工程,在国内外市场树立了卓越的品牌形象和口碑。公司经营格局涵盖技术服务(含规划、勘测、设计、科研、咨询、监理、检测、监测、水情测报、招标代理等)、工程承包(含EPC、设备成套、岩土施工等)、投资运营三大板块,业务领域涉足水电水利工程、新能源工程、水环境治理与生态保护工程、市政交通与建筑工程四大行业,形成了以水利、电力勘测设计及工程承包建设为核心,涉及公路和轨道交通、市政、房屋、水生态环境治理等领域综合发展的“大土木、大建筑”的多元化经营格局。
至于这里的工作环境和工作强度薪酬什么的,根据我在知乎上和听同学的描述,感觉还是可以的。


二、面试经历

0.到场

因为他这里是线下面试,所以我还需要跑到长沙那边去面试。不过中南院在一个大酒店提供了住宿(可以单人住也可以和你一块来面试的小伙伴一起住),住宿环境还可以,有电视床也软,空间也大。

1.等待

等待这一项属实是有一些折磨,因为要求我们早上八点五十签到,九点开始面试,但是刚开始一个人要面三十分钟,我这过去签到的14号简直等麻了,最终快一点才面试到我,不过好歹是提供了盒饭。

2.面试经历

Q1:开头依然是很经典的自我介绍,这个我也不过多赘述了。

Q2:Cesium中的primitive和entity有什么区别?

A2:在Cesium中,Primitive和Entity是两个不同的概念。Primitive是Cesium中的低级别图形元素,例如Billboard、Label和Polyline等。而Entity是基于Primitive构建的高级别对象,用于管理一组相关的可视化对象。一个Entity可以表示一个感兴趣点或移动车辆,而这个Entity可能包含多种不同类型的Primitive:标签Primitive、广告牌Primitive、路径/折线Primitive等。通常情况下,Cesium团队建议尽可能使用Entity,因为它们更直接地对应于现实世界中的对象。但是,Primitive API是公共的,并且可用于更低级别的图形显示控制。¹
(1) What is difference between Entity and Primitive in Cesiumjs?. https://stackoverflow.com/questions/34727726/what-is-difference-between-entity-and-primitive-in-cesiumjs.
(2) Cesium Primitive and Entity APIs - Google Groups. https://groups.google.com/g/cesium-dev/c/rMJQHIJ6MKU.
(3) Cesium | 海量点的加载与性能优化 - 掘金. https://juejin.cn/post/6972420331982028837.
(4) Primitives versus Entities - CesiumJS - Cesium Community. https://community.cesium.com/t/primitives-versus-entities/7112.

在Cesium中,Entity和Primitive的性能表现是不同的。Entity是基于Primitive构建的高级别对象,用于管理一组相关的可视化对象。Entity通常比Primitive更易于使用,因为它们更直接地对应于现实世界中的对象。但是,Entity通常比Primitive更消耗资源,因为它们需要更多的计算来处理它们所管理的所有Primitive。相比之下,Primitive API是公共的,并且可用于更低级别的图形显示控制。当需要绘制大量Primitive时,可以将它们合并为单个Geometry,以减轻CPU负担并更好地使用GPU,从而提高性能¹²³.

(1) Entity 和 Primitive 的区别 - 掘金. https://juejin.cn/post/7066831569599594527.
(2) Cesium: Primitive vs Entity_primitive 自定义material_没法取名字了的博客-CSDN博客. https://blog.csdn.net/appleshowc/article/details/123479194.
(3) Cesium | Primitive图元介绍及与Entity对比 - 掘金. https://juejin.cn/post/6974592888420171790.
(4) cesium 笔记-自定义Primitive - 知乎. https://zhuanlan.zhihu.com/p/389962991.

Q3:你简述一下Cesium中的渲染流程?

在Cesium中,渲染管线是一个核心概念,它描述了从加载原始数据到最终在屏幕上绘制像素的整个过程。以下是Cesium渲染管线的主要步骤:

  1. Scene Initialization(场景初始化):这是渲染管线的起点,包括创建场景、相机、光源等基础对象。

  2. Loading and Preparing Data(加载和准备数据):在这个步骤中,Cesium会从服务器加载所需的数据,包括地形、影像、模型等,并将这些数据转换为适合渲染的格式。

  3. Culling(剔除):剔除是一个优化步骤,目的是减少需要渲染的对象数量。Cesium会根据相机的位置和方向,剔除在当前视图中不可见的对象。


ps.在Cesium中,剔除(Culling)是一种优化技术,用于在渲染场景时排除不可见的对象。剔除技术仅是不渲染不可见的对象,而不是真正地将它们从浏览器缓存中剔除。这意味着即使对象被剔除,它们仍然会占用浏览器缓存中的空间。因此,如果您需要释放浏览器缓存中的空间,请考虑使用其他技术,例如LOD(Level of Detail)和批处理(Batching)。

  1. Rendering(渲染):这是渲染管线的核心步骤,包括以下子步骤:

    • Execute Commands(执行命令):Cesium会根据对象的类型和属性,生成一系列的渲染命令,并按照特定的顺序执行这些命令。
    • Fragment Operations(片元操作):这包括深度测试、模板测试、混合等操作,用于处理像素的颜色和透明度。
    • Frame Buffer Operations(帧缓冲操作):这包括把渲染结果写入帧缓冲区、应用后处理效果等操作。
  2. Post-Processing(后处理):在这个步骤中,Cesium会对渲染结果进行一些额外的处理,例如添加光照、阴影、环境光遮蔽(AO)等效果。

  3. Display(显示):最后,Cesium会把渲染和处理后的图像显示在屏幕上。

这就是Cesium的渲染管线的基本流程。需要注意的是,这个流程可能会根据具体的应用场景和需求进行一些调整和优化。

Q4:简述一下过程中什么是光栅化?

WebGL是一个在浏览器中实现3D图形的API,它基于OpenGL ES 2.0,可以提供硬件加速的3D渲染能力。以下是WebGL的基本渲染过程:

  1. 初始化WebGL上下文:首先,我们需要在HTML的canvas元素上获取WebGL上下文。

  2. 准备着色器和程序:WebGL使用两种类型的着色器,顶点着色器(Vertex Shader)和片元着色器(Fragment Shader)。顶点着色器主要负责处理3D模型的顶点信息,如坐标变换等。片元着色器则负责处理像素级别的渲染,如颜色、纹理等。这两种着色器需要用GLSL(OpenGL Shading Language)编写,并在WebGL中编译和链接为一个程序(Program)。

  3. 创建和加载缓冲区:WebGL使用缓冲区(Buffer)来存储顶点数据(如位置、颜色、纹理坐标等)和索引数据。我们需要创建这些缓冲区,并把数据加载到其中。

  4. 设置状态和绑定数据:在渲染之前,我们需要设置一些WebGL的状态,例如启用深度测试、设置混合模式等。同时,我们还需要把缓冲区的数据绑定到程序的属性上。

  5. 绘制:最后,我们调用drawArrays或drawElements方法进行绘制。WebGL会根据当前的程序和状态,以及绑定的数据,执行渲染管线,并把渲染结果输出到帧缓冲区。

  6. 显示:WebGL会把帧缓冲区的内容显示在canvas元素上。

以上就是WebGL的基本渲染过程。需要注意的是,这个过程可能会根据具体的需求进行一些调整和优化。例如,我们可能会使用帧缓冲对象(Frame Buffer Object)进行离屏渲染,或者使用着色器程序(Shader Program)进行后处理等。

***光栅化(Rasterization)***是一种在计算机图形学中常见的渲染技术,它是将矢量图形转换成像素表示的过程。在WebGL中,光栅化是一个核心步骤,它将几何图形(如三角形、线段等)转换为像素图像。

具体来说,光栅化过程可以分为以下几个步骤:

  1. 顶点着色:每个几何图形由一系列的顶点定义。顶点着色器(Vertex Shader)会处理每一个顶点的信息,这包括顶点的位置、颜色、纹理坐标等。这些信息将用于后续的光栅化过程。

  2. 图元装配:将处理过的顶点组装成图元(如点、线段、三角形等)。

  3. 光栅化:在这个阶段,图元会被转换成一个或多个片元(Fragment)。每个片元对应屏幕上的一个像素。光栅化过程会确定哪些像素位于图元内部,这些像素将被进一步处理。

  4. 片元着色:片元着色器(Fragment Shader)会处理每个片元,确定最终的颜色和其他属性。

  5. 混合:如果多个片元映射到同一个像素,那么这些片元的颜色需要进行混合,以确定最终的像素颜色。

WebGL的光栅化过程是在GPU上执行的,这意味着它可以处理大量的顶点和片元,从而实现复杂的3D图形渲染。

Q5:简述一下Cesium中移动entity的过程?

在Cesium中,你也可以使用矩阵来移动物体。矩阵在计算机图形学中常用于变换,包括平移(移动)、旋转和缩放。

Cesium提供了Cesium.Matrix4类来表示4x4的矩阵,这是3D空间中常用的矩阵大小。你可以使用Cesium.Matrix4.fromTranslation方法来创建一个平移矩阵,然后使用Cesium.Matrix4.multiplyByPoint方法来应用这个矩阵到一个点上。

以下是一个简单的示例:

// 创建一个实体
var entity = viewer.entities.add({
    position : Cesium.Cartesian3.fromDegrees(0.0, 0.0, 0.0),
    point : {
        pixelSize : 10,
        color : Cesium.Color.RED
    }
});

// 创建一个平移矩阵
var translation = Cesium.Cartesian3.fromElements(100000.0, 0.0, 0.0); // 100000 meters to the east
var matrix = Cesium.Matrix4.fromTranslation(translation);

// 应用矩阵到实体的位置
var newPosition = Cesium.Matrix4.multiplyByPoint(matrix, entity.position.getValue(Cesium.JulianDate.now()), new Cesium.Cartesian3());
entity.position = newPosition;

在上述代码中,首先创建了一个实体并将其位置设置为经度和纬度均为0的位置。然后,创建了一个平移矩阵,这个矩阵将物体向东移动100000米。最后,将这个矩阵应用到实体的位置上,从而将实体移动到新的位置。

注意,Cesium的坐标系统是右手坐标系,所以x轴向东,y轴向北,z轴向上。

Q6:


3.结束

虽然等待面试的过程非常折磨,不过面试出结果还是非常的快的,当天晚上就出结果了(在此再次diss一下之前武汉面试的中南电力设计院,一个多月一点消息不回复的),第二天就可以去体检了,办事效率来说还是杠杠的,而且酒店是提供的两天住宿,还有中午晚上可在酒店吃,总的来说就是只需要出个车票,然后就可以在长沙玩一玩。

总结

最终呢我也还是不太确定要不要接这个offer,因为现在长沙的房间也有点上涨,都说是1w多其实是1.5w多(想要上下班十分钟走路的话),然后工资不高,加班随缘,领导PUA等等都是国企常态了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值