• 2019 java中高级 面试题汇总


    答题的要点  1. 概念  2. 原理  3. 优点 

    Spring

    一、说说你对spring的理解

    首先spring是一个开源框架,为了解决企业应用程序开发复杂性而创建的,它完成了大量开发中的通用步骤,留给开发者的仅仅是与特定应用相关的部分,从而大大提高了企业应用的开发效率。

    其次spring架构是一个分层架构,由7大模块组成

    1.spring IOC

    2.spring AOP

    3.spring 上下文

    4.springDao

    5.springMVC

    6.springWeb

    7.springORM

    然后spring自己也有几大框架

    spring MVC、spring Boot丶spring cloud丶spring data丶spring security

    二丶说一下springIOC

    IOC控制反转也叫依赖注入,我理解的是它就是一个生产和管理bean的一个容器,你自己不需要通过new去生成对象而是通过spring bean的工厂来生成所需要的对象。

    原理

    将对象交给容器管理,你只需要在spring配置文件中配置对应的bean以及设置相关的属性,让spring容器来生成类的实例对象以及管理对象。在spring容器启动的时候,spring会把你在配置文件中配置的bean都初始化好,然后在你需要调用的时候,就把它已经初始化好的那些bean分配给你需要调用这些bean的类(假设这个类名是A),分配的方法就是调用A的setter方法来注入,而不需要你在A里面new这些bean了。

    三丶说一下springIOC的几种注入方式

    1.通过注解注入

    2.调用set方法注入

    3.通过构造方法注入

    四丶说一下springAOP

    简单来说,就是将那些与业务无关,却为业务模块共同调用的逻辑封装起来,减少重复代码降低了代码的耦合度。并有利于未来对代码的可操作性和可维护性。

    原理

    实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码

    五丶说一下springMVC

    M-Model 模型(完成业务逻辑:有javaBean构成,service+dao+entity)

    V-View 视图(做界面的展示  jsp,html……)

    C-Controller 控制器(接收请求—>调用模型—>根据结果派发页面)

     

    六丶spring常用接口

    1.ApplicationListener:当需要监听自定义事件时,可以新建一个实现ApplicationListener接口的类,并将该类配置到Spring容器中。

    2.FactoryBean:用于创建特定的对象,对象的类型由getObject方法的返回值决定。

    3.ApplicationContextAware:当一个类需要获取ApplicationContext实例时,可以让该类实现ApplicationContextAware接口。

    4.ApplicationEvent:当需要创建自定义事件时,可以新建一个继承自ApplicationEvent抽象类的类。

     

    七丶spring cloud有哪些组件

    https://blog.csdn.net/yejingtao703/article/details/78331442/

    spring cloud常见面试题

    https://blog.csdn.net/moakun/article/details/82817757

     

    JVM

     

     

    集合

    一丶HashMap底层原理

     https://www.cnblogs.com/java-jun-world2099/p/9258605.html

    二丶List面试题

    https://www.cnblogs.com/chanshuyi/p/4998776.html

    MQ

    一丶为什么使用MQ

    面试官问这个问题的期望之一的回答是,你们公司有什么业务场景,这个业务场景有什么技术挑战,如果不用MQ可能会很麻烦,但是再用了之后带来了很多好处。

    消息队列的常见使用场景有很多但是核心的有三个:解耦、异步、削峰

    二丶消息队列的优点和缺点?

    优点:特殊场景下解耦、异步、削峰。

    缺点:

    系统可用性降低:系统引入的外部依赖越多,越容易挂掉,本来你就是A系统调用BCD三个系统的接口就好了,人ABCD四个系统好好的没什么问题,你偏加个MQ进来,万一MQ挂了怎么办,整套系统崩溃了,就完蛋了

    系统复杂性提高:硬生生加个MQ进来,你怎么保证消息没有重复消费?怎么处理消息丢失的情况?怎么保证消息传递的顺序性?

    一致性问题:系统A处理完了直接返回成功了,人家都认为你这个请求成功了;但问题是,要是BCD三个系统哪里BD系统成功了,结果C系统写库失败了,咋整?数据就不一致了。

    三丶如何保证消息不被重复消费(如何保证消息消费时的幂等性)?

    在消息生产时,MQ内部针对每条生产者发送的消息生成一个inner-msg-id,作为去重的依据(消息投递失败并重传),避免重复的消息进入队列;

    在消息消费时,要求消息体中必须要有一个bizId(对于同一业务全局唯一,如支付ID、订单ID、帖子ID等)作为去重的依据,避免同一条消息被重复消费。

    四丶如何处理消息丢失的问题 (如何保证消息的可靠传输)?

    这个丢数据,mq一般分为两种,要么是mq自己弄丢了,要么是我们消费的时候弄丢了。

    用rabbit举例

    (1)消息持久化

    (2)ACK确认机制

    (3)消息补偿机制

    (4)设置集群镜像模式

    五丶消息如何分发?

    若该队列至少有一个消费者订阅,消息将以循环(round-robin)的方式发送给消费者。每条消息只会分发给一个订阅的消费者(前提是消费者能够正常处理消息并进行确认)。

    六丶消息队列有哪些配置

    <beans  xmlns="http://www.springframework.org/schema/beans"  
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xmlns:rabbit="http://www.springframework.org/schema/rabbit" xsi:schemaLocation="http://www.springframework.org/schema/beans   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/rabbit  http://www.springframework.org/schema/rabbit/spring-rabbit-1.0.xsd">  
    <!-- 定义RabbitMQ的连接工厂 -->  
    <rabbit:connection-factory id="connectionFactory" class="org.springframework.amqp.rabbit.connection.CachingConnectionFactory">
        <constructor-arg value="10.130.202.12"><!--服务器ip地址-->  
        <property name="username" value="tele-onlineYa">
        <property name="password" value="tele-onlineYa">
        <property name="port" value="5678">
        <property name="channelCacheSize" value="50"> <!--通道缓存大小-->
    <property name="virtualHost" value="tele-onlineYa"> </bean> <!--通过指定admin信息,当前producer中的exchange和queue会在rabbitmq服务器上自动生成。 --> 

    <rabbit:admin connection-factory="connectionFactory" /> <!-- 队列queue,自动声明 -->

    <rabbit:queue name="ZL.SALETRACE" exclusive="false" auto-declare="false" durable="true" /> <!--自定义消息接受者-->

    <bean id="messageReceiver" class="com.zlf.cn.api.RabbitMqConsumerListener"> <!-- queue监听器,观察监听模式。当有消息到达本应用时会通知监听在对应队列queue上的监听对象 -->

    <rabbit:listener-container connection-factory="connectionFactory"> <rabbit:listener queues="ZL.SALETRACE" ref="messageReceiver" />
    </rabbit:listener-container>

    </beans>

    dubbo

    一丶简单说一下dubbo

    Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,就是个远程服务调用的分布式框架(告别Web Service模式中的WSdl,以服务者与消费者的方式在dubbo上注册)

    其核心部分包含:

    1. 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。

    2. 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。

    3. 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

    二丶dubbo调用关系说明

    (1)服务提供者在启动时,向注册中心注册自己提供的服务。

    (2)服务消费者在启动时,向注册中心订阅自己所需的服务。

    (3)注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。

    (4)服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

    (5)服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

    三丶你配置过dubbo哪些东西

    # 应用名
    dubbo.application.name = dubbodemo-consumer
    # 注册中心地址
    dubbo.registry.address = zookeeper://localhost:2181
    # 调用协议地址 dubbo.protocol.name = dubbo dubbo.protocol.port = 28080
    # 设置服务端和消费端连接超时时间
    spring.dubbo.consumer.timeout=30000
    spring.dubbo.provider.timeout=30000
    服务端要声明暴露的服务接口
    消费端要配置调用哪些服务


    MySQL

    一丶MYSQL有哪些索引?
    https://blog.csdn.net/liutong123987/article/details/79384395



  • 相关阅读:
    firewalld添加/删除服务service,端口port
    centos7下配置ftp服务器
    CentOS安装vsftpd FTP后修改默认21端口方法
    虚拟机,安装tools时出现“安装程序无法继续解决
    Linux下mysql数据库备份
    测试linux下磁盘的读写速率
    redis状态详解
    office2010安装不了提示已经安装32位的了怎么办
    nginx安装部署
    结构体赋值
  • 原文地址:https://www.cnblogs.com/caolyl/p/10334504.html
Copyright © 2020-2023  润新知