目录
1、以下哪个过程可以创建Class对象?
2、下列switch代码段输出结果是()
3、redis的数据类型
4、⭐以下关于Servlet生命周期说法错误的是( )
5、⭐下面有关SPRING的事务传播特性,说法错误的是?
6、⭐NoSQL的含义是()
7、对于abstract声明的类,下面说法正确的是?
8、能用来修饰interface的有?
9、⭐关于StringRedisTemplate,说法错误的是()
10、以下HTTP响应状态码的含义描述错误的是?( )
11、关于SpringCache中的Cacheable注解,说法错误的是?
12、⭐以下不属于Spring bean的生命周期是
13、执行完以下代码 int [ ] x = new int[10] ;后,以下哪项说明是正确的
14、⭐Spring依赖注入(DI)的方式正确的有:
15、下面哪两项的数组初始化语句是正确的?
16、Spring中bean的作用域
17、关于SpringCache中,CacheAble和CachePut注解说法正确的是?
18、Spring 框架中都用到的常用设计模式有哪些
19、⭐关于redis中list类型的说法,正确对的是()
20、⭐以下关于final关键字说法错误的是
21、Spring中处理全局异常常用注解
22、以下属于JAP基本注解的是
23、下面哪些对于Servlet的描述是正确的?
24、下面哪个Java语句声明了一个适合于创建50个字符串对象数组的变量?
25、Maven项目的坐标位置,由那些部分组成
26、⭐ArrayList和linkedList的区别
27、⭐Redis 的String、Hash、List、zset、Set集合在项目中的应用,请结果业务举例说说
28、⭐谈谈你对ORM的理解?
29、说说父项目中dependencyManagement标记的作用
30、已知: Integer a = 129;Integer b = 129;a==b 的结果是什么?为什么?
1、以下哪个过程可以创建Class对象?
加载阶段
解题思路: 类加载
2、下列switch代码段输出结果是()
int a = 0 ;
while ( a < 5 ) {
switch(a){
case 0:
case 3 : a = a + 2;
case 1 :
case 2 : a = a + 3;
default : a = a + 5;
}
}
System.out.print ( a ) ?
10
3、redis的数据类型
有:stirng、hash、list、set、zset、bitmap、hyperloglog、geo
4、⭐以下关于Servlet生命周期说法错误的是( )
5、⭐下面有关SPRING的事务传播特性,说法错误的是?
解题思路: PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。
6、⭐NoSQL的含义是()
解题思路: NoSQL表示not only sql,含义为不仅仅只有sql,表明nosql的目的并不是取代sql,而是与sql互补。
7、对于abstract声明的类,下面说法正确的是?
8、能用来修饰interface的有?
public
解题思路: 接口访问控制符
9、⭐关于StringRedisTemplate,说法错误的是()
解题思路: D错误的原因:StringRedisTemplate的api可以接收String类型以外的参数,但是编译时不会报错,只有运行时才会报错
10、以下HTTP响应状态码的含义描述错误的是?( )
HTTP响应码为404表示请求的资源未被找到。具体含义是,客户端发送了一个请求到服务器,但服务器上并没有对应的资源或页面,因此服务器无法返回所要求的资源。
通常情况下,404响应码意味着请求的URL地址或者文件路径有误,或者请求中的查询条件不正确。如果服务器上曾经存在对应的资源,但现在已经不存在,则可以返回410响应码。
一般来说,当客户端收到404响应码时,会在界面上显示“找不到页面”或“页面不存在”的提示信息。
11、关于SpringCache中的Cacheable注解,说法错误的是?
12、⭐以下不属于Spring bean的生命周期是
服务 不是
解题思路: Spring bean的生命周期包括实例化、属性赋值、初始化、销毁四个阶段
13、执行完以下代码 int [ ] x = new int[10] ;后,以下哪项说明是正确的
多选题:
14、⭐Spring依赖注入(DI)的方式正确的有:
接口注入、setter方法注入、构造方法注入
15、下面哪两项的数组初始化语句是正确的?
int array[] = new int[] {1,2,3};
int array[] = new int[3]; array[0] = 1;array[1] = 2;array[2] = 3;
16、Spring中bean的作用域
singleton、prototype、request、session、application
解题思路: 提供的作用域中,常用的是singleton和prototype
17、关于SpringCache中,CacheAble和CachePut注解说法正确的是?
18、Spring 框架中都用到的常用设计模式有哪些
解题思路: Spring框架中使用到了很多涉及模式,有工厂模式、桥接模式、单例模式、策略模式、代理模式、观察者模式等
19、⭐关于redis中list类型的说法,正确对的是()
解题思路: D错误的原因:如果键已存在,则会追加新的元素到链表,而不是覆盖旧的链表
20、⭐以下关于final关键字说法错误的是
final是Java中的修饰符,可以修饰类、接口、抽象类、方法和属性 ×
final修饰的方法不能被重载 ×
这句话中的错误是,“final”不能修饰抽象类。因为抽象类是为了被子类继承和实现而设计的,因此抽象类不能被声明为 final,否则就不能被继承和实现。其他部分是正确的:
- final 可以修饰类、方法和属性。
- final 修饰的类不能被继承,final 修饰的方法不能被子类重写,final 修饰的属性一旦赋值就不能再改变。
- final 修饰的属性可以在定义时直接初始化,或者在构造方法中初始化。
- final 修饰的局部变量必须在定义时初始化,并且一旦赋值就不能再改变。
注意:接口可以有 final 的方法和属性,但接口本身不能被 final 修饰。
21、Spring中处理全局异常常用注解
解题思路: @ControllerAdvice:通过使用该注解定义同的异常处理类,@ExceptionHandler定义异常处理方法;
22、以下属于JAP基本注解的是
解题思路: @Entity用于标注将实体类
@Table用于指定实体类对应的表的名字
@Id用于标注某个字段对应数据库中的主键
@GeneratedValue用于表示某个字段对应的数据库表中的列的生成方式
23、下面哪些对于Servlet的描述是正确的?
24、下面哪个Java语句声明了一个适合于创建50个字符串对象数组的变量?
String a[];
String[] a;
Object a[];
25、Maven项目的坐标位置,由那些部分组成
解题思路:
①groupid:公司或组织域名倒序+项目名 < groupid>com.gly.maven< /groupid>
②artifactid:模块名 < artifactid>Hello< /artifactid>
③version:版本
26、⭐ArrayList和linkedList的区别
参考答案:
Array(数组)是基于索引(index)的数据结构,它使用索引在数组中搜索和读取数据是很快的。
Array获取数据的时间复杂度是O(1),但是要删除数据却是开销很大,因为这需要重排数组中的所有数据, (因为删除数据以后, 需要把后面所有的数据前移)
缺点: 数组初始化必须指定初始化的长度, 否则报错
例如:
int[] a = new int[4];//推介使用int[] 这种方式初始化
int c[] = {23,43,56,78};//长度:4,索引范围:[0,3]
List—是一个有序的集合,可以包含重复的元素,提供了按索引访问的方式,它继承Collection。
List有两个重要的实现类:ArrayList和LinkedList
ArrayList: 可以看作是能够自动增长容量的数组
ArrayList的toArray方法返回一个数组
ArrayList的asList方法返回一个列表
ArrayList底层的实现是Array, 数组扩容实现
LinkList是一个双链表,在添加和删除元素时具有比ArrayList更好的性能.但在get与set方面弱于
ArrayList.当然,这些对比都是指数据量很大或者操作很频繁。
27、⭐Redis 的String、Hash、List、zset、Set集合在项目中的应用,请结果业务举例说说
1、string是字符串类型,可以将字符串等文本或者图片信息存入redis缓存中,减轻对数据库的读写压力;
2、list是列表,在项目中可以实现排序的功能;
3、hash是散列表,键值对的集合,hset,hget,可以用来存放某个键包含的值数据;
4、set是无序唯一的集合,可以被用来存放不能重复的数据;
5、zset是有序唯一集合,可以根据score来进行排序,例如销量排行榜等。
参考答案:
1、注册发邮件,邮件验证码存储到Redis中,因为我们系统做了异步解耦,注册与发邮件是不同的系统,所以通过Redis的String类型存储验证码。
2、排行榜、top10, 根据购买量/积分作为redis zset集合的分值,从而实现有序存储。
3、库存,通过数据预热,初始化到Redis的 hash 类型集合中: key hashkey(bookId) count
4、项目中一些简单业务模块,比如:XX详情,通过Spring的缓存注册@cacheable实现缓存,这里要注意默认情况方法返回对象要实现序列化接口。
5、首页导航面包削,通过Redis的List集合实现有序存储。
6、首页根据类别查询图书列表,使用Redis的缓存注解@Cacheable
7、项目中购物车存储,使用了Redis的Hash类型: 用户id作为key bookid作为hashkey 购物项
8、省市区联动数据,在数据库中通过t_china表存储,为了减少数据库查询,提升性能,通过数据预热,把t_china表数据存储到Redis的Hash类型中。为什么使用Hash类型? 可以获取每一条记录的数据,方便使用。
9、t_china 省份城市区域表中,通过set集合缓存所有的省份
list.forEach(china -> {
redisTemplate.opsForSet().add(RedisConstant.PROVINCES, JSONUtil.toJsonStr(china));
});
28、⭐谈谈你对ORM的理解?
orm框架指的是对象-关系的映射,可以作为连接数据库和后端数据操作层之间的桥梁; 通过orm框架将数据库中的表和数据映射到对象类中,并根据注解和相关参数来设置属性和方法; 简化了数据库操作的流程,提高开发效率。
参考答案:
ORM 是 Object Relational Mapping 的缩写,译为“对象关系映射”,它解决了对象和关系型数据库之间的数据交互问题。
使用面向对象编程时,数据很多时候都存储在对象里面,具体来说是存储在对象的各个属性(也称成员变量)中。例如有一个 User 类,它的 id、username、password、email 属性都可以用来记录用户信息。当我们需要把对象中的数据存储到数据库时,按照传统思路,就得手动编写 SQL 语句,将对象的属性值提取到 SQL 语句中,然后再调用相关方法执行 SQL 语句。
而有了 ORM 技术以后,只要提前配置好对象和数据库之间的映射关系,ORM 就可以自动生成 SQL 语句,并将对象中的数据自动存储到数据库中,整个过程不需要人工干预。在 Java 中,ORM 一般使用 XML 或者注解来配置对象和数据库之间的映射关系。
解题思路: ORM 是 Object Relational Mapping 的缩写,译为“对象关系映射”,它解决了对象和关系型数据库之间的数据交互问题。 使用面向对象编程时,数据很多时候都存储在对象里面,具体来说是存储在对象的各个属性(也称成员变量)中。例如有一个 User 类,它的 id、username、password、email 属性都可以用来记录用户信息。当我们需要把对象中的数据存储到数据库时,按照传统思路,就得手动编写 SQL 语句,将对象的属性值提取到 SQL 语句中,然后再调用相关方法执行 SQL 语句。 而有了 ORM 技术以后,只要提前配置好对象和数据库之间的映射关系,ORM 就可以自动生成 SQL 语句,并将对象中的数据自动存储到数据库中,整个过程不需要人工干预。在 Java 中,ORM 一般使用 XML 或者注解来配置对象和数据库之间的映射关系。
29、说说父项目中dependencyManagement标记的作用
该标记是版本的依赖标签,负责维护版本号,父项目标记后,子项目中在添加依赖时就不需要手动添加版本号,交由父项目来统一管理。
参考答案:
Maven的dependencyManagement标签,这个标签只负责维护版本号,父项目在这里添加了依赖后,子项目在写依赖时不需要手动指定版本号了,(注意:在dependencyManagement标签中加入的依赖后Maven不会立即导入此依赖,而是在子项目引用此依赖的时候Maven在会开始导入依赖) ,所以,在子项目引用此依赖时,只需要写artifactId和groupId,而version则由dependencyManagement帮助你管理
解题思路: dependencyManagement标签主要用在在父项目中声明依赖的版本信息。
30、已知: Integer a = 129;Integer b = 129;
a==b 的结果是什么?为什么?
结果是false
首先,因为Integer是int基本数据类型的包装类,int的数值大小区间为-128-127,超出此范围; 其次,作为引用类型,==比较的是a和b的引用地址而不是数值大小,Integer类型比较数值大小可以用.equals()的方法。 a和b的引用地址不同,其比较结果为false。
参考答案:
对于这样直接赋值的Integer当值的范围在[-128,127]时候不会生成新的对象,直接把缓存中的对对象拿来用。Integer a=129;Integer b=129;分别会生成两个新的对象,这样的话就是false了。
解题思路: 包装类常量池