【知识整理】之———面试进阶(1)

JDK

jdk1.8版本后的新特性有哪些?

1.default关键字
2.Lambda 表达式
3.函数式接口
4.方法与构造函数引用
6.Date Api更新 
7.流

1.如何避免空指针异常?

 解答:java中的空指针是最常见的错误之一,要尽量避免空指针异常,首先在使用对象前,先对其进行初始化。
    另外,要完全避免空指针,最好做到以下几点:
    1:对于所有 public 方法传入的对象参数进行 null 值检查
    2:对于所有从数据库获取的对象进行 null 值检查
    3:对于所有从网络、IO 中获取的数据(对象)进行 null 值检查,同时,也要注意编码的形式,如:有时检察输入的String类型变量str是否为合法输入时,使用判断:  if( str!= null && !str.isEmpty() ) 而不能写成 if( !str.isEmpty() && str!= null )这样的话程序因为优先执行左边的判断语句,从而导致NullPointerException 的发生.

Dubbo 和 Spring Cloud 有什么区别?

答案:1.服务调用方式 dubbo是RPC springcloud Rest Api
         2.注册中心,dubbo 是zookeeper springcloud是eureka,也可以是zookeeper
         3.服务网关,dubbo本身没有实现,只能通过其他第三方技术整合,springcloud有Zuul路由网关,作为路由服务器,进行消费者的请求分发,springcloud支持断路器,与git完美集成配置文件支持版本控制,事物总线实现配置文件的更新与服务自动装配等等一系列的微服务架构要素。

dubbo都支持什么协议,推荐用哪种?

hession 同步 短连接
redis 同步 短连接
dubbo NIO异步方式 长连接
rmi  同步 短连接
http 同步 短连接
webservice

Dubbo需要 Web 容器吗?

答案:不需要,因为后台服务不需要Tomcat或JBoss等Web容器的功能,如果硬要用Web容器去加载服务提供方,增加复杂性,也浪费资源。 服务容器只是一个简单的Main方法,并加载一个简单的Spring容器,用于暴露服务。

Dubbo内置了哪几种服务容器?

 答案:   1.Spring Container
            2.Jetty Container
            3.Log4j Container

Dubbo里面有哪几种节点角色?

   答案:  1.registry  注册中心. 是用于发布和订阅服务的一个平台.用于替代SOA结构体系框架中的ESB服务总线的发布服务。
            2.Consumer 服务提供者。 
            3.container  容器。在启动执行的时候, 必须依赖容器才能正常启动. ( 默认是spring容器)
            4.monitor    监控中心,是Dubbo提供的一个jar工程
            主要功能是监控服务端(Provider)和消费端(Consumer)的使用数据的. 如: 服务端是什么,有多少接口,多少方法, 调用次数, 压力信息等. 客户端有多少, 调用过哪些服务端, 调用了多少次等.

Dubbo的服务注册与发现的流程图是怎样的?

 答案:调用关系说明
            1.  服务容器负责启动,加载,运行服务提供者。
            2.  服务提供者在启动时,向注册中心注册自己提供的服务。
            3.  服务消费者在启动时,向注册中心订阅自己所需的服务。
            4.  注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
            5.  服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
            6.  服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

Dubbo有哪几种配置方式?

  		1. XML 配置文件方式
        2. properties 配置文件方式
        3. annotation 配置方式
        4. API 配置方式

Dubbo 核心的配置有哪些?

1.服务端   2.客服端    3.以及dubbo的核心配置

Dubbo推荐使用什么序列化框架,你知道的还有哪些?

 答案:推荐使用Hessian序列化,还有Duddo、FastJson、Java自带序列化。

Dubbo默认使用的是什么通信框架,还有别的选择吗?

 答案:Dubbo 默认使用 Netty 框架,也是推荐的选择,另外内容还集成有Mina、Grizzly

Dubbo有哪几种负载均衡策略,默认是哪种?

   1.随机(默认) 2.轮询  3.最少活跃调用数 4.一致性hash

Dubbo支持服务多协议吗?

 答案 支持多协议,现在xml可以配置不同的接口不同的协议  

Dubbo可以对结果进行缓存吗?

   答案:为了提高数据访问的速度。Dubbo 提供了声明式缓存,以减少用户加缓存的工作量.<dubbo:reference cache="true" /> 其实比普通的配置文件就多了一个标签 cache="true"

Dubbo服务之间的调用是阻塞的吗?

  答案: 默认是阻塞的,可以异步调用,没有返回值的可以这么做。Dubbo 是基于 NIO 的非阻塞实现并行调用,客户端不需要启动多线程即可完成并行调用多个远程服务,相对多线程开销较小,异步调用会返回一个 Future 对象。 

