尚硅谷 Java面试题 第一季 - 20181221

SSM

1、SpringBean的做用域之间有什么区别?

其实就是scope属性里设置singleton | prototype 两个属性,默认是singleton单例的
prototype是多实例。
其余的request:每次HTTP请求会建立新的bean,该做用域仅适用于WebApplicationContext环境。
session:同一个HTTP session共享bean,该做用域仅适用于WebApplicationContext环境。java

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

3、SpringMVC解决中如何解决POST请求中文乱码问题

springmvc提供了过滤器CharacterEncodingFilter:这个类有两个变量String类型的encoding、boolean类型forceEncoding默认false,核心方法doFilterInternal,方法中有request.setCharacterEncoding设置请求字符集,设force那个为true的话,能够设置response.setCharacterEncoding。
那么在web.xml里须要配置这一属性:git

<!--post方式字符集-->
<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>force-encoding</param-name>
         <param-value>UTF-8</param-value>
     </init-param>
</filter>
<filter-mapping>
     <filter-name>CharacterEncodingFilter</filter-name>
     <url-pattern>/*</url-pattern>
</filter-mapping>

get方式,修改Tomcat的server.xml中的配置。web

4、简单的谈一下SpringMVC的工做流程

springmvc在处理模型数据有两种方式:方式一.返回值是ModelAndView、方式二.在参数中传入Map,Model或者ModelMap;最后都会转换为一个 ModelAndView对象(因此是以request做用域来响应用户)
流程以下图:
在这里插入图片描述redis

总结
请求过来后,先到DispatcherServlet中央处理器,以后它会调用处理器映射器找到HandlerMapping处理器映射器里的方法,返回HandlerExecultionChain对象,这个对象包含了全部的拦截器和处理器。
以后拿到HandlerAdapter处理器适配器,由它找到对应的处理器去调用请求,至关于调用controller以后,会返回ModelAndView对象,这个对象返回到中央处理器。
中央处理器经过咱们在springmvc配置文件中配的InternalResourceViewResolver视图解析器,获得视图InternalResourceView。
获得视图以后,调用里边的方法进行渲染视图,将咱们的模型数据,在页面给用户呈现出来,响应给用户。算法

5、MyBatis中当实体类中的属性名和表中的字段名不同,怎么办?(三种解决方案)

  1. 写sql语句时起别名
  2. 在MyBatis的全局配置文件中开启驼峰命名规则(前提只是将数据库中下划线映射)
  3. 在Mapper映射文件中使用ResultMap自定义映射

Java高级

1、Linux经常使用服务类相关命令

CentOS 6spring

  • 经常使用基本命令-进程类
  • 注册在系统中的标准化程序
    • service 服务名 start
    • service 服务名 stop
    • service 服务名 restart
    • service 服务名 reload
    • service 服务名 status
  • 经过chkconfig 命令设置自启动程序
    • chkcongfig --list #能够查看全部对应服务自启动状态开关
    • chkcongfig --level 3 服务名 off #on自启动、off不自启动

运行级别runlevel(centos6),经常使用级别3和5
0 停机、1 单用户root状态、2 多用户状态、3 有网多用户状态、4. 保留、5 图形模式、六、重启sql

CentOS 7数据库

  • 注册在系统中的标准化程序
    • systemctl start 服务名
    • systemctl restart 服务名
    • systemctl stop 服务名 #示例:停防火墙 systemctl stop firewalld
    • systemctl reload 服务名
    • systemctl status 服务名
  • 查看服务的命令
    • systemctl list-unit-files #示例:systemctl list-unit-files |grep firewalld
    • systemctl --type service
  • 设置自启动/不自启动
    • systemctl enable 服务名
    • systemctl disable 服务名

2、git分支相关命令

Git:分布式版本控制工具json

  1. 建立分支centos

  2. 切换分支

    一步完成:git checkout -b <分支名> #直接就完成了建立,并切换过去了

  3. 合并分支

    先切换到主干 git checkout master
    git merge <分支名>

  4. 删除分支

    先切换到主干 git checkout master
    git branch -D <分支名>
    在这里插入图片描述

工做流:
master分支,分出多个develop分支,并行开发互不影响;出现bug了,能够有master分出一个临时分支,处理完后再合并到master中合并上线;以后将临时分支合并到develop分支,保证版本一致,避免bug重复出现。
开发人员开发完成了,先合并到dev分支,建立测试分支进行测试,没问题了在合并到master上线,以后再和dev合并保证一致。

3、redis持久化几种类型及区别?

两种:

  • RDB(Redis DataBase)快照,将全部内存数据进行全量保存 ;优势:省空间,效率高;缺点:数据量大耗性能,最后一次持久化可能数据丢失

  • AOF(Append Of File)日志,以日志形式来记录每一个写操做增量操做 ;优势:备份稳健,可读日志处理误操做;缺点:占更多磁盘,备份慢,占性能

4、Mysql建索引的时机?

MySQL官方定义:索引(Index)是帮助MySQL高效获取数据的数据结构。简而言之,索引本质是数据结构。

优:提升检索效率,下降数据库IO成本;经过索引列对数据进行排序,下降排序成本,下降cpu消耗。

劣:下降更新表的速度,由于更新表时,不只要保存数据,还要保存索引更新了的索引列字段,不断调整索引信息。

实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录,因此索引列也要占用空间

  • 建立索引

主键自动惟1、频繁查询字段、外键关联字段、组合索引性价比高、排序字段、统计或分组字段(分组更伤性能)

  • 不建立索引

表记录太少、频繁增删改、where用不到字段、过滤性很差字段(例:性别)

5、JVM垃圾回收机制 - GC发生在JVM哪部分,有几种GC,它们的算法是什么?

GC发生在heap堆中。
GC是分代收集算法:频繁收集年轻代``Minor GC、次数较少老年代``Full GC、永久区不GC
GC的四大算法:

  1. 引用回收算法(对象有引用,就不回收,已淘汰,没法处理循环引用)
  2. 复制算法(发生在YG、效率高,无碎片,占空间)
  3. 标记清楚(发生在OG、省空间,产生碎片)
  4. 标记压缩(OG、成本高)
  5. 标记清除压缩(OG、③④混合)

Java项目

1、redis在项目中的使用场景 (各数据类型)

  • String
    绑定ip地址,能够记录ip地址的操做。

  • Hash
    存储用户信息【id,name,age】
    Hset(key,field,value)
    Hset(userKey,id,101)
    当我修改用户信息某一项属性的时候,能够直接取出单一的值。
    不建议使用String类型是由于,在反序列化时,会所有序列化出来,会增长IO次数,下降性能。

  • List
    实现最新消息的排行
    还能够利用List的push命令,将任务存在list集合中,同时使用另外一个命令,将任务从集合中取出[pop]。
    Redis — List 数据类型来模拟消息队列。【电商中的秒杀就能够采用这种方式来完成一个秒杀活动】

  • Set
    特殊之处:能够自动排重(非重复)。好比说微博中将每一个人的好友存在集合(Set)中
    这样求两我的的共通好友的操做。咱们只须要求交集便可。

  • Zset (SortedSet)
    以某一个条件为权重,进行排序。 京东:商品详情的时候,都会有一个综合排名,还能够按照价格进行排名。

2、ES和solr的区别?

它们都是基于Lucene搜索服务器基础上开发,高性能的企业级搜索服务。【它们都是基于分词技术构建的倒排索引方式进行查询】
区别:

  1. 当实时创建索引的时候,solr会产生io阻塞,而es则不会,es查询性能高于solr。
  2. 在不断动态添加数据的时候,solr的检索效率会降低,es则不会。
  3. Solr利用zk进行分布式管理,es自身带有分布式系统管理功能。Solr的本质是web项目,须要部署到web服务器上,启动服务器时需配置solr。
  4. Solr支持更多的格式数据[xml、json、csv],而es仅支持json文件格式。
  5. Solr是传统搜索应用的有力解决方案,可是es更适合新兴实时搜索应用。【solr适合已有数据搜索时,效率更好;须要动态增添数据时,es效率更高】
  6. solr的观望提供功能更多,es更注重核心搜索功能,高级功能须要三方集成。
  • Solr集群图
    11
    在这里插入图片描述

  • ElasticSearch集群图
    在这里插入图片描述

3、单点登陆实现过程?

单点登陆:一处登陆、多处使用
(前提:单点登陆多使用在分布式系统中)
【京东:单点登陆是将token放入到cookie中】

4、购物车实现过程?

  • 购物车跟用户的关系!
    不管买多少商品,一个用户必须对应一个购物车。单点登陆在购物车以前。
  • 跟购物车有关操做
  1. 添加购物车
    用户未登陆:数据保存到Redis【京东将未登陆购物车放在redis中,给未登陆用户存储惟一标识uuid,保存用户未登陆时的购物车信息】、cookie
    用户登陆:Redis缓存[hash或string:hset(key,field,value)],读写速度快;保证数据安全性,将数据存到数据库中。
  2. 展现购物车
    未登陆状态:直接从cookie中取得数据展现便可
    登陆状态:用户一旦登陆,必须显示数据库或Redis以及cookie中的购物车综合数据

5、消息队列的使用?

分布式系统中处理高并发的情景。
因为高并发的环境下,来不及同步处理大量请求,则会致使请求发生阻塞。这是使用消息队列的异步通讯能够解决问题。

在这里插入图片描述 消息队列弊端: 消息的不肯定性,延迟队列,轮询技术来解决该问题便可!(ActiveMQ java)

相关文章
相关标签/搜索