java面试类型题材

1.int和Integer区别?
Integer是int的包装类,int则是java的一种基本数据类型 
Integer变量必须实例化后才能使用,而int变量不需要 
Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值 。
Integer的默认值是null,int的默认值是0
2.List ArrayList, Map ,HashMap关系和区别。
List是接口,List特性就是有序,会确保以一定的顺序保存元素.
ArrayList是它的实现类,是一个用数组实现的List.
Map是接口,Map特性就是根据一个对象查找对象.
HashMap是它的实现类,HashMap用hash表实现的Map,就是利用对象的hashcode(hashcode()是Object的方法)进行快速散列查找
3.final关键字有什么作用?static关键字有什么使用?
static作用:是静态修饰符,什么叫静态修饰符呢?在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在,直到程序退出内存才会释放这个空间,也就是只要程序在运行,那么这块内存就会一直存在。
final作用:final关键字是最终的、最后的意思,在程序中可以用来修饰类、成员变量和方法的声明,由该关键字修饰的内容都是不可变的。
4.try,catch,finally里代码的执行顺序是什么?
异常处理中,try、catch、finally的执行顺序,大家都知道是按顺序执行的。即,如果try中没有异常,则顺序为try→finally,如果try中有异常,则顺序为try→catch→finally
5.简述Throwable与Exception.
Throwable是java.lang包中一个专门用来处理异常的类。它有两个子类,即Error 和Exception,它们分别用来处理两组异常。
Error用来处理程序运行环境方面的异常,比如,虚拟机错误、装载错误和连接错误,这类异常主要是和硬件有关的,而不是由程序本身抛出的。 
Exception是Throwable的一个主要子类。Exception下面还有子类,其中一部分子类分别对应于Java程序运行时常常遇到的各种异常的处理,其中包括隐式异常。比如,程序中除数为0引起的错误、数组下标越界错误等,这类异常也称为运行时异常,因为它们虽然是由程序本身引起的异常,但不是程序主动抛出的,而是在程序运行中产生的。
Exception 子类下面的另一部分子类对应于Java程序中的非运行时异常的处理(在下图中将它们直接属于Exception了),这些异常也称为显式异常。它们都是在程序中用语句抛出、并且也是用语句进行捕获的,比如,文件没找到引起的异常、类没找到引起的异常等。
6.简述构造方法。简述构造方法和普通方法的区别
特点:(1)构造方法名一定与类同名。(2)构造方法无返回值类型(void也不行)(3)构造方法可以没有(默认一个无参构造方法),也可以有多个构造方法。他们之间构成重载关系。(4)如果定义有参构造函数,则无参构造函数将被自动屏蔽。(5)构造方法不能被继承。(6)构造方法不能手动调用,在创建类实例的时候自动调用构造方法。
作用:(1)初始化对象,为对象赋初值。(2)简化我们为类字段赋值的代码。
区别:(1)构造方法一定与类同名,普通方法就可以不用。(2)构造方法无返回值类型(void也不行),普通方法可以返回。
7.简述servlet,doGet,doPost,HttpServletRequest,HttpServletResponse.
通过get方式提交的数据有大小的限制,通常在1024字节左右。也就是说如果提交的数据很大,用get方法就可需要小心;而post方式没有数据大小的限制,理论上传送多少数据都可以。
通过get传递数据,实际上是将传递的数据按照”key,value”的方式跟在URL的后面来达到传送的目的的;而post传递数据是通过http请求的附件进行的,在URL中并没有明文显示。
通过Get方式提交的数据安全性不高,而Post方式的更加安全。
HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中。
HttpServletResponse则是对服务器的响应对象。这个对象中封装了向客户端发送数据、发送响应头,发送响应状态码的方法。
8.简述HTTP协议。
超文本传输协议,是一种按照URL指示,将超文本文档从一台主机(Web服务器)传输到另一台主机(浏览器)的应用层协议,以实现超链接的功能
9.简述JDBC。preparedstatement ,statement 之间的区别。
10.Mybatis里#与$有什么区别。

