美文网首页Java面试题
Java基础面试题

Java基础面试题

作者: 天道灬酬勤 | 来源:发表于2018-11-20 20:08 被阅读5次

    1,webservice是什么?
    webservice是一种跨编程语言和跨操作系统的远程调用技术,遵循SOPA/WSDL规范。

    2,springCloud是什么?
    springcloud是一个微服务框架,并提供全套分布式系统解决方案。支持配置管理,熔断机制,leader选举,服务治理,分布式session,微代理,控制总线,智能路由,一次性token。

    Java中堆和栈有什么不同?

    每个线程都有自己的栈内存,用于存储本地变量,方法参数和栈调用,一个线程中存储的变量对其它线程是不可见的。而堆是所有线程共享的一片公用内存区域。对象都在堆里创建,为了提升效率线程会从堆中弄一个缓存到自己的栈,如果多个线程使用该变量就可能引发问题,这时volatile 变量就可以发挥作用了,它要求线程从主存中读取变量的值。
    堆:(对象)
    引用类型的变量,其内存分配在堆上或者常量池(字符串常量、基本数据类型常量),需要通过new等方式来创建。
    堆内存主要作用是存放运行时创建(new)的对象。
    (主要用于存放对象,存取速度慢,可以运行时动态分配内存,生存期不需要提前确定)
    栈:(基本数据类型变量、对象的引用变量)
    基本数据类型的变量(int、short、long、byte、float、double、boolean、char等)以及对象的引用变量,其内存分配在栈上,变量出了作用域就会自动释放。

    Spring的Scope有以下几种,通过@Scope注解来实现:

    (1)Singleton:一个Spring容器中只有一个Bean的实例,此为Spring的默认配置,全容器共享一个实例。

    (2)Prototype:每次调用新建一个Bean实例。

    (3)Request:Web项目中,给每一个 http request 新建一个Bean实例。

    (4)Session:Web项目中,给每一个 http session 新建一个Bean实例。

    (5)GlobalSession:这个只在portal应用中有用,给每一个 global http session 新建一个Bean实例。

    Spring事务传播行为

      所谓事务的传播行为是指,如果在开始当前事务之前,一个事务上下文已经存在,此时有若干选项可以指定一个事务性方法的执行行为。在TransactionDefinition定义中包括了如下几个表示传播行为的常量:
    

    TransactionDefinition.PROPAGATION_REQUIRED:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。这是默认值。
    TransactionDefinition.PROPAGATION_REQUIRES_NEW:创建一个新的事务,如果当前存在事务,则把当前事务挂起。
    TransactionDefinition.PROPAGATION_SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。
    TransactionDefinition.PROPAGATION_NOT_SUPPORTED:以非事务方式运行,如果当前存在事务,则把当前事务挂起。
    TransactionDefinition.PROPAGATION_NEVER:以非事务方式运行,如果当前存在事务,则抛出异常。
    TransactionDefinition.PROPAGATION_MANDATORY:如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。
    TransactionDefinition.PROPAGATION_NESTED:如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于TransactionDefinition.PROPAGATION_REQUIRED。

    Spring的声明式事务管理力度是什么级别?
    Struts2是类级别的,Spring是方法级别的
    spring事务可以分为编程式事务和声明式事务

    spring MVC与struts2的区别:

    参考:  http://blog.csdn.net/chenleixing/article/details/44570681
    

    1、Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截
    2、SpringMVC的方法之间基本上独立的,独享request response数据
    3、由于Struts2需要针对每个request进行封装,把request,session等servlet生命周期的变量封装成一个一个
    Map,供给每个Action使用,并保证线程安全,所以在原则上,是比较耗费内存的
    4、拦截器实现机制上,Struts2有以自己的interceptor机制,SpringMVC用的是独立的AOP方式
    5、SpringMVC的入口是servlet,而Struts2是filter
    6、SpringMVC集成了Ajax
    7、SpringMVC验证支持JSR303,处理起来相对更加灵活方便,而Struts2验证比较繁琐,感觉太烦乱
    8、Spring MVC和Spring是无缝的。从这个项目的管理和安全上也比Struts2高
    9、Struts2更加符合OOP的编程思想, SpringMVC就比较谨慎,在servlet上扩展
    10、SpringMVC开发效率和性能高于Struts2
    11、SpringMVC可以认为已经100%零配置

    Spring框架中的核心思想包括什么?

    主要思想是IOC控制反转,DI依赖注入,AOP面向切面

    ArrayList和LinkedList的大致区别如下:

    1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
    2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
    3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

    ArrayList,Vector主要区别为以下几点:

    (1):Vector是线程安全的,源码中有很多的synchronized可以看出,而ArrayList不是。导致Vector效率无法和ArrayList相比;
    (2):ArrayList和Vector都采用线性连续存储空间,当存储空间不足的时候,ArrayList默认增加为原来的50%,Vector默认增加为原来的一倍;

    HashSet与HashMap的区别:

    HashMap:实现了Map接口、存储键值对、HashMap相对于HashSet较快,因为它是使用唯一的键获取对象

    HashSet:实现Set接口、仅存储对象、HashSet较HashMap来说比较慢
    servlet生命周期?

    Servlet 通过调用 init () 方法进行初始化。
    Servlet 调用 service() 方法来处理客户端的请求。
    Servlet 通过调用 destroy() 方法终止(结束)。
    最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的

    ajax怎么解决跨域?
    参考:http://blog.csdn.net/u014727260/article/details/72793459

    1,代理(通过后台操作)
    
    2,JSONP(添加响应头,允许跨域 )
    
              addHeader(‘Access-Control-Allow-Origin:*’);//允许所有来源访问 
    
               addHeader(‘Access-Control-Allow-Method:POST,GET’);//允许访问的方式
    
    3,在ajax的dataType方式改为“jsonp”
    

    Mysql数据类型:
    1.普通索引
    2.唯一索引
    3.主键索引
    4.组合索引

    5.全文索引
    
    参考:https://www.cnblogs.com/luyucheng/p/6289714.html
    

    Eureka和zookeeper的区别?
    1,做分布式下的服务发现还是使用eureka更好,也就是AP特性的分布式协调工具(zookeeper因为网络故障就无法返回可用的主机)

    2,zookeeper技术更加成熟,资料更多

    3,Eureka。是spring cloud之下一个专门负责微服务服务注册和发现的组件,Eureka就是为了服务发现而设计的

    4,Zookeeper。是用来保证分布式一致性的一个软件。不是为了服务发现注册而设计的,只不过它的特性也可以被二次开发成服务发现注册中心罢了

    SpringCloud都有哪些组件?
    Spring Cloud为微服务架构开发涉及的配置管理,服务治理,熔断机制,智能路由,微代理,控制总线,一次性token,全局一致性锁,leader选举,分布式session,集群状态管理等操作提供了一种简单的开发方式。

    组件列:
    

    Spring Cloud Config:配置管理工具,支持使用Git存储配置内容,支持应用配置的外部化存储,支持客户端配置信息刷新、加解密配置内容等
    Spring Cloud Bus:事件、消息总线,用于在集群(例如,配置变化事件)中传播状态变化,可与Spring Cloud Config联合实现热部署。
    Spring Cloud Netflix:针对多种Netflix组件提供的开发工具包,其中包括Eureka、Hystrix、Zuul、Archaius等。
    Netflix Eureka:一个基于rest服务的服务治理组件,包括服务注册中心、服务注册与服务发现机制的实现,实现了云端负载均衡和中间层服务器的故障转移。
    Netflix Hystrix:容错管理工具,实现断路器模式,通过控制服务的节点,从而对延迟和故障提供更强大的容错能力。
    Netflix Ribbon:客户端负载均衡的服务调用组件。
    Netflix Feign:基于Ribbon和Hystrix的声明式服务调用组件。
    Netflix Zuul:微服务网关,提供动态路由,访问过滤等服务。
    Netflix Archaius:配置管理API,包含一系列配置管理API,提供动态类型化属性、线程安全配置操作、轮询框架、回调机制等功能。
    Spring Cloud for Cloud Foundry:通过Oauth2协议绑定服务到CloudFoundry,CloudFoundry是VMware推出的开源PaaS云平台。
    Spring Cloud Sleuth:日志收集工具包,封装了Dapper,Zipkin和HTrace操作。
    Spring Cloud Data Flow:大数据操作工具,通过命令行方式操作数据流。
    Spring Cloud Security:安全工具包,为你的应用程序添加安全控制,主要是指OAuth2。
    Spring Cloud Consul:封装了Consul操作,consul是一个服务发现与配置工具,与Docker容器可以无缝集成。
    Spring Cloud Zookeeper:操作Zookeeper的工具包,用于使用zookeeper方式的服务注册和发现。
    Spring Cloud Stream:数据流操作开发包,封装了与Redis,Rabbit、Kafka等发送接收消息。
    Spring Cloud CLI:基于 Spring Boot CLI,可以让你以命令行方式快速建立云组件
    Hibernate的三种状态是什么?怎么将游离状态转换为持久化状态?
    transient(瞬时状态),persistent(持久化状态)以及detached(离线状态)

    转换:update() saveOrUpdate() lock()

    转载:一念永恒 来源:CSDN

    相关文章

      网友评论

        本文标题:Java基础面试题

        本文链接:https://www.haomeiwen.com/subject/yjxfqqtx.html