这次面试的时间是8月28号。距离上一次面试已经过去了一个月了,距离开始找工作已经过去了2个月。没多少找工作经验的我也体会到了什么叫就业崩了。
看了一线码农的采访计划后,我也把苏州列为了找工作的地方之一。我成都感觉公司都翻烂了
.netcore
,devops
,CICD
,单元测试
和集成测试
,scrum
敏捷开发,k8s
,前后端分离
,RabbitMQ
,Redis
,微服务
全整上。我CICD,单元测试这些部分有学习,但也没项目用过,敏捷开发除了外企常见,还有哪能接触?上不去,真的上不去。我发觉我目前这个目前这个技术阶段还挺尴尬的。技术和经验说深不深,说浅不浅,到底是上不能上,下不得下。
这次面试的公司是苏州史斯莱克精密设备,其基地应该是位于太湖边上的孙武路。HR介绍该公司是清华毕业的华人创建,我在想该不会是高华润人吧?主要业务是易拉罐瓶盖生产设备制造。近年来开始设计新能源汽车的电池盖。据说的技术迁移应用。
面试前,HR首次询问的工资,我回答的是14万一年。初试是腾讯视频线上会议面试,商定在晚上6点半。一个应该是业务经理,一个技术工程师,年龄均偏大吧,可能有40多了。
首先是我做自我介绍
我叫XX,今年27岁,20年毕业与西南石油大学。毕业之后就一直在目前这家XX公司。所学的专业是软件工程。在这边基本上一直在做软件开发。前期在做运维,大概一年之后转向开发。早期是做winform的运维,当然也参与了一点后面的开发,但是参与得比较少。然后转为asp.netcore的开发。到目前为止大概是开发了3个左右的项目。大概情况就是这样。
你最近开发了项目前端用的是vue框架还有nuxt,后端用的webapi。那我问一下vue的一些问题吧。vue组件之间的通信你会吗?就简单说一下大概的过程,父子之间通信的过程
vue父组件向子组件传递信息是通过那种类似于html标签的形式,当然他不叫html,然后设置这个标签的属性,就把数据数据交给子组件了。然后u子组件内部通过那个defineProperty(defineProps)接受。至于子组件调用父组件的方法,这个学的不是很深入,整个框架是前端搭建的。
好吧,那个nuxt,他会帮你把目录生成好,然后你在项目的目录下添加图片。还有页面就先当与你们只需压迫在前端调用一些后端的接口吗?那前端的交互什么的,页面的动作你们自己写吗?比如下拉框啊等等
如果是下拉框的话,我们是使用的elementui,elementplus
,所以说自定义组件这块不是很了解。
就相当于前端美工给你们把那个页面做好,你们直接负责API?
美工,他只给我们设计图,我们自己把设计图转化为页面,然后其实后端也是我们自己写。(所谓的前后端分离,人不不分离)
好,那么webapi主要是与前端vue用什么方式通信?
http由几种通信?你是说http method方法吗?最常用的就是get,然后涉及到表单的话会用post。当然还有put,delete,但是我们没有使用这些,最常用的还是get和post。
这几种方法是怎么床底参数的?
get是直接在url中写参数,post是在头部后面的请求体中存放参数。
你前两个项目使用的efcore,后一个项目使用的sqlsugar,那sqlsugar那个项目怎么防止注入呢?
什么情况下会发生注入?首先后端的是直接使用sql查询,其次呢,如果使用了sql,又没有使用参数化查询的话,就会存在sql注入。但是我们一般是直接写linq,如果查询比较复杂的话,写不出来,或者说下起来很费劲的话,才会写sql。
那个多租户,就是sqlsugar的多租户你们用过吗?
我没有用过多租户,请问多租户指的是什么呢?
就是数据库,你们的数据库服务器是同一个吗?多租户就是数据库有几个服务器的时候,同一个sqlaugar客户端访问不同服务器
哦,明白了。我们就只有一个数据库服务器,所有对应的应用都去访问那个服务器,所以没有这种情况。我估计的有很多服务器才能碰到这种需求。
sqlsugar有一些自带的方法,比如事务,里面的事务是怎么样的?里面包含的所是什么样的情况?
锁的话我不太了解?只听说过悲观锁,乐观锁,不知道是不是指的这个?事务的话,我想一下,sqlsugar不想efcore,有一个saveChanges方法,在一个事务中把所有改动都保存到了数据库。但是sqlsugar,我没有看到这种方法。但是sqlsugar涉及到多表修改的话,还是需要手动创建一个事务的,但是我们目前还没有使用到。
那你说一下单向绑定和双向绑定
单向绑定的话,用的最多的是ref
对象,还有react
对象,但用的比较少。然后再标签中引用这个对象,变量,就可以实现单向绑定。至于双向绑定,他其实是一个回调,界面上改动数据后调用回调函数,但是vue提供了一个v-model
指令封装了这个,就可以直接使用来实现双向绑定。
说一下using关键字的作用
第一个作用是引入命名空间,第二个作用是给命名空间取别名。还有就是非托管资源。
比如说我们在C++里面写的函数,里面使用了new申请了非托管内存。在C#中就可以使用dllimport
导入C++中的函数,还可以使用C#类对这些函数进行封装。然后这个类继承IDispose
接口,在dispose方法里面释放非托管资源。当然这个释放方法是C++里面暴露出来的一个函数。然后我们在using代码块里面创建这个对象的时候就不用担心内存泄漏,不用手动去调用释放函数,能够自动释放非托管资源,这个比较方便。
之前你们做那个项目,里面用到了那个大数据统计
大数据,我不知道这个概念指的是什么?
就是数据表里面,每天大概会产生几百万条数据那种
没有,我碰到的最多的话,是一个实时数据表,但总共才5000多万条数据,但是也没有说每天产生几百万条数据那么夸张的。
那如果是想要看很多数据的话,要如何让他更高效呢?
嗯,首先就是分页查询。还有就是取决于表,如果说有很多比必要的字段的话,是不需要查询出来的。特别是vue,应该说elementui,在数据量比较多的时候,他就比较卡。使用分页是很有必要的,大概800-900条就要分一次。
能说一下前端虚拟化吗?
我不太确定这个概念?
就是一次性查询出来的时候也,都放在页面,嗯,内存里面,然后渲染的时候,不把内存里面的数据都渲染出来。这样的话,流畅度比较好,也不需要分页,像是滚动加载
这种我没有用过,但是我跟绝跟分页那个也挺像。因为我们有时候查询数据的时候,也是全部查询出来,然后点击下一页的时候,从内存中过滤出相应位置的数据。而不是说到数据库查询那边分页。
你之前做过设备通信吗?
我没有直接跟硬件通信过,因为我们这这边是有硬件小组的。他们专门去硬件上采集数据,然后有两个方向。一个是存储现场的sqlite中,一个是通过MQ传回中心的服务器。
OK,那你之前用过消息队列吧?
我没有用过专门的消息队列,只是使用过redis模拟的消息队列,使用lpush和rpop,因为也提供了通知功能。但是没有用过RabbitMQ。
要是有一个请求,花了很长时间那种,怎么处理?
如果是不需要立即回显数据那种,可以使用一把方法接口,然后拉一个排队的托管服务,把请求的操作交给托管服务去慢慢处理。然后请求直接返回。这是第一种。第二种,像是需要回显数据的,不好意思,我有点忘了问题?
要是有一个请求,花了很长时间那种,怎么处理?这会带来不好的体验,怎么去优化这个请求,只是针对单个请求,考虑为什么请求时间会变长
在头一个阶段,比如果并发量比较大的话,请求可能卡在排队阶段,这种最好使异步方法接口。理论上说是有用,但我们没有碰到过这种,可能业务量比较小。
单个请求时间比较长的话,其实最多的是卡在数据库的查询上面,那可能就需要注意一下sql有没有走到索引上面去。这种情况我们以前蹦到的比较多,后来是统一处理的。
写过存储过程吗?就是那种比较复杂的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条数据就卡。
这在苏州是正常工资吗?我没见过市面,不了解苏州这边的人力市场
面试总是,要么很长时间没有,让我十分焦虑,要么就扎堆来,挑战我的时间表。不知道为什么,你们也是这样吗?
技术官问的东西都不是很深入那种——八股文式的询问,和前面的两次面试感觉很不同。如果有人说他们是来找解决方案的,我都要信了。我不知道这个面试是否可靠?
成都就业现在真的这么难吗?
我这个阶段的程序员真的是上不能上,下不得下的尴尬阶段吗?
我也在捡起英语,想着两年后外语对话,能不能进外企。但是今年有来了个外企撤离潮,怕要成49年入国军