SQL语句分类:

DDL:data define language create、drop、truncate。
DML:data Manipulation language select、insert、update、delete。
TCL:transaction controller language commit、rollback、save point。
DCL:data controller language grant、invoke。

类与类之间关系

关联、聚集、依赖、一般化(继承)泛化
关联关系描述的是实体类与实体类之间的关系。
聚集关系是一种特殊的关联关系,表示整体与局部的关系
依赖是指定过程域对象与实体域对象之间的一种关系。

索引

索引是对数据库中一列或者多列数据进行排序的结构,使用缩影可以快速访问数据库表中特定的信息。

java实体类重写toString方法,得到想要字符串

先认识一下Object

1.Object 类的 toString 方法
返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于:
getClass().getName() + '@' + Integer.toHexString(hashCode())

  1. 对象如果没有父类,默认继承Object。
    如果没重写toString方法,则默认是Object的toString方法返回值:类名@哈希玛值;

总结:
如果我们没有重写ToString方法。默认就是Object的toString方法输出格式。
如果我们在Test5中重写toString方法,那么输出格式就会按照我们定义的方式输出这个对象。
重写toString是对对象打印输出的一种格式化。当你print一个对象时你需要这个对象在打印时展现的是什么形态你就把toString重写成你需要的返回形态。重写hashcode主要是为了规定对象之间的比较方式。如果你把对象存入hash集合,集合就会对对象的hashcode进行比较以区分两个对象是否是同一对象。

关系型数据库和非关系型数据库的区别

1.关系型数据库通过外键关联来建立表与表之间的关系,
2.非关系型数据库通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定

进程与线程

进程:是一个运行中的程序。
线程:是一个程序中单顺序的流。
线程是属于轻量级的进程,线程包含在进程中,线程与进程之间的切换速度快,它占有的资源可以共享,进程之间的切换比较慢,每个进程都有他独立的资源。

常见问题

1.写出5个常见运行时异常

nullPointException、
sqlException、
IOException、
missingResourceExcepion、
arrayStoreExcepion、
runTimeExceptiom

2.什么叫事务?事务有哪些特征

事务就是一种相互依赖的操作,它有四大特征:1.原子性:事务开始后的所有操作,要么全部执行成功,要么全部执行失败。2.一致性:事务开始前后,数据库的完整性约束保持不变;3.持久性:事务完成后,对数据的所有更改将保存到数据库中,不可回滚;4.隔离性:同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有干扰。

3.事务的配置和使用

事务有两种配置和使用的方式:

  1. 以注解的方式:在配置文件中先定义事务管理器——》然后开启注解启动——》,我们一般在service中使用事务,我们把@Transactional 注解放在类的上面,这样就可以对于这个类所有public的方法起作用;如果我们把注解放在单个方法上面,那么这个注解只对这个方法起作用。
  2. 以AOP的方式配置:在配置文件中先定义事务管理器--》然后切面的配置--》然后切点的配置
    事务配置具体实现

事物配置中有哪些属性可以配置
(1)事务的传播性:@Transactional(propagation=Propagation.REQUIRED) 
      如果有事务, 那么加入事务, 没有的话新建一个(默认情况下)
(2)事务的超时性:@Transactional(timeout=30) //默认是30秒 
      注意这里说的是事务的超时性而不是Connection的超时性,这两个是有区别的
(3)事务的隔离级别:@Transactional(isolation = Isolation.READ_UNCOMMITTED)
      读取未提交数据(会出现脏读, 不可重复读) 基本不使用
(4)回滚<tx:method name="*" rollback-for="Exception" />

什么是拦截器?如何实现?
Spring MVC中的拦截器(Interceptor)类似于Servlet中的过滤器(Filter),它主要用于拦截用户请求并作相应的处理。例如通过拦截器可以进行权限验证、记录请求信息的日志、判断用户是否登录等。
实现的方法:
1).在xml配置文件中进行拦截器的配置:

