分页

阿里java编码规范考试总结

匿名 (未验证) 提交于 2019-12-02 20:41:15
前几天,考了阿里编码规范刚好80险过,总结出以下例题,答案有错,欢迎评论 1.关于方法的返回值是否可以为null,下列说法正确的是(BCD) A.方法的返回值可以为null,如果是集合,必须返回空集合 B.方法的返回值可以为null,不强制返回空集合,或者空对象等 C.方法实现者必须添加注释,充分说明什么情况下会返回null值 D.防止NPE是调用者的责任 A.测试数据入库时加特殊前缀标识 B.测试数据使用独立的测试库 C.自动回滚单元测试产生的脏数据 D.无须区别,统一在业务代码中进行判断和识别 A.不要使用count(列名)或count(常量)来替代count(*) B.count(列名)会统计值为null的行,而count(*)不会统计 C.当某一列的值全是NULL时,count(列名)返回0 D.在程序代码中写分页查询逻辑是,若count为0应直接返回。以避免执行后面的查询 4.数组使用Arrays.asList转化为集合,下列说法哪些是正确的:(ACD) A.数据元素的修改,会影响到转化过来的集合 B.数组元素的修改,不会影响到转化过来的集合 D.Arrays.asList体现的是适配器模式,只是转换接口,后台的接口仍是数组 5.关于异常处理,下列哪些说法是正确的:(ABCD) A.try块放到了事务代码中,catch异常后,如果需要回滚事务,必须手动回滚事务 B

分页插件PageHelper的使用

匿名 (未验证) 提交于 2019-12-02 20:37:20
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>4.1.6</version> </dependency> 2. 在Mybatis配置文件中添加pagehelper插件配置: <plugins> <plugin interceptor="com.github.pagehelper.PageHelper"> <property name="dialect" value="oracle"/> <!-- 该参数默认为false --> <!-- 设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用 --> <!-- 和startPage中的pageNum效果一样--> <property name="offsetAsPageNum" value="true"/> <!-- 该参数默认为false --> <!-- 设置为true时,使用RowBounds分页会进行count查询 --> <property name="rowBoundsWithCount" value="true"/> <!-- 设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果 --

MySQL分页查询优化

隐身守侯 提交于 2019-12-02 20:14:40
转自: https://www.cnblogs.com/youyoui/p/7851007.html 当需要从数据库查询的表有上万条记录的时候,一次性查询所有结果会变得很慢,特别是随着数据量的增加特别明显,这时需要使用分页查询。对于数据库分页查询,也有很多种方法和优化的点。下面简单说一下我知道的一些方法。 准备工作 为了对下面列举的一些优化进行测试,下面针对已有的一张表进行说明。 表名:order_history 描述:某个业务的订单历史表 主要字段:unsigned int id,tinyint(4) int type 字段情况:该表一共37个字段,不包含text等大型数据,最大为varchar(500),id字段为索引,且为递增。 数据量:5709294 MySQL版本:5.7.16 线下找一张百万级的测试表可不容易,如果需要自己测试的话,可以写shell脚本什么的插入数据进行测试。 以下的 sql 所有语句执行的环境没有发生改变,下面是基本测试结果: select count(*) from orders_history; 返回结果:5709294 三次查询时间分别为: 8903 ms 8323 ms 8401 ms 一般分页查询 一般的分页查询使用简单的 limit 子句就可以实现。limit 子句声明如下: SELECT * FROM table LIMIT

使用SMM框架开发企业级应用-----面试题

▼魔方 西西 提交于 2019-12-02 17:55:25
Spring中的bean   组成应用程序的主体及由Spring IoC容器所管理的对象,被称之为bean。   简单地讲,bean就是由IoC容器初始化、装配及管理的对象   Spring中的bean默认都是单例的(scope="singleton"默认值)   我们可以设置为多例(scope= "prototype") bean的作用域   当scope="singleton"时     Singleton是单例类型,就是在创建起容器时就同时自动创建了一个bean的对象     不管你是否使用,他都存在了,每次获取到的对象都是同一个对象   当scope= "prototype"时     Prototype是原型类型,它在我们创建容器的时候并没有实例化     而是当我们获取bean的时候才会去创建一个对象,而且我们每次获取到的对象都不是同一个对象   1.通过BeanFactory或者ApplicationContext获取实例Bean   2.set属性注入   3.如果Bean实现BeanNameAware接口,则调用setBeanName(String name)方法设置Bean的name属性   4.如果Bean实现BeanFactoryAware接口,则调用setBeanFactory(BeanFactory beanFactory)方法,设置创建该Bean的工厂

Spring 面试题

久未见 提交于 2019-12-02 17:06:14
1. 有哪些不同类型的IoC(依赖注入)方式 ? 解释说明下 构造器依赖注入 构造器依赖注入通过容器触发一个类的构造器来实现的,该类有一系列参数,每个参数代表一个对其他类的依赖。 Setter方法注入 Setter方法注入是容器通过调用无参构造器或无参static工厂 方法实例化bean之后,调用该bean的setter方法,即实现了基于setter的依赖注入。 2. 最佳实践中,通常一个Xml映射文件,都会写一个Dao接口与之对应,请问,这个Dao工作原理是什么? Dao接口里的方法,参数不同时,方法能重载吗?   Dao接口,就是人们常说的Mapper接口,接口的全限名,就是映射文件中的namespace的值,接口的方法名,就是映射文件中MappedStatement的id值,接口方法内的参数,就是传递给sql的参数。Mapper接口是没有实现类的,当调用接口方法时,接口全限名+方法名拼接字符串作为key值,可唯一定位一个MappedStatement,举例:com.mybatis3.mappers.StudentDao.findStudentById,可以唯一找到namespace为com.mybatis3.mappers.StudentDao下面id = findStudentById的MappedStatement。在Mybatis中,每一个<select>、

