一名高水平的程序员,为什么面试总是失败?

news2024/11/24 11:25:52

目录

场景1

场景2

场景3

1 从发现和分析问题方面准备。

2 从linux命令和日志层面分析问题的步骤。

1 事先准备很重要

2 面试开始是自我介绍,这时要表露出,自己解决过redis,dubbo等组件的线上问题

3 一旦开始说第一个组件层面解决过的问题时,先说如何发现

4 说解决问题时,业务可以一笔带过

5 说好一个组件方面的问题后别停


作为Java面试官,我发现有三个值得注意的观点。首先,很多程序员认为“高水平”就是熟练掌握业务知识并能解决单机版问题,但在面试官眼里,这只是基本的增删改查操作而已。

其次,真正掌握高并发、微服务和云技术等价值技能的程序员,却不一定懂得如何在面试中展示自己的专业能力,或者在面试官主导的面试中得到展示的机会很少。最后,在面试中,“说”比“做”更重要,因此程序员需要准备好展示自己的技能,并掌握如何在面试中凸显自己的优点。即使技能不够强,也可以依靠出色的面试表现获得更高级别的职位。例如,有些培训班学员就是通过出色的面试表现成功入职的。

在我作为Java面试官的经验中,遇到了很多这样的案例,从中可以深刻感受到,技术能力并不是面试成功的关键,更关键的是如何在面试中展现你的专业素养。

 

场景1

我曾经遇到一位求职者,他的简历上写着拥有5年Java开发经验,但在面试中却过于强调项目业务。我不得不引导式地提问,询问其项目的亮点,并希望了解redis在其中的运用情况。然而,他又开始大谈复杂的业务,告诉我为了确认这个业务和客户沟通了整整2天。最后,当我再次尝试询问redis的使用时,他才透露出该项目在获取数据时利用了redis来提高性能。

对于这样的求职者,我感到非常不满意。虽然他的简历显示他有5年Java开发经验,但是在面试中过多地谈论业务细节,却不能准确回答关键问题,给人留下了浮躁、不专业的印象。作为面试官,我更看重应聘者的技术实力和专业素养,因此,我建议所有求职者在应聘前多准备一些相关问题的回答,并且在面试中注重突出自己的技术实力。

场景2

曾经遇到一位求职者在简历中声称熟悉微服务组件dubbo和netty等技术,但在面试时却不知道如何准备。我问他项目中具体使用了哪些这些技术,结果他给我讲了一大堆dubbo和netty的底层细节,比如netty线程模型等。然后当我再进一步确认他是否真正实践过这些技术时,他告诉我只是用过API,或者只实现过一些很简单的技能。

这样的情况在面试中并不罕见。有些求职者为了在简历中突出自己的专业特长,会写入各种技术关键词,但实际上并没有真正掌握这些技术。作为面试官,我更看重求职者的实际能力和经验,而不是简单的技术名词。因此,我建议所有求职者在准备面试前,应该对自己所写的技术进行深入了解,并在实践中获得相关经验。只有这样,才能够在面试中表现出真正的专业素养。

场景3

有些具备3到5年大厂经验的Java开发者,很可能用过分布式等高级技术。然而,当被问及对Redis等组件的使用和解决性能问题时,他们通常只是零散地说一些细节,没有条理性。这其实是一个反例,因为有些求职者在面试中表现出色,能够结合业务细节谈论分布式和微服务,同时也能讲述自己如何解决实际问题。但是,进入项目组后却只展示了基础的增删改查技能,表现并不尽如人意。但是这并不意味着这些求职者无法进步。相反,只要拥有实践机会,他们就可以逐渐提升技能水平和薪资待遇。所以,在准备面试时,需要认真准备,不能仅仅结合项目和理论层面做准备。否则,即使是应聘基本技能的岗位,如果面成了,那么薪资也可能会被低估,或者错失进入大公司的机会。所以,如果想要挑战高级技能的岗位,准备充分非常重要。

1 从发现和分析问题方面准备。

在我的项目中,我们使用了Zabbix或CAT来监控我们的项目。只要有挂机、数据库和Redis慢查询等情况发生,就会触发告警。

