java面试问题

javaSE

javaEE

1、SpringMVC的执行流程

行流程
1、用户发送请求至前端控制器DispatcherServlet。
2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。
3、 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
4、 DispatcherServlet调用HandlerAdapter处理器适配器。
5、 HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
6、 Controller执行完成返回ModelAndView。
7、 HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。
8、 DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
9、 ViewReslover解析后返回具体View。
10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
11、 DispatcherServlet响应用户。
在这里插入图片描述

2、SpringMVC中解决前端post请求和get请求中文乱码问题

1、post请求:在web.xml文件中配置一个 CharacterEncodingFilter过滤器,并配置对应的encoding属性值为utf-8 ,以及响应的forceEncoding属性为true
2、get请求:修改tomcat的配置文件server.xml中 connecter 标签下的URIEncoding=“utf-8”。

3、单点登录流程

一处登录,多处利用(分布式系统) 检查cookie中的token信息
在这里插入图片描述

4、商城购物车

  • 添加购物车(商品信息存放)
    1、用户未登录
     redis----JD
    cookie----自己开发的项目
    2、用户已登录
     redis缓存
      Hset存储数据,hset(key,filed,value)
        key: user_userId_cart
        filed: skuid(商品id)
        key: value(商品信息)
     关系型数据库(orcal、mysql),防止对应服务挂机数据丢失
  • 展示购物车
    1、用户未登录
     直接从redis/cookie中获取数据
    2、用户已登录
     必须显示数据库中的记录+redis的记录

4、消息队列

分布式系统中利用消息队列(异步通信)处理高并发请求

  • 弊端
      消息的不确定性:延迟队列,轮训的技术解决

MyBatis/MyBatis Plus

1、mybatis实体类中的属性与前端表格不一样

1、写sql语句时起别名
2、在mybatis的全局配置文件(mybatis-config.xml)开启驼峰命名规则(可以将last_name 映射为lastName);
3、在mapper映射文件中使用resultMap来自定义映射文件

Linux 相关命令

1、常用服务类相关命令

  • Centos6
    service 服务名 start/ stop/ restart/ reload/ status
    开启自启动
    chkconfig --list|grep xxx (查看服务)
    chkconfig --level 3/5 服务名 on
  • Centos7
    systemctl start/ stop/ restart/ reload/ status 服务名
    开启/关闭 自启动
    systemctl enable/disable 服务名

git命令

1、分支

  • 创建分支
    1、git branch <分支名>
    2、git branch -v 查看分支
  • 切换分支
    1、git checkout <分支名>
    2、git checkout -b <分支名> (常用,创建+切换)
  • 合并分支
    step1:git checkout master 切换到主干
    step2 :git merge <分支名>
    example:将b分支合并到a分支上:
    git checkout a; git merge b;
  • 删除分支
    step1:切换到主干 git checkout master
    step2:git branch -D <分支名>
    example: 删除b分支
    git checkout a; git branch -D b;

Redis

1、redis持久化

  • rdb
    全量恢复(存储数据快照)。数据恢复速度快,但是数据庞大是比较消耗内存
  • AOF
    增量恢复(存储数据修改命令)。数备份稳定,丢失数据概率地,但是恢复熟读慢,比RDB占用更多的磁盘空间

2、redis的使用场景

数据类型使用场景
String何时封锁一个ip地址
Hash存储用户信息[id,name] Hset(key,filed,value) Hset(user,id,101) Hset(user,name,admin)
List实现最新消息的排行,模拟消息队列(push/pop命令)如电商中的秒杀
Set查重。微博中将每个人的好友存集合中(一个人不能加另一个人两次),求两个人的好友的交集
Zset可以以某一个条件进行排序。JD中商品以某一种要求排名

Mysql

1、mysql什么时候适合建立索引

1、主键自动建立索引;
2、频繁查询的条件建立索引
3、联合索引比单列性价比高

JVM

1、jvm垃圾回收机制
在这里插入图片描述

ElasticSearch

1、ElasticSearch与solr的区别


  • 1、均是基于分词技术构建的倒排索引的方式进行查询
    2、都是基于java开发
  • 异solr(2002),ES(2010)功能更强大
    1、当建立索引时,solr会产生IO阻塞,ES不会
    2、在不断增加数据时,solr的检索效率会降低,ES不会
    3、solr利用Zookeeper进行分布式管理,ES自带
    4、solr一般部署到web服务器上(tomcat)<动态web工程>
    5、solr支持更多的格式数据(xml,json,csv),ES只支持json
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值