6-13 高频面试题回答
来源:6-13 思考:高频面试题(持续更新)

Rainary
2021-09-28
- 什么是物理分页,什么是逻辑分页?
物理分页(后端分页):每次只从数据库查出当前页的数据,并查出总条数,前端显示页码和数据
逻辑分页(前端分页):数据一次性查询到前端,由前端根据总数据,来设置分页页码和当前页数据
适用场景:
物理分页适用于数据量大、更新频繁的场景
逻辑分页适用于数据量少、更新不频繁的场景
- 扩展:什么是物理删除,什么是逻辑删除?
逻辑删除 是指文件没有被真正的删除,只不过是文件名的第一个字节被改成操作系统无法识别的字符。通常这种删除操作是可逆的,就是说用适当的工具或软件可以把删除的文件恢复出来。
物理删除是指文件存储所用到的磁存储区域被真正的擦除或清零,这样删除的文件是不可以恢复的。
- Mysql的分页关键字是什么?
LIMIT关键字
集成PageHelper插件后,在service层可直接使用
PageHelper.startPage(page, size)
page从1开始
获取分页信息
PageInfo<Ebook> pageInfo = new PageInfo<>(ebookList);
pageInfo.getTotal();
pageInfo.getPages();
PageHelper原理:Mybatis拦截器,拦截到SQL后,增加limit关键字
只对第一个遇到的SQL起作用
4.数据库ID有哪些设计方法,都有什么优缺点?
自增长ID
特点:
数值类型,值递增,由数据库内部生成
优点:
是最简单的方式,开发简单,性能优秀
缺点:
不适合分表分库场景,会出现主键冲突,ID重复,这是硬伤
会有N+1次查询问题,Java代码想获取ID,需要再查询一次
UUID
特点:
字符串类型,值没什么规律
优点:
适用于分表分库场景
UUID一般由Java代码生成,Java不需要查询就能知道ID
缺点:
性能不如自增
雪花算法
特点:
数值类型,由Twitter提供的分布式ID算法,递增
优点:
适用于分表分库场景,就是为这场景而生的
由Java代码生成,Java不需要查询就能知道ID
所有需要生成唯一ID的都可用雪花算法,比如登录token、日志编号等
缺点:
性能稍稍不如自增
生成的值较长,传递到前端number类型容易出现精度丢失,可以转成字符串解决
总结
如果是简单的小项目,可以考虑用自增ID
如果是中大型项目,推荐用雪花ID
至于UUID,因为有雪花算法的存在,所以可以放弃UUID
但是,小项目我也建议用雪花算法。以后做的项目多了,就不至于一会是自增ID,一会是雪花ID,不至于思维跳跃
6.什么是前端校验?什么是后端校验?
前端校验就是表单验证,后端校验就是接口参数校验。使用validation组件对接口请求的实体类通过NotNull等注解实现检验。
借助浏览器开发者工具,可以修改界面元素属性,比如将不可编辑变为可编辑,将不可点击变为可点击。
或者找到按钮提交的接口和请求参数,再利用接口测试工具,直接访问后端接口,完美绕过界面校验。
只做前端校验:会有安全问题
只做后端校验:会有服务器压力问题
正解:前端校验+后端校验
7.你们项目是如何处理异常的?
编写 统一异常处理类ControllerAdvice注解,ExceptionHandler注解对某种异常进行统一处理
2回答
-
点赞点赞点赞!!!
第2题纠正下,我的原意是问的数据库的物理删除、逻辑删除,一般是增加一个删除标识字段来实现逻辑删除。
112021-09-29 -
Rainary
提问者
2021-09-29
第2题纠正下,数据库的物理删除,直接使用delete、drop删除了表数据。
数据库的逻辑删除:通常使用一个is_deleted字段标示行记录是不是被删除(或者使用一个status字段代表所谓的“删除”状态),在逻辑上是数据是被删除的,但数据本身是依然存在的。
物理删除一定程度上删除了暂时“无用”的数据,降低了表的数据量,对性能肯定是有好处的;但是如果没有备份的话,数据很难恢复。
逻辑删除恢复的话只要修改is_deleted等类似的状态标示字段就可以了,但是表的数据量肯定会比物理删除增加了,并且查询时经常要考虑到is_deleted字段,对索引都会有影响。
10
相似问题