此外,如果日志中出现关键字exception过于频繁也会告警。同时,如果机器CPU或内存使用率过高也会触发告警。如果您想更深入地了解这个话题,可以去了解一下Zabbix等监控组件的具体配置细节,比如配置哪些参数可以监控数据库慢查询。当您准备充分后,您就能证明自己曾经配置过全局性架构的参数。此外,您还可以介绍一些自己曾经解决过的各种问题,并结合实际问题来证明自己的能力。

例如,我们的项目使用Zabbix进行监控,我通过配置某些参数(提前在网上查过),成功监控了数据库慢查询。一旦有超过5秒的SQL语句,就会触发告警;同时,我还配置了当内存使用率高于80%且持续时间超过5分钟时,会触发告警;此外,如果在5分钟内日志中出现100个以上的异常关键字,也会触发告警。这样,您至少能证明自己具备排查问题的能力。

2 从linux命令和日志层面分析问题的步骤。

继续,你可以说,当我发现业务问题后,首先会到Linux里使用vi命令打开日志,然后根据关键字搜索,在找到对应的时间节点后,再根据traceid或线程号找到错误日志的上下文。

这是分析业务问题的一般过程。如果我解决了空指针等问题,可以直接说明。如果是解决数据库慢查询问题,通常的做法是使用执行计划进行分析,查看关联表的数量是否太多,是否缺少索引或缓存,并详细讲解索引和Redis的用法。

对于CPU或内存OOM问题,一般的做法是使用Linux命令排序,查看哪些线程的CPU或内存使用率过高,必要时使用jstack或jmap命令进行分析。此外,还可以参考其他人的排查经验,例如一次排查内存问题的经验,其中原因是由于使用对象未关闭。结合自己的业务场景,例如支付项目中未关闭连接网银的对象导致OOM,可以更好地证明自己的技术能力。

以上是针对单机版的问题排查和解决方法。而通过“解决过的线上问题”,可以更好地证明自己对Redis等组件的掌握程度。例如,如果我没有在自己的项目中使用Redis,我可以先了解Redis的语法,例如基本数据结构有5种,可以使用jedis和redisTemplate操作Redis。然后,我可以想出自己项目中的业务场景,例如支付项目中使用Redis缓存常用的风控规则。最后,我可以到线上找别人解决过的问题,例如在某篇文章中,通过修改配置文件解决了某个问题。结合我的业务场景,我可以按照讲解过程进行分析,并提出相应的解决方法,以证明自己实际上已经解决了线上问题。

除了Dubbo以外,对于其他的组件,例如Kafka和Nacos等,我也可以参考其他人的排查经验,并到线上寻找解决过的问题。分布式组件层面,不仅需要看底层源码,还需要结合业务场景进行分析。在向面试官展示自己的技术能力时,无需一定要结合高并发场景说明,可以使用自己的业务场景来进行讲解,然后结合排查问题的思路,必要时再引入源码。即使我没有亲自使用过这些组件,哪怕我只是在小公司中从事增删改查工作,我也可以通过这种方式证明自己具有架构经验。

至于这里,dubbo问题,redis问题你是怎么发现的?

上文也说了,你项目引入了zabbix监控,监控发现了慢连接慢查询,然后看日志分析。

上文说了可以准备的点,这里再说下哪些点看似值钱,但面试时你其实是没法用的。

你掌握的技能只有融入了业务,才能证明你的实力,比如上文提到了解决慢查询解决分布式组件方面的问题,都是要融入业务。比如有些点,在项目里其实用不到,比如分布式锁,java并发锁这套,还有spring boot方面的源码,项目里要么不会直接用,即使要用也是用组件,而不会自己手写一套分布式锁。

这里比如大家没在项目里用过值钱技术,千万别自己想象一下业务中的使用场景,这样反而会坏事,比如某人认为redis+lua实现的分布式锁很值钱,然后自己想个业务场景,但真实项目里不大会用分布式锁,这样就穿帮了。

这种情况下,大家切记,是通过组件实现(缓存或消息发送等)功能,别手写代码,因为零基础说手写代码大概率会穿帮,用组件实现,看些api,再对应准备些解决过的问题就可以了。

这点衍生一下,你看过的技能,包括底层源码,如果不是组件,而且项目里用不到,你准备再多,只能证明理论方面的技能,其实只是聊胜于无。

最后给出一些高水平程序员(或者是冒充的高水平程序员)过面试的一些套路。

1 事先准备很重要