Dubbo支持分布式事务吗?

  答案:目前暂时不支持,可与通过 tcc-transaction 框架实现 
         介绍:tcc-transaction 是开源的 TCC 补偿性分布式事务框架 

Dubbo支持服务降级吗?

   答案: 支持, 执行mock配置的方式 1.return null 2. mock=‘true’ 使用以mock结尾的类实现接口 

服务提供者能实现失效踢出是什么原理?

  答案:服务失效踢出基于 zookeeper 的临时节点原理。 

zookeeper都有哪些功能?

  答案:1.统一命名服务 2.配置管理 3.集群管理

zookeeper有哪几种部署方式?

 答案:部署模式:单机模式、伪集群模式、集群模式。 

zookeeper使用什么协议?

  答案:ZAB 协议

zookeeper的通知机制是怎样的?

答案:  Session:
        客户端使用某种语言绑定创建一个服务的句柄时,就建立了一个zookeeper会话。会话建立后,句柄处于CONNECTING状态,客户端会试图连接到组成zookeeper服务的某个服务器,连接成功则进入到CONNECTED状态。通常操作中句柄将处于这两个状态之一。如果发生不可恢复的错误,如会话过期、身份鉴定失败、应用显示关闭,则句柄进入到closed状态。

        Watch:
        客户端可以在每个znode节点上设置一个观察,如果被观察服务端的znode节点有变更,那么watch就会被触发,这个watch所属的客户端将接受到一个通知包 告知节点已经发生变化,把相应的事件通知给设置watch的client端。
        也即异步回调的触发机制

zookeeper是如何实现分布式锁的?

答案: [具体可查看:](https://blog.csdn.net/kongmin_123/article/details/82081953)
	 分布式锁引入一个内容:【Watcher机制】 https://blog.csdn.net/SCUTJAY/article/details

zookeeper的选举机制及流程是什么?

答案:三个核心选举原则:
	(1)Zookeeper集群中只有超过半数以上的服务器启动,集群才能正常工作;
	(2)在集群正常工作之前,myid小的服务器给myid大的服务器投票,直到集群正常工作,选出Leader;
	(3)选出Leader之后,之前的服务器状态由Looking改变为Following,以后的服务器都是Follower。
zookeeper集群是如何搭建的?

答案:搭建请查看链接: 集群的搭建

zookeeper集群最少要几台机器,集群规则是怎样的?

 答案: 基数台。 
		三个核心选举原则:
	(1)Zookeeper集群中只有超过半数以上的服务器启动,集群才能正常工作;
	(2)在集群正常工作之前,myid小的服务器给myid大的服务器投票,直到集群正常工作,选出Leader;
	(3)选出Leader之后,之前的服务器状态由Looking改变为Following,以后的服务器都是Follower。

zookeeper集群中有几种角色?

答案:https://blog.csdn.net/yu757371316/article/details/80742223/ 

zookeeper集群支持动态添加机器吗?

 答案:https://blog.csdn.net/angou6476/article/details/101998050

zookeeper集群中怎么保证主从节点的状态同步?

  答案:zookeeper的核心是原子广播,这个机制保证了各个server之间的同步。 实现这个机制的协议叫做zab协议。 zab协议有俩种模式,分别是恢复模式(选主)和广播模式(同步)。 当服务启动或者在领导者崩溃后,zab就进入了恢复模式,当领导者被选举出来,并且大多数server 完成了盒leader的状态同步以后,恢复模式就结束了,状态同步了leader和server具有相同的系统状态

zookeeper常用的命令有哪些?

 答案:一、zk服务命令
            1. 启动ZK服务: bin/zkServer.sh start
            2. 查看ZK服务状态: bin/zkServer.sh status
            3. 停止ZK服务: bin/zkServer.sh stop
            4. 重启ZK服务: bin/zkServer.sh restart
            5. 连接服务器: zkCli.sh -server 127.0.0.1:2181

        二、连接zk
            启动ZooKeeper服务之后,我们可以使用如下命令连接到 ZooKeeper 服务:
            eg、zookeeper-3.4.8\bin>zkCli.cmd -server 127.0.0.1:2181
            get set create quit ls 

zookeeper与eureka的区别有哪些?

   答案: Eureka(保证AP),Zookeeper(保证CP)。  (这里引出CPA与ZAB算法)
    	1.Zookeeper保证CP,当向注册中心查询服务列表时,我可以容忍注册中心返回的是几分钟以前的注册信息,单不能接受服务直接down掉不可用,也就是说,服务注册功能对可用性的要求高于一致性,zookeeper当master节点因为网络故障与其他的节点失去联系,剩余的节点就会重新选举leader,问题在于选举的时间太长,30~120S 且选举期间整个ZK集群都是不可用的,这就导致在选举期间注册服务瘫痪。
    	2.eurea保证了AP,只要有一台eureka还在,就能保证注册服务的可用性,只不过查到的信息可能不是最新的(不保证强一致性)。 eureka有一种自我保护机制,如果在15分钟呢超过85%的节点都没有正常的心跳,那么Eureka就认为客户端与注册中心出现了网络故障,此时会出现以下情况:
    	1)。Eureka 不在从注册列表中移除因为长时间没有收到心跳而应该过期的服务
    	2)Eureka任然能够接受新服务的注册和查询请求,但是不会被同步到其他节点上(即保证当前节点任然可用)
    	3.当网络稳定时候,当前实例新的注册信息会被同步到其他的节点中

