Java开发面试四
问题一:MyBatis分页你是如何实现的
1、使用Limit关键字实现分页
- mapper代码:利用limit关键字写出分页的查询语句(sql)
- 业务层直接调用;
- 控制层直接调用;
2、使用RowBounds类分页
- 在实际开发中不建议使用这个方法;
- Dao层定义好所要传输的分页信息,类型为RowBounds;
- Mapper层,使用Sql查询的是所有的数据,之后在业务层进行分页,比较占用内存
- 业务层,将PageInfo信息封装成RowBounds,调用DAO层方法;
- 控制层直接调用;
- 实际上是直接全查数据表,之后Java代码写分页,其实还是物理分页,不是内存分页;
- 其中的属性:offset:起始行数;limit:需要的数据行数 ;取出来的数据就是:从第offset+1行开始,取limit行;
3、使用PageHelper分页插件
- 引入PageHelper的依赖;
- 配置PageInterceptor;
- mapper依然是查询所有数据;
- 为DAO层再封装一次方法;
- 业务层直接调用Handler
- 控制层直接调用
- 配置MyBatis核心配置文件;(plugins)
问题二:对Spring的IOC的理解
1、Spring的优点
- Spring的DI机制将对象之间的依赖关系交由框架处理,降低了组件的耦合性;
- Spring的AOP,支持将一些通用的任务,如安全、事务、日志、权限等进行集中管理,从而提供更好的复用;
2、IOC的理解
- IOC,Inversion of Control,控制反转,是指将对象的控制权转给Spring框架,由Spring来负责控制对象的生命周期(比如:创建、销毁)和对象间的依赖关系。
- 通俗的描述:以前创建对象的时机和主动权都是由自己把控,如果在一个对象中使用另外的对象,就必须去创建依赖对象,使用完之后还需要进行销毁。对象始终都会和其他的接口或者类耦合起来。 IOC则是由专门的容器来帮忙创建对象,当需要某个对象的时候,不需要自己主动创建。 而是告诉Spring容器,它会在适当的时候,把你想要的对象主动给你。
- 在IOC中,所有的对象都被Spring控制,控制对象生命周期而不再是引用它的对象,而是Spring容器。 由Spring容器帮助我们创建,查找,以及注入依赖对象,而引用对象只是被动的接受依赖对象,所以叫做控制反转
3、对于DI的理解
- DI的关键就是,在程序运行时,动态的向某个对象提供它所需要的其他对象,通过DI(依赖注入)实现的,就是应用程序在运行时依赖IOC容器来动态注入对象所需要的外部依赖。具体是通过反射实现注入 ,反射允许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性。
问题三、MySQL中插入表情包时报错
1、MySQL5.5之后的变化
- 在MySQL5.5.3之后,增加了utf8mb4的编码,专门用来兼容四字节的unicode。
- MySQL的utf8编码的最大字符长度为3字节 ,如果遇到插入4字节时 ,就会报插入异常。
2、解决办法
- 修改数据库的配置:default-character-set=utf8mb4;
- 命令行修改数据库:ALTER DATABASE t_yown_userdb CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
问题四:支付宝模拟支付如何判断是对应的用户支付了要买的东西
支付宝有两个通知:异步通知、同步通知;
1、异步通知
- 写一个接口公开给支付宝,当用户在支付宝支付成功之后,我把我的地址给他,它会调用地址,把支付成功的参数传过来。我得到之后就可以判断。
2、同步通知
- 每间隔几秒去查支付宝接口,我主动去查。这样不好。一直循环去查。