面试题

China☆狼群 提交于 2019-12-02 16:13:39
1. 有哪些不同类型的IoC(依赖注入)方式 ? 解释说明下 构造器依赖注入 构造器依赖注入通过容器触发一个类的构造器来实现的,该类有一系列参数,每个参数代表一个对其他类的依赖。 Setter方法注入 Setter方法注入是容器通过调用无参构造器或无参static工厂 方法实例化bean之后,调用该bean的setter方法,即实现了基于setter的依赖注入。 2. 最佳实践中,通常一个Xml映射文件,都会写一个Dao接口与之对应,请问,这个Dao工作原理是什么? Dao接口里的方法,参数不同时,方法能重载吗?   Dao接口,就是人们常说的Mapper接口,接口的全限名,就是映射文件中的namespace的值,接口的方法名,就是映射文件中MappedStatement的id值,接口方法内的参数,就是传递给sql的参数。Mapper接口是没有实现类的,当调用接口方法时,接口全限名+方法名拼接字符串作为key值,可唯一定位一个MappedStatement,举例:com.mybatis3.mappers.StudentDao.findStudentById,可以唯一找到namespace为com.mybatis3.mappers.StudentDao下面id = findStudentById的MappedStatement。在Mybatis中,每一个<select>、

面试题

拥有回忆 提交于 2019-12-02 16:06:52
1. 有哪些不同类型的 IOC (依赖注入)方式? 构造器依赖注入: 构造器依赖注入通过容器触发一个类的构造器来实现的,该类有一系列参数,每个参数代表一个对其他类的依赖。 Setter 方法注入: Setter方法注入是容器通过调用无参构造器或无参static工厂方法实例化bean之后,调用该bean的setter方法,即实现了基于setter的依赖注入。 2.Hibernate是如何延迟加载的 当调用Session上的load()方法加载实体时,就会采用延迟加载 当Session加载某个实体时,会对这个实体中的集合属性值采用延迟加载 当Session加载某个实体时,会对这个实体所单端关联(one-to-one,many-to-one)的另一个实体对象采用延迟加载 总结一句话延迟加载就是分为类的延迟加载和集合的延迟加载,即类的延迟加载包括用load()方法加载实体和加载实体所单向关联的另一个实体的对象 3.Mybatis是如何进行分页的?分页插件的原理是什么? Mybatis使用RowBounds对象进行分页,它是针对ResultSet结果集执行的内存分页,而非物理分页。可以在sql内直接书写带有物理分页的参数来完成物理分页功能,也可以使用分页插件来完成物理分页。 分页插件的基本原理是使用Mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql

Spring面试题

◇◆丶佛笑我妖孽 提交于 2019-12-02 16:05:27
1. 有哪些不同类型的 IoC( 依赖注入 ) 方式 ? 解释说明下 构造器依赖注入 构造器依赖注入通过容器触发一个类的构造器来实现的,该类有一系列参数,每个参数代表一个对其他类的依赖。 Setter方法注入 Setter方法注入是容器通过调用无参构造器或无参static工厂 方法实例化bean之后,调用该bean的setter方法,即实现了基于setter的依赖注入。 2. 最佳实践中,通常一个 Xml 映射文件,都会写一个 Dao 接口与之对应,请问,这个 Dao 工作原理是什么 ? Dao 接口里的方法,参数不同时,方法能重载吗?   Dao 接口,就是人们常说的 Mapper 接口,接口的全限名,就是映射文件中的 namespace 的值,接口的方法名,就是映射文件中 MappedStatement 的 id 值,接口方法内的参数,就是传递给 sql 的参数。 Mapper 接口是没有实现类的,当调用接口方法时,接口全限名 + 方法名拼接字符串作为 key 值,可唯一定位一个 MappedStatement ,举例: com.mybatis3.mappers.StudentDao.findStudentById ,可以唯一找到 namespace 为 com.mybatis3.mappers.StudentDao 下面 id = findStudentById 的

Spring面试题

狂风中的少年 提交于 2019-12-02 16:04:36
1.有哪些不同类型的IOC(依赖注入)方式? 1.Set 注入 2.构造器注入 3.静态工厂的方法注入 4.实例工厂的方法注入 Setter 注入:对于习惯了传统 javabean 开发的程序员,通过 setter 方法设定依赖关系更加直观。 如果依赖关系较为复杂,那么构造子注入模式的构造函数也会相当庞大,而此时设值注入模式则更为简洁。如果用到了第三方类库,可能要求我们的组件提供一个默认的构造函数,此时构造子注入模式也不适用。 构造器注入:在构造期间完成一个完整的、合法的对象 。所有依赖关系在构造函数中集中呈现。依赖关系在构造时由容器一次性设定,组件被创建之后一直处于相对“不变”的稳定状态。只有组件的创建者关心其内部依赖关系,对调用者而言,该依赖关系处于“黑盒”之中。 静态工厂的方法注入:利用静态工厂方法可以把bean注入到IOC容器中。 在XML文件中配置bean时,要指定class的属性为工厂的类;factory-method属性指定工厂类中工厂方法,用于创建bean;constrctor-arg用于给工厂方法传递参数 实例工厂方法:将对象的创建过程封装到另外一个对象实例的方法里。 当客户端需要请求对象时 , 只需要简单的调用该实例方法而不需要关心对象的创建细节。 2.最佳实践中,通常一个Xml映射文件都会写一个Dao接口与之对应,请问,这个Dao工作原理是什么