准备的时候,尤其要准备些redis,kakfa,dubbo等组件解决过的问题,最好是再带源码解决过的问题,准备的时候,一定要结合业务场景。

2 面试开始是自我介绍,这时要表露出,自己解决过redis,dubbo等组件的线上问题

这块面试官其实很感兴趣,一定会追着问。

3 一旦开始说第一个组件层面解决过的问题时,先说如何发现

即通过zabbix等监控方面发现问题,最好再带些jstack以及linux发现问题解决问题的命令,以及执行计划和dump些排查问题的命令和配置方式。

4 说解决问题时,业务可以一笔带过

比如在支付场景发现了dubbo调用问题,然后借鉴他人的思路和过程说,此时如果当你说出,我看了zookeeper的源码,其中xx类的xx方法,在xx场景下会出问题,但高版本就没了,大家可以想象下这种说辞的分量。

5 说好一个组件方面的问题后别停

再顺带提一嘴,我还解决过kafka的线上问题,然后继续说。一旦面试官问,比如问你项目里redis是怎么用的,你也提一嘴,redis我解决过线上问题,总之把你事先准备好的点全抛出去。

这样,哪怕你回答不出一些基本的八股文,但你可以证明你解决过更值钱的问题,哪怕一些Redis更高级的问题(比如集群)你说不上,但你至少证明你用过redis还解决过实际问题,当然面试准备不仅限于此,更需要看些八股文和算法。

这样的话,你一定能结合业务,结合解决过的问题,在面试过程中最大程度地拔高面试官对你的评价。

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

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

相关文章

Django高级扩展之文件上传

文件上传是一个比较常用的网站功能,在服务器端,Django会使用一个叫作request.FILES的对象来处理上传的文件。 目录 存储路径 创建存储目录 配置settings.py 上传单文件 配置url 上传文件模板 视图方法 显示上传页面 上传文件处理 上传效果 1.…

盘点五种最常见加密算法!

大家好,我是Martin。 今天,就给大家来盘点一下最常见的5种加密算法。 大家平时的工作中,可能也在很多地方用到了加密、解密,比如: 用户的密码不能明文存储,要存储加密后的密文 用户的银行卡号、身份证号…

2024年天津农学院专升本专业课参考书目

天津农学院2024年高职升本科拟招生专业参考书目 天津农学院专升本专业课参考教材(我校不提供专业课参考教材) 人力资源管理专业参考教材: 1、《人力资源管理实用教程》 (第2版),吴宝华,北京大学出版社 2、《人力资源…

运维(SRE)成长之路-第3天 文本处理三剑客之 grep

1.命令作用以及参数详解 grep: 全局搜索正则表达式并打印行(Global search REgular expression and Print out the line)作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行模式:由正则表达式字…

GitHub Copilot 最全安装、使用

GitHub Copilot 最全安装、使用教程 一、温馨提示 GitHub Copilot 目前为止可以免费试用一个月,但是试用的前提是必须要绑定银行卡,因为后续会自动扣费,所以请注意试用结束日期,自己定好闹钟关闭订阅。 订阅价格为每月10美刀&a…

【Pinia 状态管理篇】Vite + Vue3 组合式 API 模式下的 Store 数据处理

文章目录 Pinia 状态管理一、 Pinia 安装与使用1.1 安装1.2 注册 pinia 实例到全局1.3 创建一个 Store1.4 组件内使用 Store 二、Pinia 核心概念展开学习Store 的定义和使用2.1 State2.2 Getter2.3 Action 附:1. 什么是魔法字符串? Pinia 状态管理 一、 …

Nacos配置中心使用(Spring Cloud版)

目标 向项目中集成Nacos配置。原项目是一个SpringBoot项目。这里假设我们无法修改原有项目的SpringBoot版本。 注意 在不动SpringBoot版本的前提下,根据SpringBoot的版本,确定Spring Cloud和Nacos版本。Nacos版本其实就是Spring Cloud Alibaba版本。在…

【Linux】网络结构模式

目录 网络结构模式C/S结构B/S结构 MAC地址IP地址端口网络模型OSI七层模型TCP/IP四层模型 通信过程数据包封装协议以太网协议ARP协议IP数据报格式UDP协议格式TCP协议格式封装分用TCP详解TCP和UDPTCP通信流程TCP三次握手 网络结构模式 C/S结构 客户机-服务器(client-server)结构…