#{}:占位符号,可以防止sql注入(替换结果会增加单引号‘’)
${}:sql拼接符号(替换结果不会增加单引号‘’,like和order by后使用,存在sql注入问题,需手动代码中过滤)
一个 #{ } 被解析为一个参数占位符 ? 。而${ } 仅仅为一个纯碎的 string 替换,在动态 SQL 解析阶段将会进行变量替换。
1、能使用 #{ } 的地方就用 #{ }
首先这是为了性能考虑的,相同的预编译 sql 可以重复利用。
其次,${ } 在预编译之前已经被变量替换了,这会存在 sql 注入问题。
2. 表名作为变量时,必须使用 ${ }(表名不能加单引号 '')
sql预编译
(1. 定义:
  sql 预编译指的是数据库驱动在发送 sql 语句和参数给 DBMS 之前对 sql 语句进行编译,这样 DBMS 执行 sql 时,就不需要重新编译。
(2. 为什么需要预编译
JDBC 中使用对象 PreparedStatement 来抽象预编译语句,使用预编译。
预编译阶段可以优化 sql 的执行。预编译之后的 sql 多数情况下可以直接执行,DBMS 不需要再次编译,越复杂的sql,编译的复杂度将越大,预编译阶段可以合并多次操作为一个操作。
预编译语句对象可以重复利用。把一个 sql 预编译后产生的 PreparedStatement 对象缓存下来,下次对于同一个sql,可以直接使用这个缓存的 PreparedState 对象。
mybatis 默认情况下,将对所有的 sql 进行预编译。
11.Mybatis里resultType,resultMap有什么区别。
ResultType:适用于单表查询后返回的结果,而里面填的就是项目中的实体类(pojo)的相对路径
ResultMap:适用于多表查询后返回的结果,需要在mapper.xml中定义resultMap进行pojo和相应表字段的对应。而里面填的就是项目中的实体类(pojo)的相对路径
12.Mybatis里insert方法有没有返回值,如果有,返回的是什么?
有,1 返回应该指的是插入的行数,要是要获取自增的id需要获取对象中的id.
13.Mybatis里如何获取数据库自增的主键?
在 SQL 映射文件的 select 标签中添加 useGeneratedKeys="true" 属性与 keyProperty=" " 属性,keyProperty 的值表示的是将获取到的自增主键值赋给 JavaBean 中的某个字段。
通过 javabean 的get()方法即可获得自增主键的值.
14.Mybatis 如果入参是一个基本数据类型,是一个对象 ,是多个参数,之间有什么区别?
15.Mybatis里association,collection的用法。
在项目中,某些实体类之间肯定有关键关系,比如一对一,一对多等。在hibernate 中用one to one和one to many,而mybatis 中就用association和collection。
association:  一对一关联(has one)
collection:一对多关联(has many)
注意,只有在做select查询时才会用到这两个标签
16.Hibernate里如何获取数据库自增的主键?
hibernate调用插入方法save会返回一个对象,这个对象对应的ID就是主键喽
你调用 save方法后,你的对象的 自增列id会自动被 赋值 本来新加的id在 save之前是0,save之后,xxx .id你自动被修改成数据库中生生成的id
User user = new User();    save(user);    String id = user.getId();
17.Hibernate的优缺点是什么?如何看待Hibernate的n+1问题?
18.简述Spring IOC。

IOC:控制反转,是一种设计模式。一层含义是控制权的转移:由传统的在程序中控制依赖转移到由容器来控制;第二层是依赖注入:将相互依赖的对象分离,在spring配置文件中描述他们的依赖关系。他们的依赖关系只在使用的时候才建立。
19.简述spring AOP。Excution表达式的写法。各个通知的特点。
AOP:面向切面,是一种编程思想,OOP的延续。将系统中非核心的业务提取出来,进行单独处理。比如事务、日志和安全等。
Spring 的AOP和IOC都是为了解决系统代码耦合度过高的问题。使代码重用度高、易于维护。
不过AOP和IOC并不是spring中特有的,只是spring把他们应用的更灵活方便
execution(* com.news.service.impl.*.*(..))
左边的第一个*表示返回值,*代表任意类型
*.*:
第一个*是类名,表示com.news.service.impl包下的任意类
,第2个*表示该类中的任意方法
(..)表示方法的可变参数列表。
execution(* com.news.service.impl.*.*(..)的含义是切入点pointcut为com.news.service.impl包下所有类的所有方法都是切入点。
如果是execution( void com.news.service.impl.A.*(..)),这时的切入点为com.news.service.impl包下类A所有没有返回值的方法。
20.Filter与Interceptor和用法和不同点?
21.Sesson与Token?

token和session其实都是为了身份验证,session一般翻译为会话,而token更多的时候是翻译为令牌;
session服务器会保存一份,可能保存到缓存,文件,数据库;同样,session和token都是有过期时间一说,都需要去管理过期时间
22.如何实现用户登录验证?如何控制访问权限?
23.对Spring boot 有什么了解?
24.Restful是什么?

RESTful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。
25.如何在接口进行参数验证?
26.数据库查询语句select XX from XX where XX group by XX order by XX的执行顺序是什么?
27.对事务问题是如何看待的?

A:原子性(atomicity),一个不可切割的整体,不能在分,例如开关要么开,要么关,中间没有操作;军人,要么战死,要么凯旋,绝不会投降。
C:一致性(consistency),所操作的东西必须一致,多个因素产生的因素必须守恒(如何能量守恒一样),例如你在银行转钱给别人了,别人就一定能收到钱。
I:隔离性(isolation),隔离性在多个事物进行同时操作的时候就会产生问题。
D:持久性(durability),一定事物完成,就会不会恢复,例如数据一旦commit,就写入到磁盘中,造成不可逆的情况。
遵循这样四种特性的的才能称之为一个事物。
28.在分布式系统里,主键哪些生成策略,让你选择,你用选择哪种?
29.redis 有几种数据存储方法? 你在项目里是如何使用redis的?

Redis最为常用的数据类型主要有以下:
String
Hash
List
Set
Sorted set
pub/sub
Transactions
30.在前后端分离的情况下,你是怎样解决跨域问题的?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值