面经1

1.MyBatis中当实体类中的属性名和字段名不一样,怎么办?

1.写SQL语句时起别名
2.在MyBatis的全局配置文件中开启驼峰命名("mapUnderscoreToCamelCase")
3.在Mapper映射文件中使用resultMap来自定义映射规则

2.Redis持久化有几种类型,他们的区别有哪些?

1.RDB(Rdis DataBase)
2.AOF(Append Of File)
    优点:1.备份机制更稳定,丢失数据概率更低
        2.可读的日志文本,通过操作AOF稳健,可以处理误操作
    缺点:1.比起RDB更占磁盘空间
        2.恢复备份速度慢
        3.每次的读写都同步的话有一定的性能压力
        4.存在个别的bug,造成恢复不能

2.SpringMVC如何处理到来的请求?

在这里插入图片描述

3.Elasticsearch和solr的区别?

区别:
1.当实时创建索引的时候,solo会产生阻塞,而es则不会,es的查询效率要高于solr.
2.在不断的动态添加数据的时候,solr效率会变慢,es则没有变化
3.Solr利用zookeeper进行分布式管理,而es自身带有分布式管理功能.Solr一般都要部署
到web服务器上,比如tomcat.启动tomcat时要配置tomcat和solr的关联.
    a)单纯的对已有数据进行检索的时候,solr效率更高,高于es
4.Solr官网提供很多功能,而es本身更注重于核心功能,高级功能多有第三方插件.

4.单点登录实现过程?

在这里插入图片描述

   单点登录:一处登录多处使用!
    前提:单点登录多使用在分布式系统中.

5.购物车实现过程

1.跟购物车有关的操作有哪些?
    1.添加购物车
        1.用户登录状态
            1.添加到什么地方?未登录将数据保存到什么地方?
                1.Redis?---京东
                2.Cookie?---自己做项目,或者local....(本地储存)
        2.用户未登录状态
            1.Redis缓存中[读写事务快]
                1.Hash:hset(key,field,value)
                    1.key定义为user:userId:card
                    2.Hset(key,skuId,value)
            2.存在数据库中[Oracle,mysql]

    2.展示购物车
        1.未登录状态
            1.直接从cookie中取得数据
        2.登录状态
            1.用户一旦登录:必须显示数据库或者redis + cookie中的购物车

6.分布式系统如何处理高并发?

(https://blog.csdn.net/jimmy609/article/details/37810591)
1.HTML静态化
2.图片服务器分离
3.数据库搭集群和库表散列
4.缓存
5.负载均衡
6.采用消息队列:由于在高并发的环境下,来不及处理用户发送的请求,则会
导致请求发生阻塞,比如说:大量的insert或者update之类的请求同时到达数据
库MYSQL,直接导致无数的行锁表锁,甚至会导致请求堆积很多.从而触发too many
connections错误.使用消息队列可以解决[异步通信]

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

    消息队列的弊端:
        消息的不确定性:延迟队列,轮询技术解决该问题即可!

7.springboot优势

①良好的基因
因为SpringBoot是伴随着Spring 4.0而生的,boot是引导的意思,也就是它的作用其实就是在于帮
助开发者快速的搭建Spring框架,因此SpringBoot继承了Spring优秀的基因,在Spring中开发更为方便快捷。
②简化编码
比如我们要创建一个 web 项目,使用 Spring 的朋友都知道,在使用 Spring 的时候,需要在 
pom 文件中添加多个依赖,而 Spring Boot 则会帮助开发着快速启动一个 web 容器,在 Spring Boot 
中,我们只需要在 pom 文件中添加如下一个 starter-web 依赖即可。
③简化配置
Spring 虽然使Java EE轻量级框架,但由于其繁琐的配置,一度被人认为是“配置地狱”。各种XML、
Annotation配置会让人眼花缭乱,而且配置多的话,如果出错了也很难找出原因。Spring Boot更多
的是采用 Java Config 的方式,对 Spring 进行配置。
④简化部署
在使用 Spring 时,项目部署时需要我们在服务器上部署 tomcat,然后把项目打成 war 包扔到 tomcat
里,在使用 Spring Boot 后,我们不需要在服务器上去部署 tomcat,因为 Spring Boot 内嵌了 tomcat
,我们只需要将项目打成 jar 包,使用 java -jar xxx.jar一键式启动项目。
⑤简化监控
我们可以引入 spring-boot-start-actuator 依赖,直接使用 REST 方式来获取进程的运行期性能参数,
从而达到监控的目的,比较方便。但是 Spring Boot 只是个微框架,没有提供相应的服务发现与注册的
配套功能,没有外围监控集成方案,没有外围安全管理方案,所以在微服务架构中,还需要 Spring Cloud
 来配合一起使用。
缺点:
集成度较高,使用过程中不太容易了解底层
因为不要自己做配置,项目有的时候会报错,不容易解决

8.Java快速失败和安全失败

1.快速失败(fail-fast)是什么?
快速失败是指在使用迭代器遍历一个集合的时候,如果在他遍历的过程中对他的内容进行修改、
增加、删除,那么就会抛出Concurrent Modification Exception异常。
2.快速失败(fail-fast)的原理?
在调用 next() 和 remove()时,会先进入一个方法中判断如果 modCount 不等于 expectedModCount
,则抛出ConcurrentModificationException异常
3.怎么解决快速失败(fail-fa)?
使用iterator操作。将ArrayList替换成java.util.concurrent包下对应的类
4.安全失败(fail-safe)是什么?
安全失败是指在遍历的时候不会直接在集合内容上访问,而是先复制一遍里面的内容,在重新拷贝
一份新的集合内容输出,输出的结果是原来的值,所有不会报异常,正常输出。
5.安全失败(fail-safe)的原理?
就是指将原始值里面的内容拷贝一份道数组中,这样的话原始值的数据改变了拷贝里面的数据也不会改变
6.fail-fast和fail-safe的区别?
fail-fast继承的接口是AbstractList
fail-safe继承的接口是List
一般推荐使用fail-safe安全失败

9.微服务架构的好处

1.微服务架构模式有很多好处。首先,通过分解巨大单体式应用为多个服务方法解决了复杂性问题。在功能不变的情况下,应用被分解为多个可管理的分支或服务.微服务架构模式给采用单体式编码方式很难实现的功能提供了模块化的解决方案,由此,单个服务很容易开发、理解和维护.
2.这种架构使得每个服务都可以有专门开发团队来开发.开发者可以自由选择开发技术,提供API服务.
3.微服务架构模式是每个微服务独立的部署。开发者不再需要协调其它服务部署对本服务的影响.这种改变可以加快部署速度.微服务架构模式使得持续化部署成为可能.
4.微服务架构模式使得每个服务独立扩展.你可以根据每个服务的规模来部署满足需求的规模.
5.不足:微服务应用是分布式系统,由此会带来固有的复杂性。开发者需要在RPC或者消息传递之间选择并完成进程间通讯机制。更甚于,他们必须写代码来处理消息传递中速度过慢或者不可用等局部失效问题。当然这并不是什么难事,但相对于单体式应用中通过语言层级的方法或者进程调用,微服务下这种技术显得更复杂一些。
 
comments powered by Disqus [面经] [总结]