今天也是进行了第一次java面试,个人感觉不是发挥很好(而且答题时确实感觉有些东西没遇到过),首先介绍一下这个公司吧,成立15年是一个软件外包公司,主要面对的是制造业工业的erp等软件开发,和宏利差不多,我的话主要来试试,这次的确仓促没准备好,java除了毕设和另一个正在构思的项目没怎么在用,最近一直在忙前端和移动端的事,废话不说了,直入正题

1.面试官:你对SpringBoot的注解了解多少?

反思:那时候其实脑子里有@RestController,@Service,@Mpper之类的但是范围太广了,只答出Controller(其实脑子里不确定因为我平时要用到的注解有好多,从mvc架构要继续细分我还没分完就结束问我下一个问题了,可能我会回答比较慢吧,我不知道是否切题)

2.面试官:Controller和RestController的区别?

说实在的我平时用的都是RestController,Controller见都没见过几次(好像当初上课时也是几笔带过确实没准备,但平时的确没注意到过,真无脑RestController[doge])

3.面试官:左连接与自连接的区别

这个我是很了解的 ,左连接是一种外连接(Outer Join),它返回左表中的所有记录,以及右表中符合条件的记录。如果左表的某条记录在右表中没有匹配的记录,则结果集中对应右表的字段将包含NULL值。自连接一样的。

4.面试官:用on进行筛选???(上题中的连接有on之类的)

我印象里on是用来连接两个表的,为什么也能用来筛选?用这个更好吗?为什么筛选要用on?不用where之类的?

AI回答:ON 子句和 WHERE 子句在SQL查询中用于不同的目的,尽管它们看起来都能起到某种“筛选”数据的作用。理解它们之间的区别对于编写有效且意图明确的查询非常重要。

  • ON 子句:主要用于指定连接条件,即定义两个表之间如何关联。当你执行如JOIN(包括INNER JOINLEFT JOIN等)操作时,ON子句用来说明基于哪些列来匹配两个表中的行。例如,在一个INNER JOIN操作中,只有那些满足ON子句中指定条件的行会被包含在结果集中。

  • WHERE 子句:用于过滤最终的结果集,即在所有连接操作完成后,决定哪些行应该被返回。它可以在不考虑表间关系的情况下直接对行进行条件筛选。

虽然有时候ONWHERE看起来可以互换使用(尤其是在简单的INNER JOIN情况下),但它们的应用场景和效果是有区别的:

  1. 逻辑清晰性:使用ON来指定连接条件有助于保持查询逻辑上的清晰,让阅读代码的人更容易理解你为什么把这两个表关联起来以及是如何关联的。而WHERE则更适合作为一种全局的过滤器来限定返回的数据。

  2. 不同类型的JOIN行为:对于某些类型的JOIN(比如LEFT JOINRIGHT JOIN),使用ONWHERE可能会产生不同的结果。ON允许你在连接时就应用条件,从而影响哪些行被加入到结果集中;而WHERE则是在整个连接过程完成之后才开始过滤结果集。例如,在LEFT JOIN中,如果在WHERE子句中添加了右表的过滤条件,可能会无意中将左表中的部分记录排除掉(因为没有匹配项,所以这些记录对应的右表字段将是NULL,可能不符合WHERE子句中的条件)。

  3. 性能考量:虽然现代数据库管理系统非常擅长优化查询,但在理论上,恰当地使用ON子句来定义连接条件可以帮助数据库更好地理解你的查询意图,从而可能生成更有效的执行计划。

他可能想问我知道on与where的区别不同类型的JOIN行为这一块的,但是我不认为是on的作用。(待求解on真的可以筛选吗,做过的题目还是日常都没遇到过)

5.面试官:RequestBody注解了解吗?

一开始没听到注解两个字以为是请求里的RequestBody(敲前端敲得,天天测接口),其实是controller里那个注解请求体

AI回答:@RequestBody 是 Spring 框架中的一个注解,主要用于控制器(Controller)的方法参数上。它用于指示一个方法参数应该绑定到HTTP请求的内容体(body)。通常情况下,这个注解被用来处理来自客户端的POST或PUT请求,特别是当请求体包含JSON或XML格式的数据时。

以下是 @RequestBody 注解的一些关键点:

  • 数据转换:Spring会自动将请求体中的数据转换为Java对象。这意味着如果客户端发送的是JSON数据,Spring可以将其转换成相应的Java对象,前提是需要正确的配置如Jackson或Gson这样的库来支持这种转换。

  • 使用场景:当你希望接收复杂的对象作为请求的一部分时,@RequestBody 就非常有用。例如,在构建RESTful Web服务时,你可能需要从客户端接收一个用户对象,并且这个用户对象包含了多个属性,此时就可以使用 @RequestBody 来直接将这些数据映射到一个用户实体类中。

  • 与@ResponseBody对比:需要注意的是,@RequestBody 用于方法参数上,表示要将请求体的内容转换为方法参数的对象;而 @ResponseBody 则是用在方法声明上,表示该方法返回的对象应该直接写入HTTP响应体中,而不是被视为一个视图名称。

我只能说了解,平时用它映射数据转为对象

6.面试官:选取score表里所有专业所有学科最高分

简单的sql,max(成绩) 后group by 专业,学科就行(其实有bug,有些专业有相同学科,所求是所有专业所有学科最高分?怎么断句?,其实这个问题最大的bug是所有的全放一个表上,不过面试无所谓了,平时不这么干的)

最后问我薪资期望:其实我预期是8000,但我之前问了实习生也是大小周(工作大小周),而且嘉兴这边通勤算不上方便,转正后8500应该不或许过分吧,但后面我观察了一下当我将工资降到6,7千时他们比较赞同,我或许确实没怎么考虑杭州与嘉兴的发展差距,但是如果说在杭州与嘉兴这边工作比较一下 首先房租顶多差个3,4百,但是我还是喜欢双休(我要自学的,单休我只会睡觉),其实我老家那边编程老师都有8000,还双休。

我估计进去后工资不会太高,而且我不太看好发展前景和未来自己的规划,我8000买的不是工作,还有我一个月将近3天的时间,通过率估计:40%,就职意向:抗拒。钱和双休必须给一个。

这年头找个双休的工作和犯天条一样。不过也学到一点,面试需要引导面试官,刻意去引导,不然面试官会随意提问反而使自己陷入被动。

要表达清晰不要模糊,说出的知识点要自己熟知,说出口前要排个序,因为面试官只记得前几个(其实我也一样嘿嘿)。