警惕!不要让自己的基本功丢失

news2024/12/28 18:48:28

写这篇文章的缘由是来自己最近我作为面试官的一场面试,我司是。Net stack,这场面试的岗位是后端高级开发。候选人是一个 12 年工作经验的候选人,简历看起来很 nice,国内某 TOP 高校 cs 专业本科毕业,有在大厂甲方外企的经验,而且第一轮在线算法题是 100%过,乍一看貌似是一个非常牛的大佬,但是经过第二轮面试,让我并不这样认为了,并且让我有了一些思考。

我们第二轮面试的内容整个面试 90 分钟,前 30 分钟两个面试官会问一些技术方面问题,基础为主,然后后 50 分钟当场根据需求写一个应用,最后 10 分钟互动,大概就是”你有什么想问我们”的环节。

先说一下前 30 分钟,我和另一个面试官的问题大多是一些 C#/Sqlserver 的基础问题,类似“请谈一谈你对接口和抽象类的理解”,”聚集索引和非聚集索引的本质区别”,再就是摘了一段我们实际项目中的包含子查询的 Query, 然后让候选人解释一下逻辑,然后说一下执行顺序。

其实在我看来,这 30 分钟就是在暖场,因为这些问题对于一个 10 年+的程序员来说无异于送分题,我们的目的也是如此,通过一些基本功考察的问题,来让候选人进入状态,消除紧张情绪,然后进入下一个环节。但是,这个候选人的缺表现让我们大跌眼镜。一开始,这个候选人不太能分清楚抽象类和接口的使用场景,被我捕捉到以后我问道:“抽象方法和虚方法的使用场景呢?”候选人直接说不知道虚方法,至此,我开始怀疑这个候选人基础是不是不太扎实。接下来另一个面试官开始问那段 SQL 的执行逻辑,SQL 大概如下:

SELECT SUM(D.a), D.b, E.c FROM D

LEFT JOIN E ON D.id = E.id

WHERE D.Date >’2022-01-01’ AND D.Date < ‘2022-12-31’

GROUP BY D.b, E.c

HAVING SUM(D.a) >= 100

ORDER BY E.c

从逻辑上来讲,候选人确实说清楚了,但是当我们问道执行的步骤或者顺序的时候,候选人是不太了解的,我同事问道:“在工作中有没有看过 SQLServer 的查询计划呢?”候选人表示不知道查询计划是什么。当然后面我们也问了关于索引,窗口函数之类的问题,候选人基本上没办法回答上来。

接下来进入写代码环节,需求大概是要求写一个员工管理程序

  • 能够计算所有员工的平均工资,

  • 能够计算 A 部门员工平均工资

  • 能够计算 B 部门员工平均工资

  • 自己写用例,并且能显示出来

  • 考虑扩展性

  • 不限于用什么框架,console, winform,web 什么都可以。

候选人一上来建了 console 的 proj,然后直接在 proj 里面建了一个 Employee 类,在 main 函数里面写计算逻辑。

他当时建 Employee 类大概是这样

public class Employee

{

private string name;

public string Name{get; set;}

private decimal salary;

public decimal Salary{get;set;}

private string department

public string Department{get;set;}

}

我打断他问他为什么要建私有字段但是又不在属性里面封装?候选人恍然大悟,赶紧删了私有字段。接下来候选人竟然直接使用了字符串作为 department,甚至都没有用 enum, 然后再计算平均值的逻辑中直接用字符串来标识部门:

employees.Where(e=> e.department == “A”).Select(e => e.Salary).Average()

随后候选人在 main 方法里面写计算平均值的逻辑,足足花了不止 20 分钟,因为类型问题,一直红波浪,直到我们提醒他可以把鼠标挪到红波浪上检查一下 error,看看是什么问题,候选人才把问题解决了。最后,50 分钟到了候选人并没有成功输出结果。其实我们的期望是,候选人能分别建 proj 来作为 client(console),bisuness(计算逻辑), model(员工类),并且使用 employee 作为基类,使用子类继承基类来区别 A 部门和 B 部门员工,如果不用这个设计,起码要用 enum 来作为部门的类型。最后,用接口来规范计算的方法,在 client 通过依赖注入解耦,当然直接通过接口来实例化也行,起码要有解耦的思维,而不是一股脑的把逻辑全部写在 main 函数中。

在最后的环节中,我看候选人也挺不容易,还是想给一些机会。

于是我主动说:“你有什么比较擅长的,也可以跟我们交流交流,比如缓存中间件,  消息中间件,容器,编排,前端框架,什么都可以。“

结果候选人说:”我都不了解,我只会.net“

我还是想再给给机会:“要么你介绍介绍你遇到的最难得最有挑战一个 bug 或者需求,然后你是怎么解决的“

候选人说:“技术方面确实没有遇到过什么太难得,只是有一次一个 legacy 系统重构任务交到我手上,然后我协调各部门重新梳理需求,重构出来了“

我:“技术上有没有什么挑战吗?“