<!--拦截器的配置-->
<mvc:interceptors>
    <mvc:interceptor>
        <mvc:mapping path="/cla*"/><!--拦截的url地址-->
        <mvc:exclude-mapping path="/claget"/><!--排除拦截的url地址-->
        <!--关联com.etc下设置的具体实现的类-->
        <bean class="com.etc.LonginInterceptor"></bean>
    </mvc:interceptor>
</mvc:interceptors>

2)通过实现HandlerInterceptor的接口或继承HandlerInterceptor接口的实现类
并实现接口里面的三个方法:preHandle、postHandle、afterCompletion
执行的原理流程:
1. 客户端发送请求页面的url地址到浏览器
2. 拦截器会拦截请求
3. 拦截器会在cookie中获取token(身份认证令牌)
4. 如果token不存在,会直接拦截,跳转到登录页面
5. 如果有token,会放行,返回session的信息
6. 拦截器再对session进行处理,如果session已过期,也会跳转到登录页面,如果没过期,则直接放行到用户的请求页面

4.什么是高内聚,什么是低耦合?

高内聚:相关性比较高的部分,尽可能的集中,不要分散
低耦合:两个相关的模块,尽可能的把依赖的部分降到最低,不要让让两个系统产生强依赖。

5.Mysql、Tomcat、Http协议、Redis的端口号分别是什么?

Mysql-3306、Tomcat-8080、Http-80、Redis-6379

6.什么是内连接?左连接右连接和全连接?(inner join on /left join on/right join on/full join on)

内连接:就是普通连接,相当于where。左连接:两个表的数据在关联查询时,不管右边有没有和左边相匹配的,左边的数据都会显示出来,没有匹配的用NULL表示。全连接,就是左右两边的数据都显示出来(MySQL中不可以用,在Oracle中可以用)

7.sql语句中什么时候用in什么时候用exists?

有具体值的时候用in,没有具体值的用exists

8.sql注入攻击如何实现?

因为查询数据库语句的参数值没有被正确的加码,黑客可以很容易的修改查询语句中字符串的值,在要执行的值后面嵌入附加的sql语句。最常见的sql注入攻击是在用户登录的功能,所有用户登录的sql语句都是:

select*from user where name=”+username+” and Password =”+Password+”;

那么参数的输入可以为1 'or'1=1',恒成立,直接不用密码可以登录。最严重的是在用户名的参数中输入" 1';drop dataBate root;-- ",直接把数据库删除。因为,";"分号是sql语句结束的标志,分号后面为新的sql语句,而“--”
两个短横,表示注释的意思,直接把密码注释掉了,这样就可以不用密码登录操作。
防御sql注入攻击的方法:数据库加密,数据库防火墙;数据库安全审计系统;数据脱敏;
正确的书写登录查询的sql语句,比如参数的传入不能用“$”符号,要用“#”;

9.数据库的优化?

1.正确的使用sql语句,不用“*”,改用列名
2少用嵌套,改用连接查询;
3like按姓名模糊查询的时候,%用在后面,前面尽量不加;
4把能过滤多条数据的条件放在最后,因为它是以栈的方式存取的,放在最后面的条件最先执行,先过滤掉一部分数据便于查询
5使用or的查询,可以改为用union,因为or或in是采用全表查询的机制,而union是按索引查询,速度比较快比如:
引入的案例:查询部门编号>90或邮箱包含a的员工信息

SELECT * FROM employees WHERE email LIKE '%a%' OR department_id>90;
//索引查询
SELECT * FROM employees  WHERE email LIKE '%a%'
UNION//声明索引
SELECT * FROM employees  WHERE department_id>90;

6用exits来取代in的条件查询
7也可以通过调整服务器内存分配来达到优化的目的
10 union 和 unionall 的区别
union查找会自动去重,unionall不会。

11 什么是索引?优缺点?什么情况使用,什么情况不用?

索引相当于书本的目录,我们可以通过索引快速的找到我们需要的数据;索引其实也一张表,包含主键和索引的字段名,同时指向实体表的记录;
优点:提高查询的速度;
缺点:降低了表更新的速度,因为,当表发生改变的时候(比如增删改),索引也要相对的修改。
使用的情况:当某个字段被频繁的用作搜索条件的时候,可以创建索引;
不使用的情况:经常做增删改操作的不用索引;