uboot读取adc,通过cmdline传给kernel解析数值,不同硬件模块进行处理

uboot读取adc,通过cmdline传给kernel解析数值,不同硬件模块进行处理 uboot开发,要想读取adc在哪个时间点读取以及如何传给cmdline,需要清楚2点, uboot启动得大致流程及相关启动功能,uboot各个硬件模块得接…

主机安全各个方面应该怎么做?

主机安全是指保护主机系统不受恶意攻击和未经授权访问的威胁,以保证系统的稳定性、可用性和数据的安全性。 以下是主机安全涉及的几个方面做法: 1. 操作系统安全:安装操作系统时需要选择合适的版本,及时打补丁更新,配置…

入职Linux驱动工程师后,我才知道的真相…

大家好,我是ST。 做Linux驱动工程师也有一段时间了,今天分享一下我曾经入职才知道的一些事情,算是一个菜鸟的经历吧! 设备树 起初学习Linux驱动,是从最简单的一个.c文件开始。 在.c中实现module_init和module_exit这…

大模型入门(三)—— 大模型的训练方法

参考hugging face的文档介绍:https://huggingface.co/docs/transformers/perf_train_gpu_many#naive-model-parallelism-vertical-and-pipeline-parallelism,以下介绍聚焦在pytorch的实现上。 随着现在的模型越来越大,训练数据越来越多时&…

基于Ubuntu22.10系统安装部署webmin软件

Webmin是一个用于Linux系统管理的开源的基于web的系统管理配置工具。有了这个工具的帮助,我们可以管理内部的系统配置,诸如设置用户账户,磁盘配额,像Apache, DNS, PHP, MySQL,文件共享的服务等。 本文描述在ubuntu22.…

VS+C#+WPF多线程视频摄像头播放器监控

程序示例精选 C#WPF多线程视频摄像头播放器监控 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<C#WPF多线程视频摄像头播放器监控>>编写代码&#xff0c;代码整洁&#xff0c;规…

el-table点击单元格变成输入框,以及其自动获取焦点失效可能的原因(focus失效)

1.el-table点击单元格变成输入框 这里主要使用了el-table三个自带的方法/属性&#xff1a; <el-table:data"MesTableData"bordercell-click"clickCell":row-class-name"tableRowClassName":cell-class-name"tableCellClassName" …

解决elementUI弹出框关闭后再打开el-select下拉框无法选中的问题

文章目录 一、问题描述&#xff1a;二、问题解决 一、问题描述&#xff1a; 使用的前端UI框架为elementUI。 el-select组件在一个弹框中&#xff0c;打开该弹框&#xff0c;el-select可以正常选中&#xff0c;但是保存弹框中的表单信息关闭弹框后&#xff0c;再打开弹框&…

RT-DETR论文解读与代码

1.概述 目前以大名鼎鼎的YOLO为代表的基于CNN的实时监测网络需要NMS进行后处理&#xff0c;导致不能很好的优化网络&#xff0c;并且网络不够健壮&#xff0c;从而导致检测器的推理速度出现延迟。研究者也分析了Anchor-based和Anchor-free的YOLO的性能&#xff0c;发现Anchor并…

【Java基础篇】方法的使用(方法的重载和递归)

作者简介&#xff1a; 辭七七&#xff0c;目前大一&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a;Java.SE&#xff0c;本专栏主要讲解运算符&#xff0c;程序逻辑控制&#xff0c;方法的使用&…

打造智能生活方式

2个互联网工具与你分享 分享一&#xff1a; 随记单词是一款功能强大的单词记忆和管理应用程序。它为用户提供了便捷的学习工具和智能化的记忆方式&#xff0c;帮助用户轻松有效地记忆和掌握单词。 随记单词的特点之一是个性化记忆计划。用户可以根据自己的学习进度和需求&am…

如何使用MATLAB处理涡度通量数据

MATLAB MATLAB是美国MathWorks公司出品的商业数学软件&#xff0c;用于数据分析、无线通信、深度学习、图像处理与计算机视觉、信号处理、量化金融与风险管理、机器人&#xff0c;控制系统等领域。 MATLAB是matrix&laboratory两个词的组合&#xff0c;意为矩阵工厂&#x…