我已经在极力忍耐了,但实在是没忍住。。。
那天在面试一位候选人的时候,我还是笑了出来。
怎么回事呢?周二晚上我公开直播模拟面试的时候,来了一位经历 "有点独特" 的同学,暂且就叫他小 A 吧。小 A 才 26 届(刚大三),就有国赛和省赛奖项、2 段实习经历、简历上也写了 2 个项目。最关键的是,他竟然有 3 段培训经历!从高考结束开始,就分别参加过 Python、软件测试、Java Web 的培训,算下来至今已经学习编程两年半!
听起来是一位卷王了,学习时间久、自主性也挺强,直播间的朋友们和我一样,对小 A 接下来的表现充满期待!
小 A 的预期薪资是 12 ~ 15 K,看来也是自信满满,来势汹汹!
结果你猜怎么着?第一道题结束,他的薪资就直接腰斩,6 k 不能再多了!
额,准确地说,要不是模拟面试,估计这场面试到这里也就结束了。
为什么呢?我到底问了什么题?大家也可以来感受一下:
面试现场
鱼皮:你在开发 Java 项目中用过哪些集合类或者工具类?你在开发中是怎么提高开发效率的?
这道题目,其实只要你认真做过一些项目,应该都能说一点自己的想法吧?
结果小 A 答:我用 MyBatis、Spring Boot 啥的。
鱼皮:我理解你说的这些算是开发框架,当然非要说是工具也 ok。那你用过哪些工具类库呢?举个例子:你要把字符串的小写转为大写,你是自己写一个方法去转换,还是用什么现成的东西?
小 A 答:对于这种情况,我一般都是直接查教程。
我暗自心惊:还能这么回答?根本难不倒他!
其实问到这里,我基本上已经了解候选人的水平了,但想着可能小伙子面试经验不多,又有些紧张,我就再问得具体一点好了。
于是就有了下面这段对话:
直接把小 A 问懵了啊!
后面的面试过程也是类似的,有很多非常基础的内容,小 A 不但无法答出,甚至还不断爆梗!
比如:
1)鱼皮:你平时开发用过注解么?
小 A:用过,平时最多用的就是 ctrl 加一个杠的一个警字号的一个注解,还有 ctrl shift 的加杠的一个多行注解。
鱼皮(反应了一会儿):这不叫注解,这是注释啊!注释啊这是!
2)鱼皮:你是怎么注入 Bean 的?比如 Autowired 还有 Resource?
小 A:All to wear?刚才你说的那单词我没我没理解。。
3)鱼皮:平时应该写过 SQL 吧,写一句 SQL 来实现男生和女生的分组?
小 A:我还真没用到过
4)鱼皮:你做过订单相关的项目对吧?有了解过你们订单表的数据量么?
小 A:数据量还挺大的。。
鱼皮:挺大是多少?说一说你认为的 "挺大"
小 A:几千条左右?
我当时就这表情:
鱼皮:数据量挺大起码也得单表百万、千万条数据吧?
没想到小 A 突然提高了音量:百万他不让我做,百万咋可能让我做?!
真实。
问到后面,小 A 直接摊牌:"简历上的技能部分我不知道怎么写,直接从网上粘一下。"
我的建议
面试经过大概就是这样,直播间观看这场面试的朋友们甚至怀疑:鱼皮你在哪里请来的演员?
正在阅读这篇文章的你,或许也会觉得不可思议,学了两年半,怎么连工具类都不会用?连分组的 SQL 都不会写呢?
但其实我接触过这么多学编程的同学,回答过数万条向我的提问,我很清楚, 这并不是偶然 。真的有很多同学像小 A 一样,或许受限于学校的应试教育、或者受坑于某些不专业的培训机构、又或者因为不确定自己的学习方向辗转反侧反复横跳地学习,就会导致看似学习时间挺长,其实水平可能还不如学了半年的同学。
给大家分享这位同学的经历,也是希望借此给所有自学编程的同学一些建议,不要让你的 "两年半" 变成这样。
-
提前确认要学习的方向,越早明确一个方向越好,走直路比走弯路能够更快达到终点。
-
在选择一个方向后,先利用网上的资源自主学习,不要急着去报培训机构,降低你的试错成本。比如我在编程导航写过的 免费编程学习路线 ,先快速过一遍,也就有一个学习的全局感了,更好把握时间进度。
-
学编程的过程中,多记录自己学到的知识和技巧,积累自己的笔记库,没事就看一看,这样你写过的代码、用过的类库印象都会更深刻,就不会出现 "一问三不知" 的情况。
-
除了看系统化的教程学习外,平时没事就多阅读一些技术文章、或者提前看看你学过的知识对应的面试题,能学到很多教程之外的小知识点。像我带团队开发的 面试鸭刷题工具,也能帮大家多利用碎片化的时间自学。
当然,我还是非常看好小 A 的,表达能力很不错、心态也很好,而且现在才大三,之后有了明确的学习路线和方向,相信也能高速进步~
最后,再列举一些几个我认为初级后端程序员必须要掌握的知识技能,如果目前还不了解这些,就要尽快去补充咯!
初级后端程序员必备知识技能
这里我对初级程序员的定义是 ------ 至少能干活。大家可以把下面的技能当做自测表,看看这些你都会么?
我对知识点进行了分类,便于大家阅读~
1、基础编程能力
-
你是否能够熟练使用至少一种后端编程语言(如 Java、Python、JavaScript、Go 等)?
-
你是否了解基本的数据结构和算法(如数组、链表、哈希表、排序算法、队列、栈)?
-
你是否会进行代码调试和使用断点排查问题?
2、开发工具和环境
-
你是否熟悉代码版本管理工具(如 Git)及基本操作(分支、合并、解决冲突)?
-
你能否自主搭建一个简单的新项目(比如 Spring Boot 项目)?
-
你是否熟悉常用开发工具(如 IntelliJ IDEA、Postman、JMeter 等)?
3、后端开发核心知识
-
你是否清楚用户登录的完整流程,尤其是 Session 与 Cookie 的概念?
-
你是否了解 HTTP 的基本概念,包括 GET、POST 等方法的区别和用途?
-
你是否能够设计并实现增删改查(CRUD)功能?
-
你是否熟悉数据库操作,包括 SQL 查询(联表查询和分组)、事务等基本概念?
-
你是否了解数据库表的基本设计原则(如字段命名规范、索引、逻辑删除等)?
-
你是否知道如何防范常见安全问题(如 SQL 注入、XSS)?
4、前后端交互
-
你是否了解前后端交互的基本流程(如 HTTP 请求和响应、状态码)?
-
你是否了解常用的数据传输格式(如 JSON)并能处理这些格式的请求和响应?
-
你是否知道如何防范常见安全问题(如 SQL 注入、XSS)?
-
你是否知道如何使用工具(如 Postman、Curl、或者其他国产软件)来调试接口?
5、日志与调试
-
你是否了解开发中应该要写日志(如 log4j、SLF4J 的使用),并能通过日志排查问题?
-
你是否能捕获异常并处理错误情况,避免程序崩溃?
6、项目配置与部署
-
你是否能配置基本的服务器运行环境(如 Nginx、Tomcat)?
-
你是否熟悉常见的打包和构建工具(比如 Maven、Gradle)?
-
你是否知道如何部署一个单体项目到服务器(如云服务器、本地 Docker 部署或者可视化面板)?
这些知识大家都掌握了么?还有什么你认为对后端程序员来说非常重要的核心技能呢?欢迎评论区留言补充~