12 sql语句中聚合函数有哪些?

Count(合计)、sum(总数)、min(最小)、max(最大)、avg(平均)、

13 sql语句的分类有哪几种?

DDL(Data Definition Languages)语句:即数据库定义语句,用来创建数据库中的表、索引、视图、存储过程、触发器等,常用的语句关键字有:CREATE,ALTER,DROP,TRUNCATE,COMMENT,RENAME。
DML(Data Manipulation Language)语句:即数据操纵语句,用来查询、添加、更新、删除等,常用的语句关键字有:SELECT,INSERT,UPDATE,DELETE,MERGE,CALL,EXPLAIN PLAN,LOCK TABLE,包括通用性的增删改查。
DCL(Data Control Language)语句:即数据控制语句,用于授权/撤销数据库及其字段的权限,常用的语句关键字有:GRANT,REVOKE。
TCL(Transaction Control Language)语句:事务控制语句,用于控制事务,常用的语句关键字有:COMMIT,ROLLBACK,SAVEPOINT,SET TRANSACTION。

14 drop 和 delete 和truncate 的区别?

Drop是删除整个表的结构;delete和truncate是删除表中的数据,不同的是,delete可以回滚,truncate不可以回滚

什么是数据库连接池?有什么优点?
连接池基本的思想是在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象。使用完毕后,用户也并非将连接关闭,而是将连接放回连接池中,以供下一个请求访问使用。而连接的建立、断开都由连接池自身来管理。

MySQL的引擎有哪些?
INNODB(默认的) MyISAM() MEMORy()
当前主流的关系型数据库有哪些?
Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL等

15 谈谈对SpringBoot的理解?

  1. SpringBoot是一个快速的开发框架,因为它简化配置和开发流程,是web整合框架;它可以用(Enable 授予权利)(@EnableWebMvc)注解的方式启动SpringMvc;用注解来自动完成配置;它自带内置的服务器TomCat,Jetty;它还可以建立独立的Spring应用程序;它与spring的关系,要依赖spring来管理对象的依赖;springboot为spring做好了各种的配置;
  2. 它与springmvc的关系,springboot如果是一个web的项目,那么springMVC就是控制层

16谈谈Spring的理解?

Spring是一个开源框架,是一个轻量级的java开发框架。它用于简化企业级的应用程序开发。Spring框架除了帮我们管理对象及其依赖的关系,还提供了通用的日志记录、性能统计、安全控制、异常处理等面向切面的能力,也就它里面的核心功能(aop),利用AOP进行事务的统一管理;Spring利用IOC来为所有的组件创建,封装,注入和管理;spring还能吸收比较优秀的框架比如mybatis;

17谈谈你对springMvc的理解?

它是一个MVC模式的web开发框架。
M(model)模型层,主要是由javabean来实现的,通过各种类对数据库进行获取,并封装在对象中;
V(view)视图层,主要通过jsp啦实现的,把数据库中获取到的数据展现在页面;
C(controller)控制层,主要是通过servlet来实现的,servlet获取经过JavaBean封装的对象,再发送数据传输到页面
SpringMvc其实就是基于spring的基础上,添加web框架,要用springMVC必须依赖spring;

18.谈谈你对mybatis的理解

Mybatis是封装了jdbc的持久层框架,负责数据库的数据交换,让我们可以自关注sql本身,而不需要关注连接的创建、statement的创建等;它会将输入参数,输出结果进行映射。

19.什么是IOC?什么是AOP?

IOC和AOP都是spring的核心功能;

  1. IOC是控制反转,原来我们控制程序之间的关系是通过程序代码直接控制的,在spring框架里面,控制权由代码转到了spring容器,spring通过配置文件去管理bean,为所有的组件创建,封装,注入和管理;
  2. AOP是面向切面,就是将横向相同的方法单独抽出来,放在切面类里面,再通过配置文件,设置切点,这样便于统一的管理。