候选人:“没,技术没什么好说,主要是需求整理难度比较大“

到这里我是真的没办法了,后面问了一下候选人跳槽的原因,他说是因为长期在甲方越来越多的技术任务都外包给乙方,而他的角色从技术人员转化为管理乙方的人员,但是他还是想做技术。但是我觉得挺矛盾,一个喜欢技术的人为什么技术会如此单一呢?单一也没问题,但关键是基础还如此薄弱呢?

这个候选人国内 Top 高校毕业,并且能进外企甲方大厂说明当年技术肯定不差的,基础肯定也相对扎实,但是是什么原因让他在多年后基本功如此拉胯呢?我想,这也是很多程序员正在经历的:随着项目的经验越来越丰富,却与基本功渐行渐远。不可否认,如今框架给我们解决了太多的问题,但是这并不代表着我们就可以完全扔掉基本功。

我们有句名言:“我做出来即可,能跑就行,你为什么还有那么多要求?“如果把写代码比作建房子,地基扎实的房子和直接从地面起的房子,可能从外观上看一模一样,当阳光灿烂时,它们看起来并无差别。但是别忘了,你不会知道暴风骤雨何时会来临,当面对风雨打击的时候,这两个房子会有截然不同的结果。

列位,请警惕起来,千万不要丢掉自己的基本功,在经验日渐丰厚的同时,基础也必须要越发的牢固!

- EOF -

6afd5ae3875610af5896faaf171b10c9.png

推荐阅读  点击标题可跳转

0、极客专属:几十款程序员秒懂的卫衣

1、支付宝大整改,花呗、借呗退出江湖

2、从前,有两个卖水果的公司……

3、今年这情况,咱还是留个心眼吧!

关注「程序员的那些事」加星标,不错过圈内事

点赞和在看就是最大的支持❤️

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/126022.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浙大MBA的录取由初试和复试两面组成

今年7月收到了来自浙大的录取通知书&#xff0c;在拿到录取通知书的那一刻&#xff0c;觉得这一年多备考的艰辛都是值得的。 关于本人情况&#xff1a;2021年备考&#xff0c;刚到而立之年&#xff0c;2012年毕业于一所普通的本科院校&#xff0c;在校期间成绩倒是还好&am…

Vue3 中选项式下的侦听器

目录前言&#xff1a;watch 侦听的分类&#xff1a;函数式的侦听器对象式侦听器创建侦听器停止侦听器总结&#xff1a;前言&#xff1a; 今天小编给大家讲解一下&#xff0c;Vue3 中选项式下的侦听器。 我正在参加 2022年「博客之星」年度总评选&#xff0c;请大家帮我支持一下…

【服务器数据恢复】XFS文件系统分区丢失怎么恢复数据?

服务器数据恢复环境&#xff1a; 磁盘柜RAID卡搭建riad5磁盘阵列; Linux操作系统&#xff1b; 总共一个LUN&#xff0c;划分两个分区;&#xff1a;sdc1分区通过LVM扩容的方式加入到了root_lv中&#xff0c;sdc2分区格式化为XFS文件系统。 服务器故障&#xff1a; 用户为服务器…

本科生学深度学习一轻松搭建强化学习环境,gym的安装

OpenAI Gym 是一个工具包&#xff0c;提供了广泛的模拟环境&#xff0c;也是强化学习的环境&#xff0c;因为想学强化学习&#xff0c;所以需要搭建一个环境&#xff0c;之前一直在代码层面&#xff0c;还是得能看到&#xff0c;比较直观 今天看下怎么安装这个环境 1、官方网站…

【mybatis-plus】Springboot+AOP+自定义注解实现多数据源操作(数据源信息存在数据库)

背景 本文主要讲述的是如何实现动态切换数据源&#xff0c;数据源信息是存储在数据库表里&#xff0c;与在配置文件中写好数据库信息然后用DS("XX")注解不同。 目录 前言 一、准备工作 1.依赖 2.数据库表&#xff08;脚本&#xff09; 3.配置文件 4.自定义注解C…

【MySQL基础教程】约束的介绍与使用

前言 本文为 【MySQL基础教程】约束 相关知识&#xff0c;下边将对约束概述&#xff0c;约束演示&#xff0c;外键约束&#xff08;包括&#xff1a;外键约束介绍、外键约束语法&#xff09;等内容进行详尽介绍~ &#x1f4cc;博主主页&#xff1a;小新要变强 的主页 &#x1…

只懂黑盒测试也能学会的代码覆盖率及精准化测试

测试覆盖率是对测试完成程度的度量。它通常依据某种覆盖准则来对测试用例执行情况进行衡量&#xff0c;以判断测试执行得是否充分 。 ——出自《 计算机科学技术名词 》第三版 今天文章中我们给大家介绍覆盖率统计及覆盖率分析。在10月13日20&#xff1a;00&#xff0c;资深测…

Vue_cli中config文件配置详细注解

