面试分享:四年 .NET 开发(苏州斯莱克)

前言

作者经过三年的职业空白期,带着四年 .NET 开发的经验再次踏上面试之路。这次的目标是苏州斯莱克公司,一个充满机遇和发展空间的地方。在这篇文章中,作者分享第三次面试经历,包括准备过程、面试过程中的挑战以及我对未来的展望。

现在就业的确崩了

这次面试的时间是8月28号。距离上一次面试已经过去了一个月了,距离开始找工作已经过去了2个月。没多少找工作经验的我也体会到了什么叫就业崩了。看了一线码农的采访计划后,我也把苏州列为了找工作的地方之一。我成都感觉公司都翻烂了

  • 要么工资高,15000,但要求开发测试运维一条龙,什么.netcoredevopsCICD单元测试集成测试scrum敏捷开发,k8s前后端分离RabbitMQRedis微服务全整上。我CICD,单元测试这些部分有学习,但也没项目用过,敏捷开发除了外企常见,还有哪能接触?上不去,真的上不去。

  • 要么就是工资相对高,12000左右,搞工业开发这一块,但是要有经验,我始终插不进去脚。

  • 要么就是工资低8000甚至9000起步,我寻思这是应届生?跟我工资没差我跳过去干什么

我发觉我目前这个目前这个技术阶段还挺尴尬的。技术和经验说深不深,说浅不浅,到底是上不能上,下不得下。这次面试的公司是苏州史斯莱克精密设备,其基地应该是位于太湖边上的孙武路。HR介绍该公司是清华毕业的华人创建,我在想该不会是高华润人吧?主要业务是易拉罐瓶盖生产设备制造。近年来开始设计新能源汽车的电池盖。据说的技术迁移应用。面试前,HR首次询问的工资,我回答的是14万一年。初试是腾讯视频线上会议面试,商定在晚上6点半。一个应该是业务经理,一个技术工程师,年龄均偏大吧,可能有40多了。技术工程师提问

1、首先是我做自我介绍

我叫XX,今年27岁,20年毕业与西南石油大学。毕业之后就一直在目前这家XX公司。所学的专业是软件工程。在这边基本上一直在做软件开发。前期在做运维,大概一年之后转向开发。早期是做winform的运维,当然也参与了一点后面的开发,但是参与得比较少。然后转为asp.netcore的开发。到目前为止大概是开发了3个左右的项目。大概情况就是这样。

2、你最近开发了项目前端用的是vue框架还有nuxt,后端用的webapi。那我问一下vue的一些问题吧。vue组件之间的通信你会吗?就简单说一下大概的过程,父子之间通信的过程

vue父组件向子组件传递信息是通过那种类似于html标签的形式,当然他不叫html,然后设置这个标签的属性,就把数据数据交给子组件了。然后u子组件内部通过那个defineProperty(defineProps)接受。至于子组件调用父组件的方法,这个学的不是很深入,整个框架是前端搭建的。

组件通信啊,官方文档里面倒是有。可惜项目没用到向上通信,所以就忘了

3、好吧,那个nuxt,他会帮你把目录生成好,然后你在项目的目录下添加图片。还有页面就先当与你们只需压迫在前端调用一些后端的接口吗?那前端的交互什么的,页面的动作你们自己写吗?比如下拉框啊等等

如果是下拉框的话,我们是使用的elementui,elementplus,所以说自定义组件这块不是很了解。

4、就相当于前端美工给你们把那个页面做好,你们直接负责API?

美工,他只给我们设计图,我们自己把设计图转化为页面,然后其实后端也是我们自己写。(所谓的前后端分离,人不不分离)

5、好,那么webapi主要是与前端vue用什么方式通信?

http由几种通信?你是说http method方法吗?最常用的就是get,然后涉及到表单的话会用post。当然还有put,delete,但是我们没有使用这些,最常用的还是get和post。

6、这几种方法是怎么传递参数的?

get是直接在url中写参数,post是在头部后面的请求体中存放参数。