20.bean的四种作用域?Bean的创建,spring提供了哪些注解?

  1. 四种作用域:单列作用域,多列作用域,请求作用域,会话作用域
  2. 四大注解:component(泛指组件,一般用在实体类),repository(用于dao层) Service(用于业务层),controller(用于控制层)
    初始化注解:Cofiguration,初始化spring容器,标注在类的上面,相当于spring的xml配置文件的<beans>里面的内容

21.servlet的生命周期?

实例化、初始化、调用服务(看是get还是post方法调用响应的doget或者dopost)、销毁
servlet被服务器实例化后,容器调用它init的方法,当请求到达后,调用它service的方法,service会自动派遣于请求相匹配的doget或dopost的方法,最后,在服务器决定将它销毁的时候,调用destroy的方法;

22、什么JQuery?

JQuery是js的代码库,是完全面向对象的,跨浏览器平台的;它提供了函数工厂或选择器,可以根据id名,类名,标签名去获取需要的数据;它还封装了Ajax,包括Ajax的变体$.get $.postd 方法;它可以实现解耦,用$(document).ready(function(){}) 统一设置进去。

22.什么是JSP?JSP有哪些指令?

Jsp是动态网页技术,运行网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。
include:包含指令通知JSP编译器把另外一个文件完全包含入当前文件中。
page :页面指令
taglib:标签库指令描述了要使用的JSP标签库。该指令需要指定一个前缀prefix和标签库的描述UR比如:


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="h" uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>班级详情</title>
</head>
<body>
<h2>班级详情</h2>
<a href="claquery">去查询</a>
<a href="clatoadd">去新加</a>
<div>${msg}</div><c:remove var="msg" scope="session"></c:remove>
<h:form action="clamod" method="post" modelAttribute="g">
    班级编号:<h:input path="cid"></h:input></br>
    班级名称;<h:input path="cname"></h:input></br>
      <input type="submit" value="修改">
</h:form>
</body>
</html>

23.servlet与JSP的区别?

  1. jsp经编译后就变成了Servlet.
    (JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的java类)
  2. jsp更擅长表现于页面显示,servlet更擅长于逻辑控制.
  3. Servlet中没有内置对象,Jsp中的内置对象都是必须通过HttpServletRequest对象,HttpServletResponse对象以及HttpServlet对象得到.

扩展:
既然JSP和Servlet都有自身的适用环境,那么能否扬长避短,让它们发挥各自的优势呢?答案是肯定的——MVC(Model-View-Controller)模式非常适合解决这一问题。
MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller):
Controller——负责转发请求,对请求进行处理
View——负责界面显示
Model——业务功能编写(例如算法实现)、数据库设计以及数据存取操作实现
在JSP/Servlet开发的软件系统中,这三个部分的描述如下所示:图片1.png

  1. Web浏览器发送HTTP请求到服务端,被Controller(Servlet)获取并进行处理(例如参数解析、请求转发)
  2. Controller(Servlet)调用核心业务逻辑——Model部分,获得结果
  3. Controller(Servlet)将逻辑处理结果交给View(JSP),动态输出HTML内容
  4. 动态生成的HTML内容返回到浏览器显示
    MVC模式在Web开发中的好处是非常明显,它规避了JSP与Servlet各自的短板,Servlet只负责业务逻辑而不会通过out.append()动态生成HTML代码;JSP中也不会充斥着大量的业务代码。这大大提高了代码的可读性和可维护性。

23. redis是什么?

redis是一个开源的、可基于内存也可持久化的Key-Value数据库,常用的NoSQL数据库之一。它可以用作数据库、缓存和消息中间件。NoSQL(No only sql )不单单是sql,还有很多其他功能。Redis缓存数据库目前已大量的应用,广泛用于存储session信息,权限信息,交易作业等热数据

  1. Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
  2. 默认端口号:6379。
  3. redis默认有16个数据库,类似数组下标从零开始,初始默认使用零号库,可以使用select index 命令来切换数据库。
  4. DBSIZE 命令用来得到所选数据库key数量。
  5. FLUSHDB 清空当前库。

