Java重点面试题

1、java跨平台的原理:
java通过不同系统、不同版本、不同位数的java虚拟机(JVM)来屏蔽不同的系统指令集的差异,而对外提供统一的接口(java API),对于开发者而言,只需沿按照接口开发即可。对于不同的系统,只需在系统上安装对应的JVM。

2、java数据类型

类型     比特    字节     范围   
Byte	  8  	 1	 -120~127
short	 16	     2 	  32768
int	     32    	 4 	 2147483648
long	 64	     8	
float	 32	     4	
double	 64	     8	
char	 16	     2	
boolean	  1		

3、面向对象的特征有哪些方面:
有四大基本特征:封装、抽象、继承、多态
封装:即将对象封装成一个高度自治和相对封闭的个体,对象的属性由自己读取和改变。
抽象:抽象就是找出一些事物的相似和共同之处,然后把这些事物归为一个类,把现实生活中的的对象抽象为类。
继承:在定义和实现一个类的时候,可以在一个已经存在的类的基础上进行,把这个已经存在的类所定义的内容作为自己的内容,并可以加入新的内容,或修改原来的方法使之更适合特殊的需求。
多态:一个引用变量到底会指向哪个类的实例对象,必须在在程序运行期间才能决定。
UserDao userDao=new JDBCTemplate();
UserDao userDao=new HibernateTemplate();

4、有了基本类型为什么还要包装类型
基本数据类型不具备面向对象的特性
装箱:把基本数据类型转换成包装类型
拆箱:

5、“==”和equals方法的区别
==:是用来判断俩个变量之间的值师傅相等,变量分为基本类型和引用类型,如果是基本类型直接比较值,引用类型比较引用首地址。
Equals:用来比较两个对象是否一样,判断俩个对象的某些特征是否一样,实际上就是调用对象的equals方法。

6、String和StringBulider的区别,StringBuffer和StringBuilder的区别
String是内容不可变的字符串,String底层使用了一个不可变的字符数组:
Private final char value[];
String str=new String(“zhangsan”)
StringBuilder和StringBuffer是可变的
Char [] value;
在拼接字符串时:
String使用多个对象,另俩个之用一个。
StringBuilder线程不安全,StringBuffer安全。

7、java集合
集合分为value和key-value两种
List有序,可重复,底层为数组
Set无序,不可重复,底层为Map,key为空。根据equals和hashCode判断,若一个对象要存在set中,必须重写equals和hashCode
Key-value:map

8、ArrayList和LInkedList的区别
Array立体底层是数组,LinkedList底层是链表
9hashMap和HashTable的区别,HashMap和CurrentMap的区别
·都是key-value存储
·HashMap可以把null当做key或value,而HashTable不可以
·HashMap线程不安全,HashTable安全
·CurrentMap既是把HashMap分成几个HashTable提高了效率

10、Ajax
异步的的javaScript和XML
通过AJAX与服务器进行数据交换,实现网页布局局部更新
其实是一个XmlhttpRequest对象

11、jQuery
jQuery是一个js框架,封装了js的属性和方法,病增强了js 的功能,让用户使用起来更加便利。
原来使用js需要处理很多兼容性问题,但jQuery封装了底层,就不用处理兼容性问题了

12、jQuery的选择器
ID选择器
Class选择器
通用选择器
Div.mycls选择器:获取有myCls类的div
层次选择器:
儿子选择器:获取获取下面的子元素
后代选择器:获取下面后代
属性选择器:Tag[arrtrName=’test’] 获取属性名为attrName并且值为test的所有标签。

13、框架
特指为解决一个开放性问题问题而设计的具有一定的约束约束性的支撑结构。

14、 struts2的执行流程

·<1>浏览器发送请求,经过一系列的过滤后到达核心过滤器(StrutsPropareAndExecuteFilter)
·<2>strutsPrepareAndExecuteFilter通过ActionMapper判断当前请求是否需要某个Action处理。如果不需要,则走原来的流程,如果需要则把请求交给ActionProxy来处理。
·<3>ActionProxy通过ConfigurationManager询问框架的配置文件(struts.xml),找到需要调用的Action类。
·<4>创建一个ActionInvocation实例,来调用Action的对应方法来获取结果集的name,在调用前后会执行相关拦截
·<5>通过结果接的Name知道相应的结果来对浏览器进行响应。

