面试题相关1

1、springmvc 解决获取请求参数的乱码问题

1. GET请求乱码

在apache-tomcat-10.1.7\conf\server.xml中设置URIEncoing=“UTF-8”

    <Connector port="8080" URIEncoing="UTF-8" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

2. post请求乱码

tomcat初始化组件顺序:监听器–>过滤器–>servlet

<!--配置springMVC的编码过滤器-->
<filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceResponseEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

SpringMVC中处理编码的过滤器一定要配置到其他过滤器之前,否则无效

2、spring支持的常用数据库事务传播属性和事务隔离级别

事务的传播行为:当事务方法被另一个事务方法调用时,必须指定事务应该如何传播;方法可能继续在现有事务中运行,有可能开启一个新事务,并在自己的事务中运行;事务的传播行为可以由传播属性指定;

事务的属性可以通过@Transactional注解的propagation属性来设置;在这里插入图片描述
数据库事务并发问题:

  • 脏读:一个事务读取了另一个事务未提交的数据,如果未提交的事务回滚,读取到的数据就是脏数据。
  • 幻读:一个事务在读取某一范围的数据后,由于其他事务对该范围内的数据进行了插入或删除操作,导致多次读取该范围的数据时结果不一致。
  • 不可重复读:一个事务在读取某一数据后,由于其他事务对该数据进行了修改,导致多次读取该数据时结果不一致。

数据库事务的隔离级别:

  • 读未提交(Read uncommitted):一个事务读到了另一个事务还没有提交的数据。
  • 读已提交(Read committed):一个事务要等另一个事务提交后才能读取数据。
  • 可重复读(Repeatable read):同一事务下,事务在执行期间,多次读取同一数据时,能够保证读取到的数据是一致的。
  • 串行化(Serializable):它是最高的事务隔离级别,在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读。但是这种事务隔离级别效率最低,比较耗费数据库性能,一般不推荐使用。

在这里插入图片描述
事务的属性可以通过@Transactional注解的isolation属性来设置
在这里插入图片描述

3、springMVC的工作流程

SpringMVC的工作流程:

  1. 用户通过浏览器发起 HttpRequest 请求到前端控制器 (DispatcherServlet);
  2. DispatcherServlet 将用户请求发送给处理器映射器 (HandlerMapping);
  3. 处理器映射器 (HandlerMapping)会根据请求,找到负责处理该请求的处理器,并将其封装为处理器执行链 返回(HandlerExecutionChain)给 DispatcherServlet;
  4. DispatcherServlet 会根据 处理器执行链 中的处理器,找到能够执行该处理器的处理器适配器(HandlerAdaptor) --注,处理器适配器有多个;
  5. 处理器适配器 (HandlerAdaptoer) 会调用对应的具体的 Controller;
  6. Controller 将处理结果及要跳转的视图封装到一个对象ModelAndView 中并将其返回给处理器适配器(HandlerAdaptor);
  7. HandlerAdaptor 直接将 ModelAndView 交给 DispatcherServlet ,至此,业务处理完毕;
  8. 业务处理完毕后,我们需要将处理结果展示给用户。于是DisptcherServlet 调用ViewResolver,将 ModelAndView 中的视图名称封装为视图对象;
  9. ViewResolver 将封装好的视图 (View) 对象返回给 DIspatcherServlet;
  10. DispatcherServlet 调用视图对象,让其自己 (View) 进行渲染(将模型数据填充至视图中),形成响应对象 (HttpResponse);
  11. 前端控制器 (DispatcherServlet) 响应 (HttpResponse) 给浏览器,展示在页面上。

4、mybatis中当实体类中的属性表和表中的字段名不一样,怎么办?

  • sql语句中起别名;
  • 在mybatis全局配置文件中开启驼峰命名规则;
<setting name="mapUnderscoreToCamelCase" value="true"/>
  • 在mapper映射文件中使用resultMap来自定义映射规则;

5、linux系统常用的服务类相关命令

  • service(centos6)
service 服务名 start/stop/restart/reload/status
查看服务的方法 /etc/init.d/服务名
  • systemctl(centos7)
systemctl start/stop/restart/reload/status 服务名(xxx.service)
查看服务的方法 /usr/lib/systemd/system
设置自启动 systemctl enable/disable service_name

6、git分支相关命令和实际应用

  • 创建分支
git branch 分支名
git branch -v 分支名  查看分支
  • 切换分支
git checkout 分支名
git checkout -b 分支名  一步完成分支创建并切换
  • 合并分支
git checkout master  先切换到主干
git merge 分支名      其他分支何如到主干
  • 删除分支
git checkout master  先切换到主干
git branch -D 分支名

7、redis持久化有几种类型,区别是什么

Redis提供了两种不同类型的持久化方式

  • RDB (Redis DataBase)
    在指定的时间间隔内将内存中的数据集快照写入磁盘,即snapshot快照,恢复时是将快照文件直接读取到内存中;redis备份默认方式
  • AOF (Append Of File)
    将 redis 执行过的所有写指令记录下来,在下次 redis 重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复了

RDB优缺点

  • 优势:
    适合大规模数据恢复
    对数据完整性和一致性要求不高更适合使用
    节省磁盘空间
    基于二进制存储的,恢复速度快
  • 劣势:
    Fork的时候,内存中的数据会被克隆一份,大致2倍的膨胀,需要考虑
    虽然Redis在fork的时候使用了写时拷贝技术,但是如果数据庞大时还是比较消耗性能
    在备份周期在一定间隔时间做一次备份,所以如果Redis意外down的话,就会丢失最后一次快照后所有修改

AOF优缺点

  • 优势:
    备份机制更稳健,丢失数据概率更低
    可读的日志文本,通过操作AOF文件,可以处理误操作
  • 劣势:
    比RDB占用更多的磁盘空间
    恢复备份速度要慢
    每次读写都同步的话,有一定的性能压力
    存在个别bug,造成不能恢复

8、MySQL 什么时候创建索引

索引:是帮助MySQL高效获取数据的数据结构

  • 优点:
    提高数据检索的效率,降低数据库的IO成本
    通过索引列对数据进行排序,降低数据排序的成本,降低了CPU的消耗

  • 缺点
    索引在提高查询速度的同时,降低了更新表的速度,如对表进行增删改的操作
    索引实际上也是一张表,保存了主键和索引字段, 并指向实体表的记录,所以索引也要占空间;

  • 哪些情况需要创建索引
    主键自动建立唯一索引
    频繁作为查询条件的字段应该创建索引
    查询中与其他表关联的字段, 外键关系建立索引
    单键/组合索引的选择问题, 组合索引性价比更高
    查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度
    查询中统计或者分组字段

  • 哪些情况不需要创建索引
    表记录太少
    经常增删改的表或者字段
    where条件里用不到的字段不创建索引
    过滤性不好的不适合建索引

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值