7、你前两个项目使用的efcore,后一个项目使用的sqlsugar,那sqlsugar那个项目怎么防止注入呢?

什么情况下会发生注入?首先后端的是直接使用sql查询,其次呢,如果使用了sql,又没有使用参数化查询的话,就会存在sql注入。但是我们一般是直接写linq,如果查询比较复杂的话,写不出来,或者说下起来很费劲的话,才会写sql。

8、那个多租户,就是sqlsugar的多租户你们用过吗?

我没有用过多租户,请问多租户指的是什么呢?

9、就是数据库,你们的数据库服务器是同一个吗?多租户就是数据库有几个服务器的时候,同一个sqlaugar客户端访问不同服务器

哦,明白了。我们就只有一个数据库服务器,所有对应的应用都去访问那个服务器,所以没有这种情况。我估计的有很多服务器才能碰到这种需求。

10、sqlsugar有一些自带的方法,比如锁、事务,里面的事务是怎么样的?里面包含的所是什么样的情况?

锁的话我不太了解?只听说过悲观锁,乐观锁,不知道是不是指的这个?事务的话,我想一下,sqlsugar不想efcore,有一个saveChanges方法,在一个事务中把所有改动都保存到了数据库。但是sqlsugar,我没有看到这种方法。但是sqlsugar涉及到多表修改的话,还是需要手动创建一个事务的,但是我们目前还没有使用到。

sqlsuagr似乎没有像efcore的隐式的事务中多个修改一起提交。以后总是会遇到要显示声明事务的时候,让我想起了以前写ado.net,也是要显示声明事务

我查询了sqlsugar的乐观锁,已明白其基本原理,就是数据库中的记录和实体之间比较版本字段。刚好我们数据库有一个更新时间字段,可以用sqlaugar的IsEnableUpdateVersionValidation把它声明为乐观锁字段。我回忆一下,到目前为止,只有一个多值属性字段被多个人更新,可以使用乐观锁。但目前为止其他地方几乎没有使用乐观锁的必要。

悲观锁我的理解就是事务会暗中调用,让其它事务没法访问相应数据,从而在本次事务内确保查询和对查询的修改正确。所以悲观锁存在,但不需要手动调用,只需要关注事务即可。

11、那你说一下单向绑定和双向绑定

单向绑定的话,用的最多的是ref对象,还有react对象,但用的比较少。然后再标签中引用这个对象,变量,就可以实现单向绑定。至于双向绑定,他其实是一个回调,界面上改动数据后调用回调函数,但是vue提供了一个v-model指令封装了这个,就可以直接使用来实现双向绑定。

12、说一下using关键字的作用

第一个作用是引入命名空间,第二个作用是给命名空间取别名。还有就是非托管资源。比如说我们在C++里面写的函数,里面使用了new申请了非托管内存。在C#中就可以使用dllimport导入C++中的函数,还可以使用C#类对这些函数进行封装。然后这个类继承IDispose接口,在dispose方法里面释放非托管资源。当然这个释放方法是C++里面暴露出来的一个函数。然后我们在using代码块里面创建这个对象的时候就不用担心内存泄漏,不用手动去调用释放函数,能够自动释放非托管资源,这个比较方便。

13、之前你们做那个项目,里面用到了那个大数据统计

大数据,我不知道这个概念指的是什么?

14、就是数据表里面,每天大概会产生几百万条数据那种

没有,我碰到的最多的话,是一个实时数据表,但总共才5000多万条数据,但是也没有说每天产生几百万条数据那么夸张的。

从我毕业就听大数据这个词,但完全不知道要面临什么问题,处理什么问题

15、那如果是想要看很多数据的话,要如何让他更高效呢?

嗯,首先就是分页查询。还有就是取决于表,如果说有很多比必要的字段的话,是不需要查询出来的。特别是vue,应该说elementui,在数据量比较多的时候,他就比较卡。使用分页是很有必要的,大概800-900条就要分一次。

16、能说一下前端虚拟化吗?