zookeeper的四种类型的节点?

答案:  znode创建类型(CreateMode),有以下四种:
        PERSISTENT                持久化节点
        PERSISTENT_SEQUENTIAL     顺序自动编号持久化节点,这种节点会根据当前已存在的节点数自动加1
        EPHEMERAL                 临时节点, 客户端session超时这类节点就会被自动删除
        EPHEMERAL_SEQUENTIAL      临时自动编号节点

spring的IOC和AOP原理是什么?

答案:
 一. IOC:控制反转,就是把对象的创建交给Spring来做
      IOC所用到的技术: 1.xml配置文件 2.dom4J解析XML文件 3.工厂设计模式 4.反射
 二、 AOP底层实现原理: 动态代理(包含CGLIB与JDK动态代理) 动态代理:可以理解为,在不修改原有类对象方法的源代码基础上,通过代理对象实现原有类对象方法的增强,也就是拓展原有类对象的功能。
 1)Jdk动态代理只针对于接口操作
 2)CGLIB:可以针对没有接口的java类和有接口的java类

spring的启动加载流程是怎样的?

  https://blog.csdn.net/qq_36323075/article/details/83381632

springMVC的底层执行流程是怎样的?重要的类有哪些?

  答案:ContextLoaderListener  这个类在启动时候会扫描web.xml 然后调用Listenener的contextInitialized初始化方法。
    1、web容器(如tomcat)读取web.xml, 创建ServletContext,它是web的上下文,整个web项目都会用到它。
	2、读取context-param节点,它以 键值对的形式出现。将节点值转化为键值对,传给ServletContext。(默认的文件为/WEB-INF/applicationContext.xml)。
	3、容器创建中的实例,创建监听器。监听器必须继承ServletContextListener 调用ServletContextListener的contextInitialized()方法,spring容器的创建和初始化就是在这个方法中。
	4、在web容器初始化过程中,会创建节点的监听器,并调用它的contextInitialized()方法。这个方法中会完成spring容器的创建,初始化,以及beans的创建。(会调用以下方法)


	(initWebApplicationContext()主要做三件事)
    创建WebApplicationContext,通过createWebApplicationContext()方法
    加载spring配置文件,并创建beans。
    通过configureAndRefreshWebApplicationContext()方法
    将spring容器context挂载到ServletContext
    这个web容器上下文中。通过servletContext.setAttribute()方法。
    createWebApplicationContext 创建spring容器
    获取WebApplicationContext实现类的class对象
    根据class对象创建实例对象
    configureAndRefreshWebApplicationContext加载spring配置文件,创建beans
    configureAndRefreshWebApplicationContext()这个方法会先读取web.xml中声明的contextConfigLocation元素,通过它找到spring配置文件。然后在refresh()方法中读取配置文件,并创建和初始化beans。所以重中之重还是refresh()方法
 	以上内容参考至: https://blog.csdn.net/qq_36323075/article/details/83381632

springboot支持的日志有哪些?默认的是什么?怎么配置

  答案: Java Util Logging,Log4J, Log4J2和Logback  默认日志是LogBack
    	  使用logback-spring.xml 配置进行日志的配置

springboot的数据源有哪些?怎么配置?

 答案:Springboot默认支持4种数据源类型,定义在 org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration 中,分别是:
    	    org.apache.tomcat.jdbc.pool.DataSource
		    com.zaxxer.hikari.HikariDataSource
		    org.apache.commons.dbcp.BasicDataSource
		    org.apache.commons.dbcp2.BasicDataSource

springcloud的常用开发框架有哪些?

 答案: 1.服务发现——Netflix Eureka
    	   2.客服端负载均衡——Netflix Ribbon
    	   3.断路器——Netflix Hystrix
    	   4.服务网关——Netflix Zuul
    	   5.分布式配置——Spring Cloud Config

springcloud的网关的主要做了哪些?

答案: 
统一入口:未全部为服务提供一个唯一的入口,网关起到外部和内部隔离的作用,保障了后台服务的安全性。
鉴权校验:识别每个请求的权限,拒绝不符合要求的请求。
动态路由:动态的将请求路由到不同的后端集群中。
减少客户端与服务端的耦合:服务可以独立发展,通过网关层来做映射。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值