redis传送门

24.mysql和redis区别

  1. MySQL是关系型数据库,redis是非关系型数据库或缓存数据库,是常用的NoSql数据库之一
  2. mysql用于持久化的存储数据到硬盘,功能强大,但是速度较慢,redis用于存储使用较为频繁的数据到缓存中,读取速度快

redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。

25.什么是Ajax?

Ajax是异步的JavaScript和xml,是页面的局部刷新技术。

26.常见的运行时异常500、400、403、404、405各代表什么?

500表示服务器出现不可预期的错误
400表示参数转化出错
403表示参数没传
404表示请求资源不存在
405表示提交方式不支持

26.什么是API?

API是应用程序编译接口,是些预定义的函数

27.开发中用到哪些设计模式?分别在什么场合使用?

单例模式:在系统中只需要一个实例来完成,多实例会造成资源的浪费
观察者模式:在系统中需要对某事物进行监听
代理模式:
抽象工厂模式:

28.单例模式有哪几种?优缺点?

懒汉式:只有在用到的时候才实例化对象;优点:不会造成资源浪费;缺点:线程不安全;

public class SingleTon{
private static SingleTon instance;
public SingleTon(){};
public static SingleTon getInstance(){
    if(instance==null){
     Instance=new SingleTon();
}
retrun instance;
}
}   

饿汉式:一边声明一边实例化;优点:线程安全;缺点:可能造成资源浪费;

public class SingleTon{
private static SingleTon instance=new SingleTon();
public SingleTon(){};
public static SingleTon getInstance()
retrun instance;
}
}

可以用双重校验锁的方式来既保证线程安全,又不会造成资源浪费:


public class SingleTon{
private volatile static SingleTon instance;
public SingleTon(){};
public static SingleTon getInstance(){
    if(instance==null){
      synchronized(Singleton.class){
        if(instance==null){
     Instance=new SingleTon();
 }
}
}
retrun instance;
}
}

volatile :它的原理是每次线程要访问volatile修饰的变量时都是从内存中读取,而不是从缓存当中读取,因此每个线程访问到的变量值都是一样的。这样就保证了同步。
synchronized:用synchronized关键字修饰方法。 由于java的每个对象都有一个内置锁,当用此关键字修饰方法时,内置锁会保护整个方法。在调用该方法前,需要获得内置锁,否则就处于阻塞状态。

问题:为什么需要两次判断if(singleTon==null)?

  分析:第一次校验:由于单例模式只需要创建一次实例,如果后面再次调用getInstance方法时,则直接返回之前创建的实例,因此大部分时间不需要执行同步方法里面的代码,大大提高了性能。如果不加第一次校验的话,那跟上面的懒汉模式没什么区别,每次都要去竞争锁。

  第二次校验:如果没有第二次校验,假设线程t1执行了第一次校验后,判断为null,这时t2也获取了CPU执行权,也执行了第一次校验,判断也为null。接下来t2获得锁,创建实例。这时t1又获得CPU执行权,由于之前已经进行了第一次校验,结果为null(不会再次判断),获得锁后,直接创建实例。结果就会导致创建多个实例。所以需要在同步代码里面进行第二次校验,如果实例为空,则进行创建。

29.Spring AOP注解方式如何实现,配置方式又是如何实现

注解方式的实现:

  1. 在切面类前用@Aspect@Component注释修饰,声明为一个切面类。
  2. 在类里面用@Pointcut注释声明一个切点,里面写它的服务对象("execution( com.etc.service..*(..))")。(此注释修饰的方法的方法体为空,不需要写功能比如 public void say(){};就可 以了,方法名可以被候命的具体服务功能所以引用,它可以被理解为切点对象的一个代理对象方法)
  3. 在对应的方法前用对应的通知类型注释修饰,将对应的方法声明称一个切面功能,为了切点而服务
  4. 在spring配置文件中开启aop注释自动代理。如:<aop:aspectj-autoproxy/>
    图片2.png

