Java Runtime Environment java运行环境
Unicode 统一的字符编码标准
1、简述JDK跟JRE的区别:
JDK是java开发人员在开发过程中使用的软件开发包,它提供了java的开发环境和运行环境。
JRE是Java Runtime Environment是指java的运行环境。
如果你只想跑java程序,只要安装jre就够了,如果要从事开发就得安装jdk。
1.JDK:java development kit:java开发工具包,是开发人员所需要安装的环境
2.JRE:java runtime environment:java运行环境,java程序运行所需要安装的环境
2、简述path跟classpath的区别:
Path是系统变量,跟java无关,里面存放的是各种可执行的应用程序的路径。
ClassPath是给java使用的,从字面上来理解,就是类的路径,主要是模仿path,将类文件的路径配置到classpth中实现在系统的任何位置可以对内文件进行编译和执行。
3、Java的关键词中有没有goto?
Goto是java中的保留字不是关键字的一员。
4、“static”关键字是什么意思?java中是否可以覆盖(override)一个private或者是static的方法?
"static"关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。
java中static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定的。static方法跟类的任何实例都不相关,所以概念上不适用。
5、java中方法的覆盖(Overriding)和方法重载(Overloading)是什么意思?
java中的方法重载发生在同一个类里面两个或者多个方法的方法名相同但是参数不同的情况。
与此相对,方法覆盖是说子类重新定义了父类的方法。方法覆盖必须有相同的方法名,参数列表和返回类型。覆盖者可能不会限制它所覆盖的方法的访问。
6、Overload和Override的区别?
方法的重写Overriding和重载Overloading是java多态性的不同表现。
重写Overriding是父类与子类之间的多态性的一种表现;
重载Overloading是一个类中多态性的一种表现。
如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。
如果在一个类中定义了多个同名的方法,他们或有不同的参数个数或者不同的参数类型,则称为方法的重载(Overloading)。
7、接口和抽象类的区别是什么?
java提供和支持创建抽象类和接口。他们的实现有共同点,不同点在于:
接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法。
类可以实现很多接口,但是只能继承一个抽象类。
类可以不实现抽象类和接口声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。
抽象类可以在不提供接口方法实现的情况下实现接口。
java接口中声明的变量默认都是final的。抽象类可以包含非final的变量。
java接口中的成员函数默认是public的。抽象类的成员函数可以是private,protected或者是public。
接口是绝对抽象的,不可以被实例化。抽象类也不可以被实例化,但是,如果它包含main方法的话可是可以被调用的。
8、接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承实体类(concrete class)?
接口可以继承接口。
抽象类可以实现(implements)接口。
抽象类可是否可继承实体类,但前提是实体类必须有明确的构造函数。
9、java的基本数据类型跟引用类型分别有哪些?
java的基础类型有8个分别是:整数型 byte、short、int、long;
浮点型 float、double;
字符型 char;
布尔型 boolean。
3种引用类型:类class、接口interface、数组array。
10、char型变量中能不能存贮一个中文汉字?为什么?
char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,char型变量中当然可以存储汉字。
11、简述&与&&的区别:
&和&&都可以用作逻辑与的运算符,表示逻辑与(and)。
当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。
&&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式。
&还可以用作运算符。
12、java中垃圾回收有什么目的?什么时候进行垃圾回收?垃圾回收器可以马上回收内存吗?
垃圾回收的目的是识别并且丢弃应用不再使用的对象来释放和重用资源。
垃圾回收器的运行时间是不确定的,由JVM决定,在运行时是间歇执行的。
可以。程序员可以手动执行System.gc(),通知GC运行,但是Java语言规范并不保证GC一定会执行。
强制执行垃圾回收:System.gc()。Runtime.getRuntime().gc()。
13、如果对象的应用被置为null,垃圾收集器是否会立即释放对象占用的内存?
不会,在下一个垃圾回收周期中,这个对象将是可被收回的。
14、Java中访问数据库的步骤?Statement和PreparedStatement 之间的区别?
Java中访问数据库的步骤如下:
(1)注册驱动;
(2)建立连接;
(3)创建Statement;
(4)执行sql语句;
(5)处理结果集(若sql语句为查询语句);
(6)关闭连接。
PreparedStatement 被创建时即指定了sql语句,通常用于执行多次结构相同的SQL语句。
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(“select * from user”);
15、编码转换:怎样将GB2312编码的字符串转换为ISO-8859-1编码的字符串?
示例代码如下:
String s1=”你好”;
String s2=new String(s1.getBytes(“GB2312”),”ISO-8859-1”);
16、 List,Set,Map是否继承自Collection接口?【基础】
List,Set是;Map不是。
17、int和Integer有什么区别?
Java提供两种不同的类型:引用类型和原始类型(或内置类型);
Int是Java的原始数据类型,Integer是Java为int提供的封装类。
引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,对象引用实例变量的缺省值为null,而原始类型实例变量的缺省值与他们的类型相关。
18、垃圾回收的优点和原理。并考虑2种回收机制。
垃圾回收机制,使Java中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄漏,有效的使用可以使用的内存。
ps:内存泄露是指该内存空间使用完毕之后未回收,在不涉及复杂数据结构的一般情况下,Java 的内存泄露表现为一个内存对象的生命周期超出了程序需要它的时间长度,我们有时也将其称为“对象游离”。
垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。
分代复制垃圾回收:不同的对象的生命周期是不一样的。因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率。[年轻代、年老代、持久代]
标记垃圾回收:
增量垃圾回收:
19、数据库连接的步骤?
1.加载驱动
2.提供JDBC连接的URL
3.创建数据库连接
4.创建一个Statement对象
5.执行sql语句
6.返回ResultSet结果集
7.关闭JDBC对象
20、Java的数据结构有那些?
1.线性表(ArrayList)
2.链表(LinkedList)
3.栈(Stack)
4.队列(Queue)
5.图(Map)
6.树(Tree)
21、什么是数据结构?
计算机保存,组织数据的方式
22、类与对象的关系?
类是对象的抽象,对象是类的具体,类是对象的模板,对象是类的实例
23、程序的结构有那些?
1.顺序结构
2.选择结构
3.循环结构
24、数组实例化有几种方式?
1.静态实例化:创建数组的时候已经指定数组中的元素
2.动态实例化:实例化数组的时候,只指定了数组程度,数组中所有元素都是数组类型的默认值
25、Static关键字有什么作用?
1.Static可以修饰内部类、方法、变量、代码块
2.Static修饰的类是静态内部类
3.Static修饰的方法是静态方法,表示该方法属于当前类的,而不属于某个对象的,静态方法也不能被重写,可以直接使用类名来调用。在static方法中不能使用this或者super关键字。
4.Static修饰变量是静态变量或者叫类变量,静态变量被所有实例所共享,不会依赖于对象。静态变量在内存中只有一份拷贝,在JVM加载类的时候,只为静态分配一次内存。
5.Static修饰的代码块叫静态代码块,通常用来做程序优化的。静态代码块中的代码在整个类加载的时候只会执行一次。静态代码块可以有多个,如果有多个,按照先后顺序依次执行。
26、Final在java中的作用?
1.Final可以修饰类,修饰方法,修饰变量。
2.修饰的类叫最终类。该类不能被继承。
3.修饰的方法不能被重写。
4.修饰的变量叫常量,常量必须初始化,一旦初始化后,常量的值不能发生改变。
27、&和&&的区别
&是位运算符。&&是布尔逻辑运算符,在进行逻辑判断时用&处理的前面为false后面的内容仍需处理,用&&处理的前面为false不再处理后面的内容。
28、jdk1.7和jdk1.8的区别?
1.二进制变量的表示以0b开头
2.Switch语句支持String类型
3.多了try-with-resource语句
4.数字类型的下划线更加友好
5.创建泛型实例时,会根据变量声明时的泛型类型自动推断出实例的泛型类型
6.try块可以不用finally手动关闭,直接try块中就可以关闭
29、==和equals的区别?
1.==:用来比较值是否相等
2.equals:用来比较是否同一个对象
30、js中
js“==”和“===”的区别?
==:用于一般比较,比较的时候可以转换数据类型
===:用于严格比较,只要类型不匹配就返回false
31、java“==”和equals的区别?
==:分两种情况,(1)基本数据类型:比较是值是否相等(2)引用数据类型:比较的是地址值(堆内存地址)
32、Java都有那些开发平台?
1.JAVA SE:主要用在客户端开发
2.JAVA EE:主要用在web应用程序开发
3.JAVA ME:主要用在嵌入式应用程序开发
33、什么是JVM?java虚拟机包括什么?JVM内存的划分?
JVM:java虚拟机,运用硬件或软件手段实现的虚拟的计算机,
Java虚拟机包括:寄存器,堆栈,处理器
JVM内存的划分:寄存器、本地方法区、方法区、栈内存、堆内存。
34、什么是B/S架构?什么是C/S架构?
1.B/S(Browser/Server),浏览器/服务器程序
2.C/S(Client/Server),客户端/服务端,桌面应用程序
C/S与B/S的区别?
有如下8个方面的不同:
a、硬件环境的不同
C/S:一般建立在专用的网络上,小范围里的网络环境,局域网之间再通过专门服务器提供连接和数据交换服务。
B/S:建立在广域网之上的,不必是专门的网络硬件环境,有比C/S更强的适应范围,一般只要有操作系统和浏览器就行。
b、对安全要求不同
C/S:一般面向相对固定的用户群,对信息安全的控制能力很强。一般高度机密的信息系统采用C/S结构适宜。
B/S:建立在广域网之上,对安全的控制能力相对弱,可能面向不可知的用户。
c、对程序架构不同
C/S:程序可以更加注重流程,可以对权限多层次校验,对系统运行速度可以较少考虑。
B/S:对安全以及访问速度的多重的考虑,建立在需要更加优化的基础之上。
d、软件重用不同
C/S:程序可以不可避免的整体性考虑,构件的重用性不如在B/S要求下的构件的重用性好.
B/S:对的多重结构,要求构件相对独立的功能。
e、系统维护不同
C/S:程序由于整体性,必须整体考察,处理出现的问题以及系统升级。
B/S:构件组成,方面构件个别的更换,实现系统的无缝升级。
f、处理问题不同
C/S:程序可以处理用户面固定,并且在相同区域,安全要求高需求,与操作系统相关。
B/S:建立在广域网上,面向不同的用户群,分散地域,这是C/S无法作到的。
g、用户接口不同
C/S:多是建立的Window平台上,表现方法有限,对程序员普遍要求较高。
B/S:建立在浏览器上,有更加丰富和生动的表现方式与用户交流;并且大部分难度减低,减低开发成本。
h、信息流不同
C/S:程序一般是典型的中央集权的机械式处理,交互性相对低。
B/S:信息流向可变化,B-B B-C B-G等信息、流向的变化,更像交易中心。
35、你所知道网络协议有那些?
1.HTTP:超文本传输协议
2.FTP:文件传输协议
3.SMPT:简单邮件协议
4.TELNET:远程终端协议
5.POP3:邮件读取协议
36、栈和堆的区别?
堆是先进先出,栈是先进后出
栈内存:存储的是局部变量,凡是定义在方法中的都是局部变量(方法外的都是全部变量)
堆内存:存储的是数组和对象,凡是new建立的都是在堆中,堆中存放的都是实体(对象)
指针:栈中的变量指向堆内存中的变量,这就是Java中的指针
1.栈内存存储的局部变量,而堆内存存储的是实体
2.栈内存的更新速度要快于堆内存,因为局部变量的生命周期很短
3.栈内存存放的变量生命周期一旦结束就会被释放,而堆内存存放的实体会被垃圾回收机制不定时的回收。
37、什么是重写?什么是重载?方法重写和重载的区别?
1.重写:存在子父类之间的,子类拥有与父类相同的方法名,相同的参数和返回类型
2.重载:同一个类中拥有相同的方法名,但参数数量或参数类型不能完全相同
区别:重写多态性起作用,对调用被重载过的方法可以大大减少代码的输入量,同一个方法名只要往里面传递不同的参数就可以拥有不同的功能或返回值。
1.重载方法参数列表必须修改,重写方法一定不能修改
2.重载方法返回类型可以修改,重写方法返回类型一定不能修改
3.重载方法可以修改异常,重写方法可以减少或者删除,但不能抛出新的或更广的异常
4.重载方法可以修改访问,重写方法不能做严格的限制
38、抽象类和接口的相同点和区别?
相同点:
1.都是上层的抽象层
2.都不能被实例化
3.都能包含抽象方法,这些抽象方法用于描述具备的功能,但是不必提供具体的实现
区别:
1.抽象类要被子类继承;接口要被类实现
2.抽象类可以做方法申明,也可以做方法实现;接口只能做方法申明
3.抽象类中的变量是普通变量;接口里定义的变量只能是公共的静态常量
4.抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象的方法,那么子类只能是抽象类;同样,实现接口的时候,如果不能全部实现接口方法,那么该类也只能是抽象类
5.接口是设计的结果,抽象类是重构的结果
6.抽象类里面可以没有抽象方法
7.如果一个类里有抽象方法,那么这个类只能是抽象类
8.抽象方法要被实现,所以不能是静态的,也不能是私有的
9.接口可继承接口,并可多继承接口,但类只能单继承
39、什么是接口?java为什么需要接口?
1.接口:接口就是某个事物对外提供一些功能的声明,是一种特殊的java类
2.为什么需要接口:为了弥补java单继承的缺陷
40、java垃圾自动回收机制
java垃圾回收机制是java虚拟机提供的功能,用于空闲的时间以不定时的方式动态回收无任何引用的对象所占据的内存空间
41、String和StringBuild和StringBuffer
1.速度上:StringBuild>StringBuffer>String
2.String是字符串常量,一旦声明不可改变
3.StringBuild是线程不安全,StringBuffter是线程安全
4.StringBuffer中很多方法带有synchronized关键字,所以可以保证线程安全,但StringBuild中没有关键字,所以保证不了线程安全
5.String:适用于少量字符串操作的情况,即创建复制,修改的比较少情况
6.StringBuffer:适用于单线程下字符串缓冲区进行大量操作的情况
7.StringBuild:适用于多线程下字符串缓冲区进行大量的操作情况
42、TCP三次握手?
1.客户端发送syn包到服务器 (syn是请求同步的意思)
2.服务器收到syn包,并发送一个syn+ack的包 (ack是确认同步的意思)
3.客户端收到syn+ack的包,并向服务器发送ack确认包
43、面向对象的三大基本特征和五大基本原则?
三大特性:(1)封装(2)继承(3)多态
五大基本原则:(1)单一职责原则(2)开放封闭原则(3)替换原则(4)依赖原则(5)接口分离原则
44、Java中23种设计模式?
1.创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式
2.结构型模式(7种):适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模式,享元模式
3.行为型模式(11种):策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
45、什么是ORM?
对象关系映射(英语:(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换 。从效果上说,它其实是创建了一个可在编程语言里使用的--"虚拟对象数据库"。
46、session和cache的区别是什么
Session 、Cookie、cache 区别
Cookie
Cookie用来保存客户浏览器请求服务器页面的请求信息
我们可以存放非敏感的用户信息,保存时间可以根据需要设置
如果没有设置Cookie失效日期,它的生命周期保存到关闭浏览器为止
Cookie对象的Expires属性设置为MinValue表示永不过期
Cookie存储的数据量受限制,大多数的浏览器为4K因此不要存放大数据
由于并非所有的浏览器都支持Cookie,数据将以明文的形式保存在客户端
Cache
Cache用于在Http请求期间保存页面或者数据
Cache的使用可以大大的提高整个应用程序的效率
它允许将频繁访问的服务器资源存储在内存中,当用户发出相同的请求后,服务器不是再次处理而是将Cache中保存的数据直接返回给用户
可以看出Cache节省的是时间—服务器处理时间
Cache实例是每一个应用程序专有的,其生命周期==该应用程序周期
应用程序重启将重新创建其实例
注意:如果要使用缓存的清理、到期管理、依赖项等功能必须使用Insert 或者Add方法方法添加信息
通常使用最频繁的是Session,那么Session和Cache又有什么区别呢?
Session缓存和Cache缓存的区别。
(1)最大的区别是Cache提供缓存依赖来更新数据,而Session只能依靠定义的缓存时间来判断缓存数据是否有效。
(2)即使应用程序终止,只要Cache.Add方法中定义的缓存时间未过期,下次开启应用程序时,缓存的数据依然存在。而Session缓存只是存在于一次会话中,会话结束后,数据也就失效了。
(3)Session容易丢失,导致数据的不确定性,而Cache不会出现这种情况。
(4)由于Session是每次会话就被加载,所以不适宜存放大量信息,否则会导致服务器的性能降低。而Cache则主要用来保存大容量信息,如数据库中的多个表。
(5)Session目前只能保存在内存中,对其性能有影响。