51、数组和列表(Array和ArrayList)
- Array可以包括基本数据类型和对象,ArrayList只能包含对象。
- Array是固定大小的,ArrayList的大小是动态变化的。
- ArrayList提供了更多的方法和特性。
53、截止jdk1.8,java并发啊框架支持锁
- 读写锁
- 自族锁
- 乐观锁
54、java调试器jdb.exp
55、得到class的三种方法,以Person为例
- person.getClass
- Person.class
- Class.forName("")
56、解释JDBC中的角色
JDBC驱动提供了特定厂商对JDBC API接口类的实现,驱动必须提供java.sql包下这些类实现,connection,Statement,PreparedStatement、CallableStatement、ResultSet和Driver
57、Java数据库链接JDBC用到哪种设计模式
桥接模式
58、I/0用到了装饰器模式
59、关于java鲁棒性(健壮性)体现
- Java中不采用指针访问内存单元
- 无用内存自动回收机制(垃圾回收机制)
60、关于float与double精度丢失问题
float:有效位是7位。
double:有效位16位
61、产生一个随机数的两种方式(Math.random和Random)
(1)int a = (int) (Math.random()*100);
System.out.println(a);
(2)
不带种子:
Random r=new Random();
for(int i=0;i<10;i++){
System.out.println(r.nextInt());
}
带种子:
此种方式,无论程序运行多少次,返回结果都是一样的
public static void main(String[] args) {
java.util.Random r=new java.util.Random(10);
for(int i=0;i<10;i++){
System.out.println(r.nextInt());
}
}
如果没有提供种子数,Random实例的种子数将是当前时间的毫秒数,可以通过System.currentTimeMillis()来获得当前时间的毫秒数。打开JDK的源代码,我们可以非常明确地看到这一点。
62、直接从键盘获取char
System.out.println((char)System.in.read());
63、Java垃圾回收并不能保证内存的耗尽,垃圾回收只是一个低优先级的后台进程,而且跟踪可达或者不可达对象。
64、try内有return,在return前执行finally中代码。
65、一点在finally块中使用了return或throw语句,将会导致try,catych块中return throw语句失效。
66、JVM对异常的处理方法是打印异常的跟踪站信息,并终止程序运行,这就是前面程序在遇到异常后自动结束的原因。
67、子类抛出的异常不能比父类大。
68、throw爬出的不是异常类,而是异常实实例。
69、在Java7以前,每个catch块之恩那个补货一种类型异常,但从Java7开始,一个catch块可以补货多种类型的异常,捕获多种异常时,异常变量有隐士的final修饰,因此,程序不能对异常变量重新赋值
70、严格封装的类更容易被复用。
71、被声明为final的变量,必须在声明时进行初始化,而在以后的引用中之恩那个读取,不可更改。
72、final修饰符的主要作用时声明属性,方法,和类,分别表示属性不可变,方法不可覆盖,类不可继承。
73、注意不能用abstract修饰构造方法,静态方法和private
74、一个接口可同时继承两个接口。
75、在接口里的成员变量,必须初始化而且都是final类型的,就意味着变量变常量。
76、什么叫重载
方法名相同,参数个数,类型和顺序可以不同。
77、重载和重写
- 重写是父类与子类多态的一种表现,重载是一个类中多态性的一种体现,
- 充血重被子类重写的访问权限大于被重写方法的权限。
78、在同一个类中,不同构造方法调用该类的其他构造方法需要使用this形式,而且必须在第一行。
79、System中所有的成员都是静态的。
80、关于类加载器,
- 引导类加载器bootstrap class loader:它用来加载Java的核心库,是用原生代码来实现的。
- 扩展类加载器extendions class loader:它用来加载Java的扩展库,
- 系统类加载器System class loader:根据java应用的类路径,classpath类来加载Java类。
- tomcat为每个APP创建了一个loader,里面保存此webapp的classloader,需要加载webapp下的类时,就取出classloader
81、JDK1.5之后,Java为基本数据类型提供了自动装箱,拆箱的功能,
泛型也是在jdk1.5之后引入的。
82、两种获取随机数方式
Math.Random Math.Round()这个时四舍五入,要与取随机数分开。
Random来,分为带种子和不带种子,
83、关于抽象类与接口
- 优先选用接口,尽量少用抽象类。
- 接口和抽象类都不能被实例化。
84、子类不可以继承父类的构造方法。
85、封装的主要作用在于对外隐藏内部实现细节,增强程序的安全性。
86、DBMS中实现事务持久性的子系统是恢复管理子系统。
87、面试题如果有程序题时,一定要考虑内存
88、在方面中声明变量不能用static修饰。
89、Java用监视器机制实现了进程之间的同步执行。
90、关于Java并发的说法
ReadWriterLock适用于读多写少的并发场景
91、Java中常用类库,Runtime,System,Math,Random和Calendar
- 语言包:lang,系统自动引用此包
- Object她是所有类的父类
- 基础类型包装类
- 数学类
- String和StringBuilder
- 系统和运行时类,System in和out时标准输入类和输出类,System所有成员变量都是静态的。
- Runtime看可以直接访问运行时资源。
- Class和ClassLoading:classLoder类是一个抽象类,它提供了将类名转为文件名。
90、关于JVM
91、关于继承和组合
- 如果存在一种IS-A的关系,比如Bee时一个Insect,并且一个类需要向另一个类曝露出所有的方法接口,heme更应该用继承。
- 如果存在一种has-A的关系,比如Bee有一个attack功能,那么更应该用组合。
关于继承:
父类更具有通用性,子类更具体,并且继承之间具有传递性,当子类实例化时会递归调用父类中的构造方法。
关于分页:
先取总记录数,得到总页数。取所有纪录,最后显示本页数据。
92、面向对象的五大基本原则
- 单一职责:就一个类而言,应该仅有一个引起它变化的原因。
- 里氏替换:子类必须能够替换掉她们的父类。
- 接口隔离
- 开放封闭:软件实体,应该可以扩展,但是不可以修改。面对需求,对程序的改动是通过新代码进行的,而不是更改现有代码。
- 依赖倒置:抽象不应该依赖细节,细节应该依赖抽象,高层模块不应该依赖底层模块,两个都应该依赖于抽象。
93、WebService是跨平台,跨语言的远程调用技术。
Webservice采用soap细致
WSDL是用来描述WebService以及如何对她们进行访问。
94、String类底层采用char数组来保存字符串。
95、interface默认方法有public,abstract修饰,变量为public static final修饰
96、依赖注入的动机就是减少组件之间的耦合度,使开发简洁。
97、前置线程用于执行任务,后台线程用于内存分配,前台线程结束当前进程结束,进程技术,后台线程未必结束,
main()函数是一个前台进程,前台进程是程序中必须执行完成的,而后台线程则是java中所有前台结束后技术,不管有没有完成,后台线程主要用于内存分配方面。
98、数组是一个对象,数组不是一种原生类,数组存储在堆中连续内存空间里。
99、concurrentMap使用gsegment来分段和管理锁。segment继承字Reentrantlock因此,concurrentHashMap使用ReentrantLock来保证线程安全。
100、事件处理模型有三个要素。
事件源,事件,事件监听器。
101、JDK提供的用于并发编程的同步器Semaphore,CyclicBarrier,CountDownLatch、
102、URL:同一资源定位符。
http://localhost:8080/OD
协议 主机名 端口 路径
为什么没有ip,因为ip地址 + 子网掩码 = 主机号
103、Arrays.sort()使用的是快速排序和归并排序
- 基本类型使用的是一个更过调优的快速排序方法。
- 对象使用归并排序。
- 如果是一个对象,则必须实现Comparable接口,则一个经过修改的归并排序算法。
Collection.sort()是归并排序。0