JAVA 部分
- equals()方法是用来干嘛的?它和有什么不同?重载equals的时候一般还会重载哪个函数,为什么
答:(1)equals()方法是Object的方法,通过覆盖该方法可以判断两个对象是否相等。
(2) 是用来判断基本类型的值是否相等或判断对象的地址是否相等。
(3)重载equals时候还会重载hashcode,可能出现两个对象“相等”,但是hashcode不一样导致不相等的情况。
比如,往set里加入10个自定义类,自定义类重载了equals方法,未重载hashcode,则它的大小就为10,如果hashcode重载后就为1。 - try{}里面有个return语句,那这个try后面的finally{}里的代码会不会执行,什么时候执行,在return前还是后。
答:会执行,是在return前执行
为什么呢?因为在try语句中,在执行return语句时,要返回的结果已经准备好了,就在此时,程序转到finally执行了。在转去之前,try中先把要返回的结果存在不同于x的局部变量中去,执行完finally后,再从中取出返回结果,因此,即使finally中对变量x进行了改变,但是不会影响返回结果(他应该使用栈保存返回值)
public int test();
Code:
0: iconst_1 //将位置为1的元素放到操作栈上
1: istore_1 //将位置为1的元素存到局部变量表
2: iload_1 //从局部变量表加载位置1的元素
3: istore_2 //从位置为2的元素存到局部变量表
4: iinc 1, 1 //把一个常量值1加到一个局部变量1上
7: iload_2 //从局部变量2中装载int类型的值
8: ireturn //从方法中返回一个int
9: astore_3 //将引用类型存入局部变量表3的位置
10: iinc 1, 1 //把一个常量值1加到一个局部变量1上
13: aload_3 //从局部变量表3中装载引用类型值
14: athrow
Exception table:
from to target type
2 4 9 any
9 10 9 any
-
foreach 时List.remove(i)会引发ConcurrentModificationException
原因:实现了Iterator接口,使用了next()方法,
执行list.remove(item);对list对象的modCount值进行了修改,而list对象的迭代器的exceptedModCount值未进行修改,因此抛出
ConcurrentModificationException异常。
使用iterator.remove(item);保证安全 -
String和StirngBuffer的区别
答:String
(1)是不可变对象,一旦创建就不能修改值。
(2)String是final类,不能继承;
(3)对String的操作都是改变赋值地址。
StringBuffer
(1) 是一个可变对象;
(2) 它只能通过构造函数来建立;
(3) 对象被建立后就会分配内存空间,初始保存一个null,通过它的append方法向其赋值。
(4) 线程安全的。 -
简要说明final的作用。用反射能修改final变量吗?
-
final修饰的类不可被继承
-
final修饰的方法不能被重写
-
final修饰的变量不能被修改,不能修改变量的引用,内容可以改变。
用反射修改final变量分两种情况:
1).final修饰的成员变量在定义时初始化了值,那么修改不了。
2).final修饰的成员变量在定义时没有初始化值,可以动态修改 -
简述下Executor最主要的几个接口,以及如何使用。
Executor主要是两个接口ScheduledExecutorService和ExecutorService
ExecutorService是一个接口,提供了管理终止线程的方法,及跟踪一个或多个异步任务执行状况而生成Future的方法。
三个实现类:AbstractExecutorService,
ScheduledThreadPoolExecutor,ThreadPoolExecutor
ScheduledExecutorService是线程池,对多个任务实现了循环和延时任务。内部使用了延迟队列,基于等待/唤醒机制实现。 -
用ReentrantLock和Condition写一个线程安全的队列,队列的元素都是Integer(泛型更好),队列长度有限,加新元素时如果超过上限则阻塞。
-
什么是内部类,java支持几种内部类,内部类的好处和作用是什么
内部类:在一个类内部进行其他类结构的嵌套操作。
Java支持成员内部类,静态内部类,方法内部类,匿名内部类。
成员内部类:成员内部类不能定义静态成员和方法。
静态内部类:使用static修饰的内部类为静态内部类。
方法内部类:定义在方法里的内部类
匿名内部类:没有名字的方法内部类。
内部类好处:
1).内部类和外部类可以方便的访问彼此的私有域(包括私有方法、私有属性)
2).内部类是一种封装,对外部的其他类隐藏
3).内部类可以实现java单继承局限 -
列举或描述JDK中的设计模式,例如IO包,Net包
IO包使用了适配器模式,装饰器模式。
-
适配器是指:将一个类的接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作。
ByteArrayInputStream 继承了 InputStream 接口,而内部封装了一个 byte 数组,它将 byte 数组接口适配成 InputStream 流处理器接口。
FileInputStream 继承了 InputStream 接口,而内部有 FileDescriptor对象的引用,它将 FileDescriptor 的接口适配成 InputStream 流处理器接口。 -
装饰器模式:动态给一个对象添加一些额外的职责
InputStream input = new DataInputStream(new BufferedInputStream(new FileInputStream(“C:/test.txt”)));
- Java中有几个ClassLoader?简述ClassLoader的体系结构。简单描述OSGi(Open Service GateWay Initiative)规范和框架
1)
Bootstrp Classloader 加载jre/lib/.jar
Extension ClassLoader 加载jre/lib/ext/.lib
App ClassLoader 加载classpath中指定的jar
Custom ClassLoader 通过继承java.lang.ClassLoader自定义加载class
2)OSGi是java上的动态模块系统。
可以动态加载,更新和卸载模块而不用停止服务
实现系统的模块化、版本化,允许多版本bundule同时服务
Service model允许模块/插件相互依赖但松耦合,分享服务更简单
数据库:
-
简述一下ACID
Atomicity 原子性 指事务是一个不可分割的单位
Consistency 一致性 事务前后数据的完整性必须保持一致
Isolation 隔离性 多个用户访问数据库时为每个用户开启事务,不能被其他事物的操作数据干扰,多个并发事务之间相互隔离。
Durability 持久性是指一个事务一旦被提交,它对数据库的改变就是永久的。 -
简述下Btree结构,不考虑key重复,或简述下二叉排序树的结构
二叉排序树结构
(1)左子树小于等于根节点的值
(2)右子树大于等于根节点值
(3)左右子树叶为二叉排序树 -
存储过程有一种隔离度是可串行化的,简述它的语义。
Linux部分
- 查看文件系统剩余空间的命令是 df –hl
- 列出当前目录下所有文件的命令(每个文件一行,只要文件名,不要其他字段) ls -l|grep -v ^d|grep -v ‘total’|awk ‘{print $9}’
3.用perl或者sed或者awk或者其他脚本语言,把data.txt中的所有ip替换为127.0.0.1
sed -i ‘s/[0-9].[0-9].[0-9].[0-9]/127.0.0.1/g’ b.sh