我在scr同级目录下创建了config文件夹&#xff0c;里边包含三个文件 它们3个有引用关系 dev引用prod prod.env.js文件 /* * process.argv.splice(2)[0]返回的是node.js的绝对路径 * /usr/local/bin/node */ let HOST process.argv.splice(2)[0] || prod module.exports {NO…

项目实战之旅游网(十)前台用户注册

目录 一.网站首页 二.编写注册界面 三.生成验证码 四.注册流程 五.编写注册方法 六.发送邮件配置 一.网站首页 static/frontdesk下存放前台静态资源&#xff0c;而templates/frontdesk是前台页面 二.编写注册界面 在上个界面点击注册就可以跳转到注册界面 在这里遇到一…

2022 年上海市大学生程序设计竞赛 M. My University Is Better Than Yours

大家总喜欢搞些什么排行榜。有一说一&#xff0c;排行榜通常不重要&#xff0c;除非——比如你老板要你做一下年终总 结。 为了实现建设世界一流大学和建设世界一流学科的目标&#xff0c;不少大学都用各种方式提升排名&#xff1a;发表论文、 申请基金、提升多样性. . . 不过…

Linux操作系统实验4——内存映射

实验要求&#xff1a; 1.在源码中查看file_operations和vm_operations_struct结构定义及其操作对象的方法&#xff0c;重点查看mmap方法fault方法的参选类型。 2.设备模块代码的编写和调试&#xff0c;重新编写file_operations结构中的mmap方法&#xff0c;和vm_operations_str…

美团一面:能不能通俗的解释下为什么要有意向锁这个东西?

面试真题&#xff0c;用通俗的例子解释清楚 MySQL 为什么有了表锁和行锁之后&#xff0c;还要引入意向锁 众所周知&#xff0c;InnoDB 中既有读锁也有写锁&#xff0c;也称为共享锁和排他锁&#xff0c;这两种锁既可以加在整张表上&#xff0c;也可以加在行上。 MySQL 自身就提…

【Apifox】设置apiFox自动获取token

文章目录问题描述解决方案注意事项参考文章问题描述 接口测试时&#xff0c;每次都需要手动登录获取token&#xff0c;先登录系统&#xff0c;从浏览器中复制token&#xff0c;再到apifox的接口上把token帖上去&#xff0c;然后才能去测试具体的接口&#xff1b;更麻烦的是&am…

【实时数仓】热度关键词接口、项目整体部署流程

文章目录一 热度关键词接口1 Sugar配置&#xff08;1&#xff09;图表配置&#xff08;2&#xff09;接口地址&#xff08;3&#xff09;数据格式&#xff08;4&#xff09;执行SQL2 数据接口实现&#xff08;1&#xff09;创建关键词统计实体类&#xff08;2&#xff09;Mappe…

小黑hbase终于勉强跑到了自己的m1 Macbook上啦,虽然终端用不了,但是能从happybase访问的日常积累:happybase简单使用

1.happybase连接 # 连接操作 import happybase# 建立连接 con happybase.Connection(localhost, 9090) con.open() # 输出所有表名称 print(con.tables()) # 关闭传输 con.close() con.open()2.创建表格 # 创建表格 con happybase.Connection(localhost, 9090) # 默认9090…

Android 图像混合技术

Android 图像混合技术 色彩知识 色彩 光学三原色 光学三原色由&#xff1a;红、绿、蓝组成。 色值分别是&#xff1a; 红&#xff08;red &#xff09;&#xff1a;#FF0000 RGB&#xff08;255&#xff0c;0&#xff0c;0&#xff09;绿&#xff08;green&#xff09;&am…

第十九讲:神州路由器基础知识

路由器简介路由器&#xff08;Router&#xff09;是连接Internet中多个网络或网段的网络设备&#xff0c;它能将不同网络或网段之间的数据信息进行“翻译”&#xff0c;以使它们能够相互“读”懂对方的数据&#xff0c;实现不同网络或网段的互联互通。此外&#xff0c;它会根据…

数据平台建设指南(上)

前言 年底了&#xff0c;整理了下过去做的一些项目&#xff0c;希望能够给大数据行业的同学提供些大数据平台建设的思路。内容大致分五部分&#xff1a;数据采集&#xff0c;数据存储、数据计算、基础平台以及数据治理篇。由于涉及到的内容较多&#xff0c;打算分成两篇文章&am…

PHY驱动注册部分

SOC可以对PHY 进行配置或者读取PHY 相关状态&#xff0c;这个就需要 PHY 内部寄存器去实现了。PHY 芯片寄存器地址空间为 5位&#xff08;支持访问32个寄存器).IEEE 定义了0~15这 16个寄存器的功能。而 16~31这16 个寄存器由厂商自行实现。 就是说不管你用的哪个厂家的 PHY 芯…

SAP ABAP——SAP简介(三)【S/4 HANA开发环境】

&#x1f482;作者简介&#xff1a; THUNDER王&#xff0c;一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读&#xff0c;同时任汉硕云&#xff08;广东&#xff09;科技有限公司ABAP开发顾问。在学习工作中&#xff0c;我通常使用偏后…