您的位置 首页 java

#某科技公司Java(二)

## 1、简述一下简历上的项目

A:

结合个人项目经历回答即可。

## 2、项目中token如何使用的

A:

(1)使用token完成用户认证,实现前后端的用户同步:

1、登陆时,生成token,并在redis中存储(以token为key,以用户信息为value,

并设置key的过期时间)。然后把token信息传递给前端,并在前端保存。

2、每一次前端请求要求把token带回给后端(设置一个请求头的值为token)

3、后端设置一个拦截器,拦截所有请求,然后从请求头中获取token,

并从redis中获取此redis.get(token)的信息。

若在redis中能够获取到信息,说明此token存在并没有过期,即可通过请求;否则,拒绝请求。

## 3你会在token中存在用户的一些基本信息吗,如何存。

A:

使用Json Web Token (JWT):简单来说JWT就是通过可逆加密算法,

生成一串包含用户、过期时间等关键信息的Token,每次请求服务器

拿到这个Token解密出来就能得到用户信息,从而判断用户状态。

## 4、session是怎么使用的,会去清理session的数据吗?如何做的

A:对于每个会话,服务器会生成Session保存在服务器上,而对应的SessionID

自动通过HTTP头中的Set-Cookie返回保存在浏览器等客户端中,

每次请求客户端都会带上SessionID,然后服务器通过SessionID找到Session判断用户状态。

清理Session的方式:

(1)设置Session过期(2)服务器端调用了HttpSession的invalidate()方法

## 5、spring mvc的使用流程

1.创建web工程

2、在src下创建lib文件夹,导入SpringMVC相关jar包(在Spring的基础之上

再添加一个mvc包),maven的话直接获取

3、在工程文件夹下创建resource文件夹,并添加配置文件springmvc.xml,

spring上下文配置

4、配置前端控制器(web.xml)

5、mvc模式创建controller、model和view等开始项目

## 6、mybatis是停留在使用层面还是有更深的理解

A:Mybatis其实是对jdbc的操作数据库的过程进行了封装,使开发者只需要关注 SQL 本身,

而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、

结果集检索等jdbc繁杂的过程代码。Mybatis需要手写Sql语句,对jdbc的封装程度不如

hibernate,但因此也灵活得多。在使用mybatis时,一般需要关注三个部分

(1.sql语句 2.输入参数 3.输出参数)

## 7、mybatis #和$的区别

A:

1、#和$两者含义不同

#会把传入的数据都当成一个字符串来处理,会在传入的数据上面加一个双引号来处理。

而$则是把传入的数据直接显示在sql语句中,不会添加双引号。

2、两者的实现方式不同

(1)$作用相等于是字符串拼接

(2)#作用相当于变量值替换

3、#和$使用场景不同

(1)在sql语句中,如果要接收传递过来的变量的值的话,必须使用#。因为使用#是通

过PreparedStement接口来操作,可以防止sql注入,并且在多次执行sql语句时可以提高效率。

(2)$只是简单的字符串拼接而已,所以要特别小心sql注入问题。对于sql语句中非变量部分,

那就可以使用$,比如$方式一般用于传入数据库对象(如传入表名)。

(3)如果在sql语句中能同时使用#和$的时候,最好使用#。

## 8、mybatis 中如何传递多个参数

A:

方法1:顺序传参法

方法2:@Param注解传参法

方法3:Map传参法

方法4:Java Bean传参法

**使用Mapper接口时参数传递方式**

Mybatis在使用Mapper接口进行编程时,其实底层是采用了动态代理机制,表面上是调用的Mapper接口,而实际上是通过动态代理调用的SqlSession的对应方法,有兴趣的朋友可以查看DefaultSqlSession的getMapper()方法实现,其最终会获得一个代理了Mapper接口的MapperProxy对象。MapperProxy对象在调用Mapper接口方法时会把传递的参数做一个转换,然后把转换后的参数作为入参调用SqlSession对应的操作方法(如selectOne、insert等)。转换过程可以参考MapperMethod的execute()方法实现。简单来说是以下规则:

1、如果传递过来是单参数,且没有以@Param注解进行命名,则直接将单参数作为真实的参数调用SqlSession的对应方法。

2、如果传递过来的不是单参数或者是包含以@Param注解进行命名的参数,则会将对应的参数转换为一个Map进行传递。具体规则如下:

2.1、 会把对应的参数按照顺序以param1、param2、paramN这样的形式作为Key存入目标Map中,第一个参数是param1,第N个参数是paramN。

2.2、 如果参数是以@Param注解命名的参数,则以@Param指定的名称作为Key存入目标Map中。

2.3、 如果参数不是以@Param注解命名的,则按照顺序以0、1、N这样的形式作为Key存入目标Map中,第一个参数是0,第N个参数是N。

## 9、mybatis 中如何做分页

A:

1、limit sql语句实现分页

“`

<!–分页–>

<select id=”getUserByLimit” parameterType=”map” resultType=”包名.User”>

select * from user limit #{startIndex},#{pageSize};

</select>

“`

2、RowBounds分页(不建议使用)

不使用SQL实现分页,通过java代码层面实现分页

3、MyBatis分页插件PageHelper(了解即可)

## 10、如何优化数据库操作

A:

一、SQL语句优化

1、通过慢查询日志发现有效率问题的SQL

2、慢查询日志内容分析

3、通过explain查看SQL的执行计划

二、索引优化

1、选择索引

2、索引优化方法

三、数据表结构优化

四、数据库配置优化

五、硬件优化

## 11、数据库的子查询,嵌套子查询

A:

定义:一个内层查询语句(select-from-where)块可以嵌套在另外一个外层查询块的where子句中,其中外层查询也称为父查询,主查询。内层查询也称子查询、从查询

比如单行子查询:

“`

select ename,deptno,sal

from emp

where deptno=(select deptno from dept where loc=’NEW YORK’)

“`

## 12、spring mvc这样做有什么好处

A:

Spring MVC中提供一个DispatcherServlet, 无需额外开发。

spring MVC中使用基于xml的配置文件,可以编辑,无需重新编译应用程序。

spring MVC实例化控制器,并根据用户输入来构造bean.

spring MVC可以自动绑定用户输入,并正确的转换数据类型。例如,springMVC能自动解析字 符串,并设置float或decimal类型的属性。

spring MVC可以检验用户输入,若校验不通过,则重定向回输入表单。输入校验是可选的, 支持编码方式以及声明。关于这一点,springMVC内置了常见的校验器。

spring MVC是spring框架的一部分。可以利用spring提供的其它能力。

spring MVC支持国际化和本地化,支持根据用户区域显示多国语言。

spring MVC支持多种视图技术,最常见的JSP技术以及其它技术包括Velocity和FreeMarker

文章来源:智云一二三科技

文章标题:#某科技公司Java(二)

文章地址:https://www.zhihuclub.com/179184.shtml

关于作者: 智云科技

热门文章

网站地图