Java开发常见入坑面试题总结
一、抽象类和接口的使用场景
抽象类的使用场景:
1、既想约束子类有共同的行为,又想拥有自己的方法,又能拥有实例变量
接口的应用场景:
- 约束多个类拥有统一的行为,但是不在乎每一个类是如何实现的。
- 作为能够实现特定功能的标识存在,或者是什么都不做的纯粹的标识
- 实现类具备很多不同的功能,但是这些功能没有什么联系
- 使用接口的引用调用具体实现类的方法
二、抽象类和接口的区别?
1、抽象类对变量没有限制,接口只能包含常量
2、抽象类拥有构造方法,接口没有构造方法
3、抽象类中的方法可以是抽象的,也可以不是抽象的,但是接口中的方法必须是public abstract的,
三、如何进行单元测试?
在代码编写完成之后,进行单元测试主要分为两个步骤:
- 人工静态检查
该阶段主要保证代码算法的正确性和逻辑性,尽可能的发现程序中没有发现的错误。
- 动态执行跟踪
执行待测程序,将实际运行结果和预期结果进行比较,发现其中存在的错误
四、如何实现低耦合?
1、少用继承,多用接口隐藏实现的细节
2、模块的功能设计尽可能的单一
3、遵循一个定义只在一个地方出现
4、少用全局变量
5、类中的属性和方法少用public,多用private
6、少用“硬编码”,尽量避免直接使用sql语句操作数据库
7、尽量减少模块直接操作或调用其他模块,
8、尽量使用数据耦合,少用控制耦合,限制公共耦合的范围,不用内容耦合
五、聚集索引和非聚集索引的区别?
聚集索引:该索引中键值的逻辑顺序决定了表中相应行的物理顺序
聚集索引的使用情况:
- 列经常被分组排序
- 返回某范围内的数据
- 数据列中的数据基本不同
- 主键列和外键列
非聚集索引:数据存储在一个地方,索引存储在另一个地方,索引的指针指向数据的存储位置
非聚集索引的使用情况:
- 列经常用分组排序
- 频繁更新的列
- 主键列和外键列
- 频繁修改索引列
六、springboot中的容器有什么用?
1、添加组件(@configtion、@bean、Component、@Controller、@Service、@Repository)
2、导入xml配置文件
七、shiro中的token有什么用?是如何生成的?
Token的使用比session更有用,因为session过多的时候会占用服务器资源,而且在分布式系统中很难完成session的共享,
Token和session的作用都是对用户请求进行合法性认证。
Token存放位置:
Token会放置在请求头中,在前后端分离的时代,服务器认证通过之后,会返回给客户端一个token,在vue项目中,将这个token设置在全局cookie中,每次请求通过interceptors.request.use这个拦截,动态地为每个请求带上刚刚那个token,
Token的实现过程:
1.用户登录校验,校验成功后就生成Token并返回给客户端。
2.客户端收到数据后保存在客户端的cookie中
3.客户端每次访问API都从cookie中取出token并携带到服务器端。
4.服务器端采用filter过滤器校验请求携带的token。校验成功则返回请求数据,校验失败则返回错误码
不存储token,无论在缓存中或者数据库中的验证过程:在用户登录认证完成之后,服务器会向客户端返回一个加了密的token,这个token是由用户请求的部分信息、请求的URL、时间戳这三部分融合在一起形成的,在客户端再次发送请求的时候,会重新根据请求的部分内容、请求的URL、时间戳生成一个新的token,然后将这个新的token和之前的token进行比较,如果相同则这次合法。这样token不会占用存储空间,而且加密的过程要比从数据库中进行查询快得多。
八、vue和后台交互时如何规范接口?
一般常使用代理方式配置接口
欢迎小伙伴们补充指正!
我是灰小猿,我们下期见!
- 点赞
- 收藏
- 关注作者
评论(0)