JAVA面试题

1、spring的aop的实现方法
经典的基于代理的AOP
@AspectJ注解驱动的切面
纯POJO切面
注入式AspectJ切面


2、分布式消息队列,分布式缓存
rabbitmq消息队列
activemq消息队列
memcache缓存
redis缓存


3、关于rpc方面
远程过程调用 (RPC) 是一种协议,程序可使用这种协议向网络中的另一台计算机上的程序请求服务。


4、关于hashmap源码实现
HashMap 是Hashtable 的轻量级实现(非线程安全的实现),他们都完成了Map 接口,主要
区别在于HashMap 允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。
HashMap 允许将null 作为一个entry 的key 或者value,而Hashtable 不允许。
HashMap 把Hashtable 的contains 方法去掉了,改成containsvalue 和containsKey。因为contains
方法容易让人引起误解。
Hashtable 继承自Dictionary 类,而HashMap 是Java1.2 引进的Map interface 的一个实现。
最大的不同是,Hashtable 的方法是Synchronize 的,而HashMap 不是,在多个线程访问
Hashtable 时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。
Hashtable 和HashMap 采用的hash/rehash 算法都大概一样,所以性能不会有很大的差异


5、关于Java异常的续承层次结构,讲述异常的续承关系


6、关于https握手过程
1.客户端的浏览器向服务器传送客户端 SSL 协议的版本号,加密算法的种类,产生的随机数,以及其他服务器和客户端之间通讯所需要的各种信息。
2.服务器向客户端传送 SSL 协议的版本号,加密算法的种类,随机数以及其他相关信息,同时服务器还将向客户端传送自己的证书。
3.客户利用服务器传过来的信息验证服务器的合法性,服务器的合法性包括:证书是否过期,发行服务器证书的 CA 是否可靠,发行者证书的公钥能否正确解开服务器证书的“发行者的数字签名”,服务器证书上的域名是否和服务器的实际域名相匹配。如果合法性验证没有通过,通讯将断开;如果合法性验证通过,将继续进行第四步。
4.用户端随机产生一个用于后面通讯的“对称密码”,然后用服务器的公钥(服务器的公钥从步骤②中的服务器的证书中获得)对其加密,然后将加密后的“预主密码”传给服务器。
5.如果服务器要求客户的身份认证(在握手过程中为可选),用户可以建立一个随机数然后对其进行数据签名,将这个含有签名的随机数和客户自己的证书以及加密过的“预主密码”一起传给服务器。
6.如果服务器要求客户的身份认证,服务器必须检验客户证书和签名随机数的合法性,具体的合法性验证过程包括:客户的证书使用日期是否有效,为客户提供证书的CA 是否可靠,发行CA 的公钥能否正确解开客户证书的发行 CA 的数字签名,检查客户的证书是否在证书废止列表(CRL)中。检验如果没有通过,通讯立刻中断;如果验证通过,服务器将用自己的私钥解开加密的“预主密码 ”,然后执行一系列步骤来产生主通讯密码(客户端也将通过同样的方法产生相同的主通讯密码)。
7.服务器和客户端用相同的主密码即“通话密码”,一个对称密钥用于 SSL 协议的安全数据通讯的加解密通讯。同时在 SSL 通讯过程中还要完成数据通讯的完整性,防止数据通讯中的任何变化。
8.客户端向服务器端发出信息,指明后面的数据通讯将使用的步骤⑦中的主密码为对称密钥,同时通知服务器客户端的握手过程结束。
9.服务器向客户端发出信息,指明后面的数据通讯将使用的步骤⑦中的主密码为对称密钥,同时通知客户端服务器端的握手过程结束。
10.SSL 的握手部分结束,SSL 安全通道的数据通讯开始,客户和服务器开始使用相同的对称密钥进行数据通讯,同时进行通讯完整性的检验。


7、关于java数据库问题定位和性能调优
1、调整数据结构的设计。这一部分在开发信息系统之前完成,程序员需要考虑是否使用ORACLE数据库的分区功能,对于经常访问的数据库表是否需要建立索引等。 
2、调整应用程序结构设计。这一部分也是在开发信息系统之前完成,程序员在这一步需要考虑应用程序使用什么样的体系结构,是使用传统的Client/Server两层体系结构,还是使用Browser/Web/Database的三层体系结构。不同的应用程序体系结构要求的数据库资源是不同的。 
3、调整数据库SQL语句。应用程序的执行最终将归结为数据库中的SQL语句执行,因此SQL语句的执行效率最终决定了ORACLE数据库的性能。ORACLE公司推荐使用ORACLE语句优化器(Oracle Optimizer)和行锁管理器(row-level manager)来调整优化SQL语句。 
4、调整服务器内存分配。内存分配是在信息系统运行过程中优化配置的,数据库管理员可以根据数据库运行状况调整数据库系统全局区(SGA区)的数据缓冲区、日志缓冲区和共享池的大小;还可以调整程序全局区(PGA区)的大小。需要注意的是,SGA区不是越大越好,SGA区过大会占用操作系统使用的内存而引起虚拟内存的页面交换,这样反而会降低系统。 
5、调整硬盘I/O,这一步是在信息系统开发之前完成的。数据库管理员可以将组成同一个表空间的数据文件放在不同的硬盘上,做到硬盘之间I/O负载均衡。 
6、调整操作系统参数,例如:运行在UNIX操作系统上的ORACLE数据库,可以调整UNIX数据缓冲池的大小,每个进程所能使用的内存大小等参数。   