即:(拦截、判断、寻求、执行、响应)

15 SpringMVC流程

·<1>用户向服务器发送请求,请求被DispatcherServlet捕获。

·<2>DispatcherServlet对请求的url进行解析,得到请求资源标识符,然后根据该url调用
 HandlerMapping获得该handler配置的所有相关对象(handler对象及对象对应的拦
 截器),最后以HandlerExecutionChain对象的形式返回。
 
·<3>DispathcherServlet根据获得的handler,选择一个合适的HandlerAdapter。提取
 Request中的模型数据,填充handler,开始执行Handler(Controller),
 Handler执行完成后,向DispatcherServlet返回一个ModelAndView对象。
 
·<4>DispatcherServlet根据返回的ModelAndView,选择一个合适的ViewResolver

·<5>通过ViewResolver结合Model和View,来渲染视图,DispatcherServlet将结果返回给客户端。

16、struts2和SpringMVC的不同
核心控制器
·struts2:Filter
·SpringMVC:servlet

控制器实例
·struts2:基于对象,每次请求都会实例一个action
·SpringMVC:基于方法

管理方式
·struts2:采用xml和注解方式,但注解功能不全面
·SpringMVC:基于注解,并且基于Spring,管理更方便

参数传递
·struts2:ValueStack
·SpringMVC:SpringMVC:方法

17、事务的传播传播性和隔离性

·PROPAGATION_REQUIRED: 如果存在一个事务就支持当前事务,如果如果没有就开启
·PROPAGATION_SUPPORT: 如果存在一个事务就支持当前事务,如果没有事务就非事务执行
·PROPAGATION_MANDATORY: 如果没有就抛出异常
·PROPAGATION_REQUIRES_NEW: 总是开启一个新的事务,如果已存在就挂起
·PROPAGATION_NOT_SUPPORT: 总是非事务执行,并挂起任何事务
·PROPAGATION_NEVER: 总是非事务执行,如果存在就抛出异常
·PROPAGATION_NESTED: 如果一个活动事务存在,则运行在一个嵌套的事务中,
 如果不存在,则按照TransactionDefinition.PROPAGATION_REQUIRED方式

18 并发和并行的区别
·并行:多个处理器或多核处理器同时处理多个任务。
·并发:多个任务在同一个cpu上,按细分的时间片轮流执行,从逻辑上看 这些任务是同时执行的。

19 什么是反射
·反射实在运行状态中,对于任意一种类,都能知道这个类的所有属性和方 法;对于任意一个对象,都能都能调用他的任意一个方法和属性;这种动 态 获取的信息以及动态调用对象的方法的功能称之为Java语言的反射机制。

20 什么是Java序列化?什么情况下需要序列化?
·Java序列化是为了保护各种对象在内存中的状态,并且可以把保存的对象 状态再读出来。
以下情况需要使用 Java 序列化:
·想把的内存中的对象状态保存到一个文件中或者数据库中时候;
·想用套接字在网络上传送对象的时候;
·想通过RMI(远程方法调用)传输对象的时候。
21 OSI的七层模型都有哪些?

·物理层:
 利用传输介质位数据链路层提供物理连接,实现比特流的透明传输。
·数据链路层:
 负责建立和管理节点间的链路。
·网络层:
 通过路由选择算法,为报文或分组通过通信子网络选择最适当的路径。
·传输层:
 向用户提供可靠的端对端的差错和流量控制,保证报文的正确传输。
·会话层:
 向两个实体的表示层提供建立和使用连接的方法。
·表示层:
 处理用户信息的表示层问题,如编码、数据格式转换和加解密等。
·应用层:
 直接向用户提供服务,完成用户希望在网络上完成的各种工作。

22 get和post请求的区别
·get传参限制大小,post不限制
·get url地址显示参数,post不显示
·get在表单数据在url中,post在请求体中
·get请求会被浏览器主动缓存,post不会
23 说一下 spring mvc 运行流程?