我不太确定这个概念?

17、就是一次性查询出来的时候也,都放在页面,嗯,内存里面,然后渲染的时候,不把内存里面的数据都渲染出来。这样的话,流畅度比较好,也不需要分页,像是滚动加载

这种我没有用过,但是我感觉跟分页那个也挺像。因为我们有时候查询数据的时候,也是全部查询出来,然后点击下一页的时候,从内存中过滤出相应位置的数据。而不是说到数据库查询那边分页。

18、你之前做过设备通信吗?

我没有直接跟硬件通信过,因为我们这这边是有硬件小组的。他们专门去硬件上采集数据,然后有两个方向。一个是存储现场的sqlite中,一个是通过MQ传回中心的服务器。

19、OK,那你之前用过消息队列吧?

我没有用过专门的消息队列,只是使用过redis模拟的消息队列,使用lpush和rpop,因为也提供了通知功能。但是没有用过RabbitMQ。

20、要是有一个请求,花了很长时间那种,怎么处理?

如果是不需要立即回显数据那种,可以使用一把方法接口,然后拉一个排队的托管服务,把请求的操作交给托管服务去慢慢处理。然后请求直接返回。这是第一种。第二种,像是需要回显数据的,不好意思,我有点忘了问题?

21、要是有一个请求,花了很长时间那种,怎么处理?这会带来不好的体验,怎么去优化这个请求,只是针对单个请求,考虑为什么请求时间会变长

在头一个阶段,比如果并发量比较大的话,请求可能卡在排队阶段,这种最好使异步方法接口。理论上说是有用,但我们没有碰到过这种,可能业务量比较小。单个请求时间比较长的话,其实最多的是卡在数据库的查询上面,那可能就需要注意一下sql有没有走到索引上面去。这种情况我们以前蹦到的比较多,后来是统一处理的。

22、写过存储过程吗?就是那种比较复杂的sql

没有写过,我们使用的是物化视图。有其他程序跑在服务器上,去更新这个视图。

存储过程自从毕业之后就没用到了。有人能说说工作中哪里会用吗?

业务经理提问

问一下你关于业务方面的问题。你们是人工作业还是通过井下设置直接采集上来

我们的设备主要是接实时数据,这是一个方面,还有就是比如压裂车上面的一些作业数据,它上面本身是带有传感器的。然后他们技术员会去看那些数据。那个采集软件是技术员手动去填的。只有实时数据是自动采集的。

那个支持中心项目,你在这里面主要是做运维的工作是吧

是的。这个项目我都不知道有多久了,因为我进来的时候已经是开发完毕很久了。我来了之后主要是负责我们业务这一块功能的运维。

里面有实时数据、视频监控啊。那个视频监控是实时的还是录像?还有那个监测,那个工程作业是直接对井下作业实时监测的,还是只是派工用的?

是实时视频。监测主要是靠实时数据。还有就是结合技术员开工之前填报的信息做一些预警。派工的话,是中心派工之后,他们才开始作业。

这种派工模式,实际上就是拿钱的个干活的从原来的一个公司被分到两个公司去了。

那这个现场的话,你有没有去过?有没有参与过现场的工作?

没有。我没有去过现场,只是做开发。现场组内有几个人去过,一方面是安装设备,一方面是调试软件这些。

那现场作业系统这一类系统,井下作业只是在地面上,还是也参与井下?

嗯,地下有一个部分是参与了的,就是泵注那块。会看加水加砂的情况,到了哪个地方,显示在界面上,比较类似于你说的井下的。

手机端的话,你有没有参与开发?

手机端我主要是提供接口,作业不是手机端的主要功能。主要用于现场管理,比如班前班后会,签到,巡检这些。真正作业的时候,他们是用电脑。

那实时数据有没有考虑到弄到手机端去展示?

有。手机端也有实时数据展示功能。不过那是给中心的领导用的,他们在工作的时候用手机看比较方便。现场的手机端没有这个功能。之后就是技术工程师提问

