失败的面试小记,项目面,酷家乐面筋

1.SpringBoot什么版本的?

使用的是 2.0.7版本

2 用了哪些Starter?

Web , Thymeleaf ,JPA,ElasticSearch等等

3为什么要用Spring Boot的Starter ,而不是直接导入官方的jar

可以认为starter是一种服务(和JS的插件类似)——使得使用某个功能的开发者不需要关注各种依赖库的处理,不需要具体的配置信息,由Spring Boot自动通过classpath路径下的类发现需要的Bean,并织入bean

个人理解 大概就是 一个Starter 里包含了许许多多的库,比方说spring-boot-starter-web 里面包含了 tomcat、json、webmvc等等库,如果用传统spring方式导入,每一个都得去手动配置,非常麻烦,如果通过starter方式,就能用SpringBoot的自动配置功能对这些类库进行一个默认的配置,从而方便开发人员。

3.1
回答了之后可能会问 自动配置是什么 所以也写在这吧

Spring Boot启动的时候会通过@EnableAutoConfiguration注解找到META-INF/spring.factories配置文件中的所有自动配置类,并对其进行加载,而这些自动配置类都是以AutoConfiguration结尾来命名的,它实际上就是一个JavaConfig形式的Spring容器配置类,它能通过以Properties结尾


作者:圣斗士Morty
来源:CSDN
原文:https://blog.csdn.net/u014745069/article/details/83820511
版权声明:本文为博主原创文章,转载请附上博文链接!

4 让你写个starter 你会怎么写?

1、编写自己的properties类(用来加载属性文件进行默认的配置)和核心服务类(要自动配置的bean)
2、自定义AutoConfiguration 配置类CustomerAutoConfiguration ,通过@Condition*系列注解控制自动配置的条件。
3、然后在src/main/resources新建文件夹META-INF,然后新建一个spring.factories文件
在里面使用org.springframework.boot.autoconfigure.EnableAutoConfiguration指定我们自定义的自动配置类的全路径。
/----------------------
作者:斗者_2013
来源:CSDN
原文:https://blog.csdn.net/w1014074794/article/details/88539284
版权声明:本文为博主原创文章,转载请附上博文链接!

5 你为什么不用MyBatis 而用JPA?

。。。我是因为在学JPA所以用了JPA 。当时傻了 ,就直接这么说了。
下次再问 , 就说JPA 是最完全的orm框架,熟练的开发者根本不需要关注数据库是怎么样的,只要关注代码层面就可以了,而且JPA在单表查询上只需要增加对应名字的抽象方法就可以了,不需要自己写sql,假如以后换了数据库也不需要重新写SQL语句。

6 在使用JPA的过程中遇到过什么坑吗?如何解决的?

只读操作情况,如果对读取对象进行了属性修改操作,那么JPA会认为你要修改这个实体,使用hibernate的情况下回默认执行一个update的SQL,然后你懂得由于没有写权限,这个方法开始报错了;
级联查询的时候session关闭了,当时把懒加载关掉就好了。

7 登录注册在哪判断是否合法的呢?为什么?

前端后端都判断了,前端判断是因为用户体验,网页不刷新就判断好然后提示给用户,但是假如别人自己用类似HttpClient这种工具封装了post请求发送给你的后端接口的话,前端的判断就失效了。为了安全,还是要都判断一下的。
另一方面,前端判断确实是为了用户的体验,在不刷新的情况下提示给用户信息,但是这种验证都是基于js的,浏览器可以关闭或者篡改js,从而前端的判断就无效了,因而 后端需要再度进行判断。

7.1 为什么会让别人知道你的后端接口?

直接右击查看源代码,前端的接口暴露是不可避免的。

8 SpringSecurity只用了权限管理吗?还用了什么别的地方?

用了自带的BC加密对密码进行加密,在存储进数据库,还有Remeber-me功能。

8.5 你是怎么测试你的注册页面的?

9 假如数据库里用户表有100万数据,要找前5个 如何做?

根据 order by id 或者create_time asc limit 0, 5
9.1 面试官问我 如果根据id查 , 为什么不直接 id<=5
有可能user表中数据被删除,从而导致 最前面5个id为 1,3,4,5,6。

10 查询的速度如何?为什么?

因为只要查询5条数据,效率还是可以的

具体原因—> https://blog.csdn.net/fangkang7/article/details/86673078 放在文章末尾了

11 B+树定义

B+树是对B树的一种变形树,它与B树的差异在于:

有k个子结点的结点必然有k个关键码;
非叶结点仅具有索引作用,跟记录有关的信息均存放在叶结点中。
树的所有叶结点构成一个有序链表,可以按照关键码排序的次序遍历全部记录。

12 如果不再数据库里,放在数组里应该怎么快速找到前5个呢

(Top K问题)

最好的方法—> 维持一个最小堆,遍历一遍即可。(时间复杂度O(N logk) )
次好的方法-- > 使用快排,但是不是两边都排,只往大的那一边排(平均也是O(Nlogk) , 但是不够稳定,面试官会问你有没有优化的方法)
最烂的方法—> 冒泡5次 O(N * K) 【及其慢,千万不要用这个回答】

一百万数据的表中查数据快的原因

1.根本原因在于主键索引和limit 5 中,一般来说 全表搜索的话 且是select * 的话100万确实很慢,但是走主键索引,直接找到对应的一开始的id 然后因为 b+树底层是双向链表,所以无论是asc 还是 desc 5条数据的话就只要找5次即可,如果没有limit则要全表搜索自然就慢了。
2.如果 id确定不会被删除,id<=5 直接走主键索引 也是很快的。
3.如果起点过大,还可以修改sql为 select * from user where id >( select id from user order by id asc limit 100000 , 1) order by id asc limit 0 , 1 ;也是可以的;注: 不可以用 where id in ()这样子不会触发 主键索引,还是全表扫描 ; 需要用 id> 才行。 原因: 不找* , 只找id减少查询的开销,然后再找到对应的详细内容。

面试的时候 只说了因为 主键索引 ,b+树定义也不清楚 自然就凉了;

b树定义 及 b+ 树

根结点至少有两个孩子(子节点)
每个结点至多有M个子节点
除了根结点和叶结点,每个结点至少有[M/2]个孩子:孩子个数:[M/2]~M
除了根结点,每个结点的关键字个数n必须满足:[M/2]-1<= n<=M-1
所有叶子结点出现在同一层
位于父节点两个key之间的子节点的值位于父节点两个key对应的value之间。
在这里插入图片描述

Top K 中的最小堆

根节点 为 最小
左右子树 也为 最小堆

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值