java面试题——java高级(二)

四、Java高级部分

1.红黑树的实现原理和应用场景;

1.(1)每个节点或者是黑色,或者是红色。
(2)根节点是黑色。
(3)每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!]
(4)如果一个节点是红色的,则它的子节点必须是黑色的。
(5)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。

注意:
(01) 特性(3)中的叶子节点,是只为空(NIL或null)的节点。
(02) 特性(5),确保没有一条路径会比其他路径长出俩倍。因而,红黑树是相对是接近平衡的二叉树。
2.红黑树的应用比较广泛,主要是用它来存储有序的数据,它的时间复杂度是O(lgn),效率非常之高。
例如,Java集合中的TreeSet和TreeMap,C++ STL中的set、map,以及Linux虚拟内存的管理,都是通过红黑树去实现的。参考链接:https://www.cnblogs.com/skywang12345/p/3245399.html        https://www.cs.usfca.edu/~galles/visualization/RedBlack.html

2.NIO是什么?适用于何种场景?

1.NIO是为了弥补IO操作的不足而诞生的网络通信模型,NIO的一些新特性有:非阻塞I/O,选择器,缓冲以及管道。管道(Channel),缓冲(Buffer) ,选择器( Selector)是其主要特征。
2.服务器需要支持超大量的长时间连接。比如10000个连接以上,并且每个客户端并不会频繁地发送太多数据。例如总公司的一个中心服务器需要收集全国便利店各个收银机的交易信息,只需要少量线程按需处理维护的大量长期连接。
Jetty、Mina、Netty、ZooKeeper等都是基于NIO方式实现。

参考链接:https://www.jianshu.com/p/59f610d8f97d

3.Java9比Java8改进了什么;

1. Java 平台级模块系统。模块化的 JAR 文件都包含一个额外的模块描述器。在这个模块描述器中, 对其它模块的依赖是通过 “requires” 来表示的。另外, “exports” 语句控制着哪些包是可以被其它模块访问到的。所有不被导出的包默认都封装在模块的里面。
2.Linking, jlink 工具实现创建针对应用程序进行优化的最小运行时映像而不需要使用完全加载 JDK 安装版本。
3.Javadoc 现在支持在 API 文档中的进行搜索。另外,Javadoc 的输出现在符合兼容 HTML5 标准。
4.集合工厂方法添加了Set<Integer> ints = Set.of(1, 2, 3);
List<String> strings = List.of("first", "second");些方法也可以避免您选择特定的集合实现
5.从控制台启动 jshell ,并直接启动输入和执行 Java 代码。 jshell 的即时反馈使它成为探索 API 和尝试语言特性的好工具。
6.Stream 接口中添加了 4 个新的方法:dropWhile, takeWhile, ofNullable。还有个 iterate 方法的新重载方法,可以让你提供一个 Predicate (判断条件)来指定什么时候结束迭代:
7.接口的默认方法
8.新的方式来处理 HTTP 调用。这个迟到的特性用于代替老旧的 `HttpURLConnection` API,并提供对 WebSocket 和 HTTP/2 的支持。
9.多版本兼容 JAR 功能能让你创建仅在特定版本的 Java 环境中运行库程序时选择使用的 class 版本参考链接:http://www.importnew.com/24528.html

4.HashMap内部的数据结构是什么?底层是怎么实现的?(还可能会延伸考察ConcurrentHashMap与HashMap、HashTable等,考察对技术细节的深入了解程度);

HashMap的底层实现都是数组+链表结构实现,添加、删除、获取元素时都是先计算hash,根据hash和table.length计算index也就是table数组的下标,然后进行相应操作.参考链接:https://blog.csdn.net/u011202334/article/details/51496381

5.说说反射的用途及实现,反射是不是很慢,我们在项目中是否要避免使用反射;

反射机制是Java语言中一个非常重要的特性,它允许程序在运行时进行自我检查,同时也允许对其内部成员进行操作。反射机制提供的功能主要有:得到一个对象所属的类;获取一个类的所有成员变量和方法;在运行时创建对象;在运行时调用对象的方法,很多框架(比如 Spring)都是配置化的(比如通过 XML文件配置JavaBean,Action之类的),为了保证框架的通用性,他们可能根据配置文件加载不同的对象或类,调用不同的方法,这个时候就必须用到反射——运行时动态加载需要加载的对象。

参考链接:https://blog.csdn.net/SongYuxinIT/article/details/81872066

6.说说自定义注解的场景及实现;

使用场景:①类属性自动赋值。②验证对象属性完整性。③代替配置文件功能,像spring基于注解的配置。④可以生成文档,像java代码注释中的@see,@param等

参考链接:https://blog.csdn.net/bluuusea/article/details/79996572

7.List 和 Map 区别,Arraylist 与 LinkedList 区别,ArrayList 与 Vector 区别;

1.List是有顺序的 可重复的,Map是通过键值对进行取值的    key和value是一一对应的
2.①ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 (LinkedList是双向链表,有next也有previous)
  ②对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
  ③对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
3.①Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的方法不是,由于线程的同步必然要影响性能,因此,ArrayList的性能比Vector好。
 ②当Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,而ArrayList只增加50%的大小,这样,ArrayList就有利于节约内存空间。