你们的手机端开发使用的网页还是安卓,还是微信小程序?

网页的话,是有专门的那种壳,嗯,叫什么(electron),里面封装了一个浏览器核心吧。但我们这边用的是原生安卓开发,是移动端小组做的。

数据库用到的比较多的是哪几种?

中心业务上用的最多的是Oracle,现场用的是mysql,他们数据库表结构是一样的。填了数据之后,通过触发器,记录在一个表里面。有一个程序去读取这个表的触发记录,然后找到相应数据,放到MQ中,传回中心的数据库上面。实时数据的话,就使用的sqlite。那个数据比较多,每个月一个文件,每个几百兆,大概有几个G吧,我不确定这个数据放mysql是否合适。

MQ这个数据发回中心的过程,如果有断线重连。服务器该怎么处理

我不太清楚这方面,本地有一个上传软件,但不是我做的。但我知道这方面确实有问题,前两年MQ传数据回来时就经常丢数据,主要是消息积压。

你接受出差吗?

接受。

你家在成都吗?

我家没在成都,我家在巴中,也是四川,比较小的一个城市。

你出来这么远,你家里人接受吗?

我觉得他们可能不会干涉太多。

你出过差吗?比如说新疆那边,乌鲁木齐那边

我出过,也是新疆那边,是旁边的一个城市,库尔勒,距离还是挺近的。大概四五个月。

我们大部分工作都是在苏州这边的人员做的,有些具体的项目,也要跟着现场去。所以我在想,我们有个项目挺适合你的

我知道,C#搞工业去现场避免不了的。

这样的话,我猜他们也是想搞前后端分离的现场应用。然后用Electron使用SPA搞前端。刚好我这前后端都开发过。但是怎么说呢,我最希望的还是实践一下WPF,毕竟是.Net程序员啊。如果MAUI+Blazor熟悉的有福了,桌面端、网页端、手机端也一并做了。可惜我手机端只用过一点MAUI8原生。

还有一上来就让我跑现场搞那个项目,很难不让我怀疑,就是让我去冲项目的,我一从现场回来就会被解雇了。而且这和他们公司HR说的目前的业务也没有联系。难道在新疆建设工厂吗?

你还与问题吗?

今天晚上的面试我算是通过了吗?

因为现在是视频面试,有一些笔试我们都准备了的,还有一些面试题目。但是视频面试就只能这样。之后的话,HR会通知你

好的,我知道了。

评价一下

我是没有太重视vue的,在3、4月份,每天中午午休吧vue的官方文档和看完了,也看了下vue-router。然后项目上切换到vue了。但是关于应用构建这块的工作,实际上是nuxt提供了。我把重心放在wpf和asp.netcore这边,这次的面试提问是出乎我的意料的。唯一的不同时我WPF没有在工作中用过,但vue在工作中用过,对于如何从零构建一个应用,显然时后者更有经验。但是vue/elementplus,或者或浏览器的响应式性能太烂了,一个表格,1000条数据就卡。这在苏州是正常工资吗?

我没见过市面,不了解苏州这边的人力市场面试总是,要么很长时间没有,让我十分焦虑,要么就扎堆来,挑战我的时间表。不知道为什么,你们也是这样吗?

技术官问的东西都不是很深入那种——八股文式的询问,和前面的两次面试感觉很不同。如果有人说他们是来找解决方案的,我都要信了。我不知道这个面试是否可靠?成都就业现在真的这么难吗?

我这个阶段的程序员真的是上不能上,下不得下的尴尬阶段吗?

我也在捡起英语,想着两年后外语对话,能不能进外企。从大一到现在已经7年了,英语丢了这个久了。但是今年有来了个外企撤离潮,怕要成49年入国军

熬夜写博客腰好痛

后记

第二天上午HR联系,面试应该是过了。在让准备资料。双证,个人资料表

最后

恭喜作者通过面试,如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。也可以加入微信公众号 [DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!

作者:小码编匠
链接:https://juejin.cn/post/7408365495475437568
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值