配置方式的实现:

  1. 配置目标对象的bean
  2. 配置通知的bean也就是切面的具体实现
  3. Aop的配置:包括切点的配置,通知类型的配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd">
    <!-- 目标对象 -->
    <bean id="knight" class="com.cjh.aop2.BraveKnight"/>
    <!-- 切面具体实现即通知 -->
    <bean id="mistrel" class="com.cjh.aop2.Minstrel"/>
    <!-- 面向切面编程 -->
    <aop:config>
        <aop:aspect ref="mistrel">
            <!-- 定义切点 -->
            <aop:pointcut expression="execution(* *.saying(..))" id="embark"/>
            <!-- 声明前置通知 (在切点方法被执行前调用)-->
            <aop:before method="beforSay" pointcut-ref="embark"/>
            <!-- 声明后置通知 (在切点方法被执行后调用)-->
            <aop:after method="afterSay" pointcut-ref="embark"/>
        </aop:aspect>
    </aop:config>
</beans>
       

30.equal()和==的区别

equal()是判断值是否相等,相等返回true,否则为false.
==不仅要判断值是否相等,还要判断内存空间地址是否相等,相等返回true

31.mybatis如何不转义使用大于号和小于号,#和$的区别

方式一转义:

<(大于号)、<=(大于等于) 、>(小于)、 >=(小于等于)、 & 、 '(单引号)、 "(双引号)
&lt;(大于号)、&lt;=(大于等于)、&gt;(小于)、&gt;=(小于等于)、&amp;、&apos;(单引号)、&quot;(双引号)

不转义:<![CDATA[ ]]>如:num<![CDATA[>=]]>#{num}
#和$的区别:#{}是采用预编译机制的,提前对SQL语句进行预编译,而其后注入的参数将不会再进行SQL编译,可以有效防止sql注入攻击。
${}用作占位符,后面注入的参数是什么,就会替换成什么,容易被注入攻击。

32.ajax方法中的几个属性

$.ajax({
url:需要请求的servlet地址;
data:参数;
type:post  (get);
dataType:表示服务器返回的数据类型;
contentType:”application/json”表示内容类型
async:是否同步;
cache:是否缓存;
success:function();表示成功回调函数。
error:function();表示失败回调函数。

})

33.h5的新特性:

1.html5中没有frameset,font 这个元素(标签):
2.html5中简化了html的头文件
3.html5中扩展了很多新的标签:header footer section nav 等等
4.html5中扩展了很多form表单中的组件: number color date time url email
5.html5新加了一些元素的属性:autofocus, placeholder,formaction,formmethod

34.页面发送数据到控制器如何接收?

1.request.getParameter();
2.用方法的参数来接收发送请求的数据
3.用实体类来接收发送请求的数据

35、页面转发和重定向的区别?

转发:通过servlet的 request 内部请求访问转发资源,页面只响应一次,浏览器的地址也不会变更;
重定向:通过response直接把资源路径返回给浏览器,由浏览器重新向发起服务器的请求,页面会响应两次,浏览器的地址也会变化,变为第二次请求访问的资源url;

36、什么是检查时异常,什么是运行时异常?

检查时异常:在编译的过程中,强制抛出的,要处理后才能运行
运行时异常:由java虚拟机抛出的异常,用户不必处理。

37、如何处理web的中文乱码?

如果是以post的方式提交,在web.xml配置过滤器,编码设置为utf-8
如果是以get的方式提交,在tomcat8,有默认的方式会去处理;如果是tomcat8之前的,要到server.xml文件中,找到connector元素下加URIEncoding=’utf-8’;

38、cookie 和 session的区别?

Cookie存储的是小文本的值,存储的位置在客户端;
Session存储的是文本或者其他对象,存储的位置在服务器端;

39、hashset 怎么判断对象是否存在?存在的话是覆盖还是不加入?

判断是否存在,要改变实体类里面的默认规则,一个是equals(),一个是hashcode()
如果存在,是不能加入的

Last modification:September 19th, 2019 at 03:56 pm
如果觉得不错,请随意赞赏