五、Spring相关

8.Spring AOP的实现原理和场景?

Spring bean的作用域和生命周期;

Spring Boot比Spring做了哪些改进? Spring 5比Spring4做了哪些改进;

如何自定义一个Spring Boot Starter?

Spring IOC是什么?优点是什么?

SpringMVC、动态代理、反射、AOP原理、事务隔离级别;

原文地址:https://www.cnblogs.com/LiLiliang/p/9901496.html

时间: 2024-10-15 11:23:06

java面试题——java高级(二)的相关文章

JAVA面试题和答案(二)

本文我们将要讨论Java面试中的各种不同类型的面试题,它们可以让雇主测试应聘者的Java和通用的面向对象编程的能力.下面的章节分为上下两篇,第一篇将要讨论面向对象编程和它的特点,关于Java和它的功能的常见问题,Java的集合类,垃圾收集器,第二篇主要讨论异常处理,Java小应用程序,Swing,JDBC,远程方法调用(RMI),Servlet和JSP. 开始! 目录 面向对象编程(OOP) 常见的Java问题 Java线程 Java集合类 垃圾收集器 面向对象编程(OOP) Java是一个支持

Java面试题集(二)

51.设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1,写出程序.  以下程序使用内部类实现线程,对j增减的时候没有考虑顺序问题. public class ThreadTest1 { private int j; public static void main(String args[]){ ThreadTest1 tt=new ThreadTest1(); Inc inc=tt.new Inc(); Dec dec=tt.new Dec(); for(int i=0;i<

经典Java面试题收集(二)

经典的Java面试题(第二部分),这部分主要是与Java Web和Web Service相关的面试题. 96.阐述Servlet和CGI的区别? 答:Servlet与CGI的区别在于Servlet处于服务器进程中,它通过多线程方式运行其service()方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于Servlet. 补充:Sun Microsystems公司在1996年发布Servlet技术就是为了和CGI (Comm

java面试题-java基础

1.1java与其他语言相比,有什么优点和缺点? 首先,java与c.c++相比,java是一种完全的面对对象的语言,虽然他的底层(运行时库)使用c语言开发的,可是并不依赖于c,因为java的运行是在运行时库的支持下进行的,所以所以运行效率可以更接近底层的c.c++来说效率会有所影响,不过java的类库采用很好的设计理念,非常好用,页非常实用,已经成为业界的一种标准的开发语言,他的跨平台的特性收到开发者的青睐,只需要开发一次就能在所有安装了java运行时库的环境中运行. 其次,java和c#相比

Java笔试题解析(二)——2015届唯品会校招

曾经总是看别人写的笔经面经.今天自己最终能够写自己亲身经历的一篇了 T-T. 前阵子去了唯品会的秋招宣讲会,华工场(如今才知道原来找家互联网公司工作的人好多).副总裁介绍了VIP的商业模式是逛街式的购物,与京东和淘宝不同. 宣讲会之后还没有笔试.网上找了一些曾经的题目,当练练手. 2014校招的. 1.下列不可作为java语言修饰符的是(D) A. a1 B. $1 C. _1 D. 11 这题目有问题,修饰符是public这些,不能作为变量名才对. 2.整形数据类型中.须要内存空间最少的是(D

Java笔试题解析(二)——2015年唯品会校招

以前总是看别人写的笔经面经,今天自己终于可以写自己亲身经历的一篇了 T-T. 前阵子去了唯品会的秋招宣讲会,华工场(现在才知道原来找家互联网公司工作的人好多),副总裁介绍了VIP的商业模式是逛街式的购物,与京东和淘宝不同.宣讲会之后还没有笔试.网上找了一些以前的题目,当练练手. 2014校招的. 1.下列不可作为java语言修饰符的是(D) A. a1 B. $1 C. _1 D. 11 这题目有问题,修饰符是public这些,不能作为变量名才对. 2.整形数据类型中,需要内存空间最少的是(D)

Java面试题总结(二)

面试题好基友---重写.重载 或许是因为面向对象思想对于编程语言很重要的缘故吧,重写.重载总是能在面试题中占有一席之地.有些面试甚至会故意将重写.重载写成英文来考查,比如请简要描述Overload和Override的区别. 下面从面试的角度回答这个问题. 重载:描述的是在同一个类中,两个方法的方法名名完全相同,参数列表不同,方法修饰词.返回值类型可以相同也可以不相同,遵循编译期绑定(静态绑定)的语法现象. 重写:描述的是在两个具有继承关系的两个或多个类中各自的非静态方法之间的关系,两个方法的方法

Java面试题详解二:java中的关键字

一,final1.被final修饰的类不可以被继承2.被final修饰的方法不可以被重写3.被final修饰的变量不可以被改变  重点就是第三句.被final修饰的变量不可以被改变,什么不可以被改变呢,是变量的引用?还是变量里面的内容?还是两者都不可以被改变? public class User { private String name; public User(String name) { this.name = name; } public String getName() {return

Java面试题大全(二)

41.是否可以继承String类? String类是final类故不可以继承. 42.swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上? switch(expr1)中,expr1是一个整数表达式.因此传递给 switch 和 case 语句的参数应该是 int. short. char 或者 byte.long,string 都不能作用于swtich. 43.try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会