1, java是一种什么语言, jdk, jre, jvm三者的区别
Java是一种计算机编程语言,拥有跨平台、面向对象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
JVM(Java虚拟机)是一种抽象机器。它之所以被称为虚拟机,是因为它在物理上不存在。它提供了一个运行时环境,可以在其中执行Java字节码。它还可以运行用其他语言编写并编译成Java字节码的程序。
JVM可用于许多硬件和软件平台。JVM、JRE和JDK依赖于平台,因为每个OS彼此是不同的。然而,Java与平台无关。JVM有三个概念:规格, 实施,和实例.
JVM执行以下主要任务:
加载码
验证代码
执行代码
提供运行时环境
2,java 1.5之后的三大版本
Java SE(J2SE,Java 2 Platform Standard Edition,标准版)
Java SE 以前称为 J2SE。它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的 Java 应用程序。Java SE 包含了支持 Java Web 服务开发的类,并为Java EE和Java ME提供基础。
Java EE(J2EE,Java 2 Platform Enterprise Edition,企业版)
Java EE 以前称为 J2EE。企业版本帮助开发和部署可移植、健壮、可伸缩且安全的服务器端Java 应用程序。Java EE 是在 Java SE 的基础上构建的,它提供 Web 服务、组件模型、管理和通信 API,可以用来实现企业级的面向服务体系结构(service-oriented architecture,SOA)和 Web2.0应用程序。2018年2月,Eclipse 宣布正式将 JavaEE 更名为 JakartaEE
Java ME(J2ME,Java 2 Platform Micro Edition,微型版)
Java ME 以前称为 J2ME。Java ME 为在移动设备和嵌入式设备(比如手机、PDA、电视机顶盒和打印机)上运行的应用程序提供一个健壮且灵活的环境。Java ME 包括灵活的用户界面、健壮的安全模型、许多内置的网络协议以及对可以动态下载的连网和离线应用程序的丰富支持。基于 Java ME 规范的应用程序只需编写一次,就可以用于许多设备,而且可以利用每个设备的本机功能。
3, java跨平台及其原理
所谓的跨平台就是JAVA写的一份代码可以在任意的操作系统平台上运行。JAVA是如何做到这一点的呢?
JAVA源代码->JAVA字节码->JVM解释执行
我们写的JAVA源代码会被编译为字节码,然后被JVM虚拟机解释执行,我们可以看到JVM虚拟机在跨平台的过程中发挥了重要的作用,就是由它解释字节码并执行的,对应于每一个平台都有一个JVM虚拟机,而字节码只有一份,windows的JVM虚拟机可以将字节码解释为能在windows平台上执行的指令并执行,Linux的JVM虚拟机可以将字节码解释为能在Linux平台上执行的指令并执行,他们执行的字节码都是同一份。这样就实现了跨平台。
4,java语言的特点
Java语言具有的特点有:简单性、跨平台性、面向对象、安全性、多线程性、分布性、可移植性、解释型、高性能和动态性。
(1)简单性
Java语言类似C++,因此熟悉C++的程序员很容易掌握java,另外它摒弃了C++中易发生错误的地方,尤其是Java语言不使用指针,并提供了自动的废料收集,使得程序员不必为内存管理而担忧。
(2)跨平台性
所谓的跨平台性就是指软件可以不受计算机硬件和操作系统的约束而在任意计算机环境下正常运行。而在Java中它自带的虚拟机可以很好的实现跨平台性,它提供了一个字节码到底层硬件平台及操作系统的屏障,使得Java语言具备跨平台性。
(3)面向对象
Java是一种面向对象语言,它可以使得程序的开发更加简单易用。比如具有代码扩展,代码复用等功能。
(4)安全
Java的安全性可从两个方面得到保证。一方面,在Java语言里,指针和释放内存等C++功能被删除,避免了非法内存操作。另一方面,当Java用来创建浏览器时,语言功能和浏览器本身提供的功能结合起来,使它更安全。Java语言在机器上执行前,要经过很多次的测试。它经过代码校验,检查代码段的格式,检测指针操作,对象操作是否过分以及试图改变一个对象的类型。
(5)多线程
多线程是指允许一个应用程序同时存在两个或两个以上的线程,用于支持事务并发和多任务处理。 Java除了内置的多线程技术之外,还定义了一些类、方法等来建立和管理用户定义的多线程。
(6)分布性
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口,它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
(7)可移植的
Java系统本身具有很强的可移植性,Java编译器是用Java实现的,Java的运行环境是用ANSI C实现的,另外Java还严格规定了各个基本数据类型的长度
(8)解释的
Java解释器能直接运行目标代码指令,链接程序通常比编译程序所需资源少,所以程序员可以在创建源程序上花上更多的时间。
(9)高性能
如果解释器速度不慢,Java可以在运行时直接将目标代码翻译成机器指令,翻译目标代码的速度与C/C++的性能没什么区别。
(10)动态性
Java语言的设计目标之一是适应于动态变化的环境,Java程序需要的类能够动态地被载入到运行环境,也可以通过网络来载入所需要的类。这也有利于软件的升级。
5什么是字节码,字节码的好处
字节码:Java源代码经过虚拟机编译器编译后产生的文件(即扩展为.class的文件),它不面向任何特定的处理器,只面向虚拟机。
字节码即扩展名.class文件,它是由java编译器编译Java源程序生成JVM能够理解的代码,这种代码就是字节码,它不面向任何平台只面向JVM。
采用字节码的好处:Java语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以Java程序运行时比较高效,而且,由于字节码并不专对一种特定的机器,因此,Java程序无须重新编译便可在多种不同的计算机上运行。
6java和c+的区别
7,java的三大特性
8, java中的基本数据类型和引用数据类型及其区别
9, switch(expr), expr支持哪些数据类型
10, int和Integer有什么区别怎么理解自动拆箱, 自动装箱
11 计算2^3效率最高的方法是
12,Math round(temb)
13, float f=34是否正确
14, short s1 = 1,s1 =s1 +1有错吗?short s1 = 1; s1 +=1,有错吗
15, java中的注释
16,java中的访问修饰符
17,重写与重载的区别
18,运算符&和&的区别
19, Java有没有goto
20, this关键字的用法
21, super关键字的用法
22, java的final关键字
23, break, continue return的区别及作用
24,在Java中,如何跳出当前的多重嵌套循环
25, hashCode与equals
26,抽象类和接口的区别是什么
27 什么是接口
28静态变量与非静态变量的区别
29值传递和引用传递的区别是什么
30什么是反射
31, String类中常用的方法
32, String中的==和equals的区别
33, Java中的String, StringBuilder, StringBuffer三者的区别
34Java中final, finally和nalize的区别
35, Java里可不可以有多继承
36, HashMap和Hashtable的区别
37,Map集合有哪些实现类,分别具有什么特征
38解决hashmap线程不安全问题
39, Hashmap的底层实现原理
40, hash碰撞怎么产生,怎么解决
41, HashMap为什么需要扩容
42,如何遍历Mao集合
43, Arraylist与LinkedList区别
45、如何使用的List集合来保证线程安全
46,10和NIO的区别
47、在Java中要想实现多线程代码有三种手段
48. Thread类中的starto)和run0方法有什么区别
49, Java 中 notify和notityAll有什么区别
50,Java多线程中调用wait)和sleep0方法有什么不同
51、什么是线程安全
52, Java中的volatile变量是什么
53,线程的状态
54、实现线程同步有三种方式
55,Java中的锁有几种方式
56, Lock的几个实现类
57、线程间通信的几种实现方式
58, synchronized和Lock的区别和应用场景
59、为什么要用线程池
60、如何创建线程池
61,java中的异常体系
62, throw和throws的区别
63 说出5个常见的异常
Java 1O和NIO的面试题
66在我Java程序中,我有三个socket,我需要多少个线程来处理?
67, Java中怎么创建ByteBuffer?
68, Java中,怎么读写ByteBuffer ?
69, Java采用的是大端还是小端?
70, ByteBuffer中的字节序是什么?
71, Java中,直接缓冲区与非直接缓冲器有什么区别?
72, Java中的内存映射缓存区是什么?
73, sodket选项TCP NO DELAY是指什么?
74. TCP协议与UDP协议有什么区别?
75, Java中, ByteBuffer与StringBuffer有什么区别? (答案)Java最佳实践的面试问题
76, Java中,编写多线程程序的时候你会遵循哪些最佳实践?
77、说出几点Java中使用Collections的最佳实践
78,说出至少5点在Java中使用线程的最佳实践。
79,说出5条10的最佳实践(答案)
80,列出5个应该遵循的JDBC最佳实践
81、说出几条Java中方法重载的最佳实践?Date, Time及Calendar的面试题
82、在多线程环境下, SimpleDateFormat是线程安全的吗?
83, Java中如何格式化一个日期?如格式化为ddMMyyyy的形式?
84, Java中,怎么在格式化的日期中显示时区?
85, Java中java.uti.Date与java.sql.Date有什么区别?
86, Java中,如何计算两个日期之间的差距?
87, Java中,如何将字符串YYYYMMDD转换为日期?
单元测试JUnt面试题
89,如何测试静态方法? (答案)
90,怎么利用JUnit来测试一个方法的异常?
91、你使用过哪个单元测试库来测试你的Java程序?
92, @Before和@BeforeClass有什么区别?编程和代码相关的面试题
93,怎么检查一个字符串只包含数字?解决方案
94, Java中如何利用泛型写一个LRU缓存?
95、写一段Java程序将byte转换为long?
95,在不使用StringBuffer的前提下,怎么反转一个字符串?
97, Java中,怎么获取一个文件中单词出现的最高频率?
98、如何检查出两个给定的字符串是反序的?
99, Java 中,怎么打印出一个字符串的所有排列?
100, Java 中,怎样才能打印出数组中的重复元素?
101, Java中如何将字符串转换为整数?
102、在没有使用临时变量的情况如何交换两个整数变量的值?
关于OOP和设计模式的面试题
103、接口是什么?为什么要使用接口而不是直接使用具体类?
104, Java中,抽象类与接口之间有什么不同?
105,除了单例模式,你在生产环境中还用过什么设计模式?
106,你能解释一下里氏替换原则吗?
107)什么情况下会违反迪米特法则?为什么会有这个问题?
108,适配器模式是什么?什么时候使用?
109、什么是“依赖注入"和"控制反转"?为什么有人使用?
110、抽象类是什么?它与接口有什么区别?你为什么要使用过抽象类?
111、构造器注入和setter依赖注入,那种方式更好?
112、依赖注入和工程模式之间有什么不同?
113、适配器模式和装饰器模式有什么区别?
114、适配器模式和代理模式之前有什么不同?
115、什么是模板方法模式?
116,什么时候使用访问者模式?
117、什么时候使用组合模式?
118、继承和组合之间有什么不同?
119,描述Java中的重t和重写?
120, Java中,嵌套公共静态类与顶级类有什么不同?
121, OOP中的组合、聚合和关联有什么区别?
122、给我一个符合开闭原则的设计模式的例子?
123、抽象工厂模式和原型模式之间的区别?
Java面试中其他各式各样的问题
125,嵌套静态类与顶级类有什么区别?
126,你能写出一个正则表达式来判断一个字符串是否是一个数字吗?
127, Java中,受检查异常和不受检查异常的区别?
128, Java 中, throw和throws有什么区别
129, Java 中, Seriakzable与Externalzable的区别?
130, Java中, DOM和SAX解析器有什么不同?
131,说出JDK 1.7中的三个新特性?
132,说出5个JDK 1.8引入的新特性?
133, Java中, Maven和ANT有什么区别?