·spring mvc 先将请求发送给 DispatcherServlet。
·DispatcherServlet 查询一个或多个 HandlerMapping,找到处理请求的Controller。
·DispatcherServlet 再把请求提交到对应的 Controller。
·Controller 进行业务逻辑处理后,会返回一个ModelAndView。
·Dispathcher 查询一个或多个 ViewResolver 视图解析器,
 找到 ModelAndView 对象指定的视图对象。
·视图对象负责渲染返回给客户端。

24 springmvc 有哪些核心组件?

·前端控制器 DispatcherServlet
·映射控制器 HandlerMapping
·处理器 Controller
·模型和视图 ModelAndView
·视图解析器 ViewResolver

25 springCloud是什么?
·springCloud是一系列框架的有序集合。它利用springboot的开发便利性巧 妙地简化了分布式系统基础设施的开发,如为服务发现注册、配置中心、消 息总线、负载均衡、断路器、数据监控等,都可以用springboot的开发风格 做到一键启动和部署。

26 spring cloud 断路器的作用是什么?
·在分布式架构中,断路器模式的作用也是类似的,当某个服务单元发生故 障(类似用电器发生短路)之后,通过断路器的故障监控(类似熔断保险丝), 向调用方返回一个错误响应,而不是长时间的等待。这样就不会使得线程因 调用故障服务被长时间占用不释放,避免了故障在分布式系统中的蔓延。

27 springCloud的核心组件有哪些?

·Eureka:服务注册与发现
·Feign:基于动态代理机制,根据注解和选择的机器,拼接请求 url 地址,发起请求。
·Ribbon:实现负载均衡,从一个服务的多台机器中选择一台。
·Hystrix:提供线程池,不同的服务走不同的线程池,实现了不同服务调度的隔离,避免了服务雪崩问题。
·Zuul:网关管理,由网关转发请求给对应的服务。

28 Mybatis有哪些执行器?

·SimpleExecutor: 每次执行update或select就开启一个Statement对象,用完立刻
 关闭Statement。
·ReuseExcutor:执行update或select,以SQL作为key查找Statement对象,存在就
 使用,不存在就创建,用完后不关闭Statement对象,而是放置于Map内提供下一次使用。
 简言之,就是重复使用Statement对象。
·BatchExecutor:执行update(没有select,jdbc批处理不支持select),将所有
 SQL都添加到批处理中(add Batch()),等待统一执行(executeBatch	()),
 它缓存了多个Statement对象,每个Statement对象都是addBatch	()完毕后,等待
 逐一执行execute Batch()批处理,与jdbc批处理相同。

29 、 Mybatis分页插件的原理:
·使用Mybatis提供的插件接口,事项自定义插件,在插件的拦截方法内拦 截待执行的SQL,然后重写SQL,根据dialect,添加对应的物理分页语句 和物理分页参数。
30 、 mysql常用的引擎
·InnoDB:InnoDB 引擎提供了对数据库 acid 事务的支持,并且还提供了行 级锁和外键的约束,它的设计的目标就是处理大数据容量的数据库系统。 MySQL 运行的时候,InnoDB 会在内存中建立缓冲池,用于缓冲数据和索 引。但是该引擎是不支持全文搜索,同时启动也比较的慢,它是不会保存 表的行数的,所以当进行 select count(*) from table 指令的时候,需要进 行扫描全表。由于锁的粒度小,写操作是不会锁定全表的,所以在并发度较 高的场景下使用会提升效率的。

·MyIASM:MySQL 的默认引擎,但不提供事务的支持,也不支持行级锁和 外键。因此当执行插入和更新语句时,即执行写操作的时候需要锁定这个 表,所以会导致效率会降低。不过和 InnoDB 不同的是,MyIASM 引擎是 保存了表的行数,于是当进行 select count(*) from table 语句时,可以直 接的读取已经保存的值而不需要进行扫描全表。所以,如果表的读操作远 远多于写操作时,并且不需要事务的支持的,可以将 MyIASM 作为数据 库引擎的首选。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值