8、jvm 内存回收机制问题
以下情况将回收
1、对象没有引用
2、作用域发生未捕获异常
3、程序在作用域正常执行完毕
4、程序执行了System.exit()
5、程序发生意外终止(被杀进程等)


9、java中重载和重写有什么区别?分别用什么关键字?
重写:是指在一个类的子类中包含与父类中方法名参数相同的方法。
重载:一个类中多个方法使用同一方法名,但其参数不同。


10、java线程如何启动?
答:通过start()方法.


11、java中加锁的方式有哪些,怎么个写法?
1.是同步关键字synchronized
2.用wait()和notify()方法


12、乐观锁和悲观锁解释一下 
13、ORACLE中的SQL如何进行优化,都有哪些方式? 
14、java中类的加载机制
15、介绍一下自己最近做的一个典型的项目 
16、在项目中遇到了哪些问题,自己是如何解决的 
17、说一下有哪些常用的设计模式 
18、事务有哪些特性,在ORACLE中隔离有哪些级别 
19、使用memcached是一个什么样的原理 
20、如何存放数据到memcached集群中,介绍一下这个过程。跟进的问题,讲一下一致性哈希算法的实现原理。 
21、JVM中堆是如何管理的,JVM的内存回收机制,介绍一下


1、java中重载和重写有什么区别?分别用什么关键字?
2、java线程如何启动?
3、java中加锁的方式有哪些,怎么个写法?
4、乐观锁和悲观锁解释一下
5、ORACLE中的SQL如何进行优化,都有哪些方式?
6、java中类的加载机制说一下
7、介绍一下自己最近做的一个典
菜鸟第一轮技术面试涉及Java基础点:
session
java锁
gc原理
hashmap
listlink arraylist 区别
aop 原理
多线程
kafka 原理和容错
spark hadoop 原理
redis 同步机制 
 PS:一定要让人选准备一下基础理论的东西 或者组网上看一些Java面试常用点
假如服务器反应很慢,你应该怎么排查问题
菜鸟面试点
还有怎么跟踪一个方法的用时,并且最小限度干涉业务程序
 
1、atom类型是怎么实现的
 
2、concurrency的copyOnWriteArray怎么实现的
 
3、object.wait的原理
 
4、tomcat的classloader怎么隔离类
 
5、吞吐量优先和响应时间优先的场景,垃圾收集分别应该使用什么


# JSP内置对象有几种
1、pageContext表示页容器–>EL、标签、上传
2、request服务器端取得客户端的信息:头信息、Cookie、请求参数、MVC设计模式
3、response服务器端回应给客户端信息:Cookie、重定向
4、session表示每一个用户,用于登录验证上
5、application表示整个服务器,getRealPath()
6、config去的初始化参数,初始化参数在web.xml中配置
7、exception表示的是错误页的处理操作
8、page如同this一样,表示整个JSP页面
9、out输出,但是尽量使用表达式输出


# 运行时异常与一般异常有何异同?   
答:异常表示程序运行过程中可能出现的非正常状态,
运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。
java编译器要求方法必须声明抛出可能发生的非运行时异常。


#xml常用的四种解析方式:
1、DOM(Document Object Model)
优点:1.允许应用程序对数据和结构做出更改2.访问是双向的,可以在任何时候在树中上下导航,获取和操作任意部分的数据。
缺点:通常需要加载整个XML文档来构造层次结构,消耗资源大


2、JDOM(Java-based Document Object Model)
优点: 1、使用具体类而不是接口,简化了DOM的API。
2、大量使用了Java集合类,方便了Java开发人员。


缺点: 1、没有较好的灵活性。
2、性能较差。
3、DOM4J(Document Object Model for Java)
优点: 1、大量使用了Java集合类,方便Java开发人员,同时提供一些提高性能的替代方法。
2、支持XPath。
3、有很好的性能。
缺点: 1、大量使用了接口,API较为复杂。
4、SAX(Simple API for XML)
优点: 1、不需要等待所有数据都被处理,分析就能立即开始。
2、只在读取数据时检查数据,不需要保存在内存中。
3、可以在某个条件得到满足时停止解析,不必解析整个文档。
4、效率和性能较高,能解析大于系统内存的文档。
缺点: 1、需要应用程序自己负责TAG的处理逻辑(例如维护父/子关系等),使用麻烦。
2、单向导航,很难同时访问同一文档的不同部分数据,不支持XPath。


# MVC设计原理
M:model(包括业务model和实体model),V view,C controller
在没有MVC时,大多数的程序员会将数据层,业务层,控制层的代码很容易的过程化的写在一起,经验比较丰富的开发者会将数据从表示层分离开来,
但这通常不是很容易做到的,它需要精心的计划和不断的尝试。MVC从根本上强制性的将它们分开。尽管构造MVC应用程序需要一些额外的工作,
但是它给我们带来的好处是无庸质疑的


# A类是抽象类并有方法method,B为接口有并也有定义method,还有个C类继续了A类和实现了B类,那么C类中需要实现method方法吗?
解答:如果继承了接口的类在父亲类中有实现method方法,那么子类中不需要再实现接口中的method。


# JAVA类的加载概念
解答:顾名思义,类加载器(class loader)用来加载 Java 类到 Java 虚拟机中。一般来说,Java 虚拟机使用 Java 类的方式如下:
Java 源程序(.java 文件)在经过 Java 编译器编译之后就被转换成 Java 字节代码(.class 文件)。类加载器负责读取 Java 字节代码,
并转换成java.lang.Class类的一个实例。每个这样的实例用来表示一个 Java 类。通过此实例的 newInstance()方法就可以创建出该类的一个对象。
实际的情况可能更加复杂,比如 Java 字节代码可能是通过工具动态生成的,也可能是通过网络下载的。
基本上所有的类加载器都是 java.lang.ClassLoader类的一个实例。下面详细介绍这个 Java 类


# 一共有多少种遍历MAP的方法
1、在for-each循环中使用entrySet来遍历
2、在for-each循环中遍历keySet或values
3、使用Iterator遍历

# 什么是SOA服务

解答:SOA代表了面向服务的架构。 SOA是一种使用松耦合的黑盒子服务构建业务应用的体系架构,这些服务可以通过编排连接在一起以实现特定的功能。


# SOA服务主要特点是什么
解答: A) SOA组件是松耦合的。当我们说松耦合,这意味着每一个服务是自包含单独存在的逻辑。举例来说,我们采取了“支付网关”的服务,并将它附加到不同的系统。
B) SOA服务是黑匣子。在SOA中,服务隐藏有内在的复杂性。他们只使用交互消息,服务接受和发送消息。通过虚拟化一个服务为黑盒子,服务变得更松散的耦合。
C) SOA服务应该是自定义: SOA服务应该能够自己定义。
D) SOA服务维持在一个列表中: SOA服务保持在一个中央存储库。应用程序可以在中央存储库中搜索服务,并调用相应服务。
E) SOA服务可以编排和链接实现一个特定功能: SOA服务可以使用了即插即用的方式。例如,“业务流程”中有两个服务“安全服务”和“订单处理服务” 。从它的业务流程可以实现两种类型:一,您可以先检查用户,然后处理订单,或反之亦然。是的,你猜对了,使用SOA可以松散耦合的方式管理服务之间的工作流。


# 什么是合同,地址,绑定
解答:这是三个SOA的标准术语。每个服务都必须公开一个或多个端点,以便让该服务提供给客户端调用。
1、合同是两方或多方之间的协议。它定义了一种客户端如何与服务通信的协议。从技术上讲,它有描述参数和返回值的方法。
2、地址表明在哪儿能找到这种服务。地址是一个URL,它指向服务的位置。
3、绑定是决定这个端点如何可以访问。它决定了如何完成通信。例如,你暴露你的服务,可以使用SOAP over HTTP或通过TCP的BINARY进行访问。因此,对于这些通信介质将被创建两个绑定。


# 什么是WEB服务的SOA
解答:SOA是一种思想,它是一个架构理念,Web服务是完成它的技术方法。 Web服务是实现SOA首选的标准。在SOA中,我们需要的服务是松耦合的。 Web服务进行通信使用的SOAP协议是基于XML的,这是非常松散的耦合。它回答了什么是服务的一部分。 SOA服务应该能够来形容自己。 WSDL描述了我们如何可以访问该服务。 SOA服务都位于一个目录: UDDI的描述,从那里我们可以得到Web服务。这其实是SOA注册表的实现。


# 什么是可重用的服务?
解答:服务是一个自主的,可重复使用的,可发现的,无状态的,有一定粒度的功能,并且是一个复合应用程序或一个组合服务的一部分。
可重复使用的服务通过业务活动标识,这个业务活动是使用服务规范(设计时合同)描述的。
一个服务约束是,包括安全性,QoS,SLA,使用策略,可以由多个运行时的合同 多个接口(WSDL中的Web服务)以及多个实现(代码)定义的。
可重复使用的服务应在被管制在其从设计到运行整个企业级生命周期。其重用应通过规范流程来推动,重用应该是可测量的。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值