没有合适的资源?快使用搜索试试~ 我知道了~
首页远光软件股份有限公司 最新复试题
资源详情
资源评论
资源推荐

远光软件复试题:
一、JAVA 类
1. 单例模式特点:
a、单例类只能有一个实例。
b、单例类必须自己创建自己的唯一实例。
c、单例类必须给所有其他对象提供这一实例。
2. 常用写法:
a、懒汉式(线程不安全)
解决方法:
(1)加同步 synchronized
(2)双重检查锁定:
判断实例是否为空,如果为空就锁定。
(3)静态内部类,静态内部类中定义静态不可更改的实例
b、饿汉式(一旦加载,就被加载,天生线程安全)
c、登记式单例(hashmap 记录静态实例是否存在,并且用到了饿汉式静态实例构造方
法)
二、 面向对象的三大特性有哪些
封装、多态、继承
三、 数据库分页优化
先查自增主键,然后找出所要返回的对应的元组。(针对 MySQL,lImit(MySQL 独有))
四、servlet 的生命周期
Servlet 的生命周期分为 5 个阶段:加载、创建、初始化、处理客户请求、卸载。
(1)加载:容器通过类加载器使用 servlet 类对应的文件加载 servlet
(2)创建:通过调用 servlet 构造函数创建一个 servlet 对象
(3)初始化:调用 init 方法初始化
(4)处理客户请求:每当有一个客户请求,容器会创建一个线程来处理客户请求
(5)卸载:调用 destroy 方法让 servlet 自己释放其占用的资源
Java 创建对象过程
JavaScript 创建对象的方法 直接创建、用函数来创建
jQuery 有哪些选择题 元素选择器 层叠选择器 过滤选择器 表单元素选择器 表单元素
过滤选择器

jsp 的九个内置对象
session 和 request 区别
tomcat 是什么,为什么程序可以在里面运行
设计模式了解吗
索引是什么,干嘛用的
线程了解吗,线程同步是什么
知道 HTTP 协议吗
过滤器是什么,原理是什么,知道拦截器吗
Struts2 工作原理
对 spring 有什么了解
面向对象的三个特征
封装,继承,多态,这个应该是人人皆知,有时候也会加上抽象。
多态的好处
允许不同类对象对同一消息做出响应,即同一消息可以根据发送对象的不同而采用多种不
同的行为方式(发送消息就是函数调用)。主要有以下优点:
可替换性:多态对已存在代码具有可替换性
可扩充性:增加新的子类不影响已经存在的类结构
接口性:多态是超类通过方法签名,向子类提供一个公共接口,由子类来完善或者重写它来实
现的。
灵活性
简化性
代码中如何实现多态
实现多态主要有以下三种方式:
1. 接口实现
2. 继承父类重写方法
3. 同一类中进行方法重载
虚拟机是如何实现多态的
动态绑定技术(dynamic binding),执行期间判断所引用对象的实际类型,根据实际类型调
用对应的方法。
接口的意义
接口的意义用三个词就可以概括:规范,扩展,回调。
抽象类的意义
抽象类的意义可以用三句话来概括:
为其他子类提供一个公共的类型
封装子类中重复定义的内容
定义抽象方法,子类虽然有不同的实现,但是定义时一致的
接口和抽象类的区别
比较 抽象类 接口
默认方
法
抽象类可以有默认的方法实现
java 8 之前,接口中不存在方法的
实现.

比较 抽象类 接口
实现方
式
子类使用 extends 关键字来继承抽象类.如果子类
不是抽象类,子类需要提供抽象类中所声明方法的
实现.
子 类 使 用 implements 来实现接
口,需要提供接口中所有声明的实
现.
构造器 抽象类中可以有构造器, 接口中不能
和正常
类区别
抽象类不能被实例化 接口则是完全不同的类型
访问修
饰符
抽象方法可以有 public,protected 和 default 等修
饰
接口默认是 public,不能使用其他
修饰符
多继承 一个子类只能存在一个父类 一个子类可以存在多个接口
添加新
方法
想抽象类中添加新方法,可以提供默认的实现,因此
可以不修改子类现有的代码
如果往接口中添加新方法,则子类
中需要实现该方法.
父类的静态方法能否被子类重写
不能。重写只适用于实例方法,不能用于静态方法,而子类当中含有和父类相同签名的静态
方法,我们一般称之为隐藏。
什么是不可变对象
不可变对象指对象一旦被创建,状态就不能再改变。任何修改都会创建一个新的对象,如
String、Integer 及其它包装类。
静态变量和实例变量的区别?
静态变量存储在方法区,属于类所有。实例变量存储在堆当中,其引用存在当前线程栈。
能否创建一个包含可变对象的不可变对象?
当然可以创建一个包含可变对象的不可变对象的,你只需要谨慎一点,不要共享可变对象
的引用就可以了,如果需要变化时,就返回原对象的一个拷贝。最常见的例子就是对象中
包含一个日期对象的引用。
java 创建对象的几种方式
采用 new
通过反射
采用 clone
通过序列化机制
前 2 者都需要显式地调用构造方法。造成耦合性最高的恰好是第一种,因此你发现无论什
么框架,只要涉及到解耦必先减少 new 的使用。
switch 中能否使用 string 做参数
在 idk 1.7 之前,switch 只能支持 byte, short, char, int 或者其对应的封装类以及 Enum 类型。
从 idk 1.7 之后 switch 开始支持 String。
switch 能否作用在 byte, long 上?
可以用在 byte 上,但是不能用在 long 上。
String s1=”ab”, String s2=”a”+”b”, String s3=”a”, String s4=”b”, s5=s3+s4 请问 s5==s2 返
回什么?
返回 false。在编译过程中,编译器会将 s2 直接优化为”ab”,会将其放置在常量池当中,
s5 则是被创建在堆区,相当于 s5=new String(“ab”);
你对 String 对象的 intern()熟悉么?
intern()方法会首先从常量池中查找是否存在该常量值,如果常量池中不存在则现在常量池

中创建,如果已经存在则直接返回。
比如
String s1=”aa”;
String s2=s1.intern();
System.out.print(s1==s2);//返回 true
Object 中有哪些公共方法?
java 当中的四种引用
强引用,软引用,弱引用,虚引用。不同的引用类型主要体现在 GC 上:
强引用:如果一个对象具有强引用,它就不会被垃圾回收器回收。即使当前内存空间不足
JVM 也不会回收它,而是抛出 OutOfMemoryError 错误,使程序异常终止。如果想中断强
引用和某个对象之间的关联,可以显式地将引用赋值为 null,这样一来的话,JVM 在合适
的时间就会回收该对象。
软引用:在使用软引用时,如果内存的空间足够,软引用就能继续被使用,而不会被垃圾
回收器回收,只有在内存不足时,软引用才会被垃圾回收器回收。
弱引用:具有弱引用的对象拥有的生命周期更短暂。因为当 JVM 进行垃圾回收,一旦发现
弱引用对象,无论当前内存空间是否充足,都会将弱引用回收。不过由于垃圾回收器是一
个优先级较低的线程,所以并不一定能迅速发现弱引用对象。
虚引用:顾名思义,就是形同虚设,如果一个对象仅持有虚引用,那么它相当于没有引用
在任何时候都可能被垃圾回收器回收。
WeakReference 与 SoftReference 的区别?
这点在四种引用类型中已经做了解释,这里简单说明一下即可:
虽 然 WeakReference 与 SoftReference 都 有 利 于 提 高 GC 和 内 存 的 效 率 , 但 是
WeakReference ,一旦失去最后一个强引用,就会被 GC 回收,而软引用虽然不能阻止被
回收,但是可以延迟到 JVM 内存不足的时候。
为什么要有不同的引用类型
不像 C 语言,我们可以控制内存的申请和释放,在 Java 中有时候我们需要适当的控制对
象被回收的时机,因此就诞生了不同的引用类型,可以说不同的引用类型实则是对 GC 回
收时机不可控的妥协。有以下几个使用场景可以充分的说明:
利用软引用和弱引用解决 OOM 问题:用一个 HashMap 来保存图片的路径和相应图片对象
关联的软引用之间的映射关系,在内存不足时,JVM 会自动回收这些缓存图片对象所占用
的空间,从而有效地避免了 OOM 的问题.
通过软引用实现 Java 对象的高速缓存:比如我们创建了一 Person 的类,如果每次需要查询
一个人的信息,哪怕是几秒中之前刚刚查询过的,都要重新构建一个实例,这将引起大量
Person 对象的消耗,并且由于这些对象的生命周期相对较短,会引起多次 GC 影响性能。
此时,通过软引用和 HashMap 的结合可以构建高速缓存,提供性能。
java 中==和 的区别,和`hashcode 的区别
==是运算符,用于比较两个变量是否相等,而 equals 是 Object 类的方法,用于比较两个

对象是否相等。默认 Object 类的 equals 方法是比较两个对象的地址,此时和==的结果一
样。换句话说:基本类型比较用==,比较的是他们的值。默认下,对象用==比较时,比较
的是内存地址,如果需要比较对象内容,需要重写 equal 方法。
和 的联系
是 Object 类的一个方法,返回一个哈希值。如果两个对象根据 equal()方法
比较相等,那么调用这两个对象中任意一个对象的 hashCode()方法必须产生相同的哈希值。
如果两个对象根据 eqaul()方法比较不相等,那么产生的哈希值不一定相等(碰撞的情况下
还是会相等的。)
a.hashCode()有什么用?与 a.equals(b)有什么关系
hashCode() 方 法 是 相 应 对象 整 型 的 hash 值 。 它 常用 于 基 于 hash 的 集 合 类, 如
Hashtable、HashMap、LinkedHashMap 等等。它与 equals() 方法关系特别紧密。根据
Java 规范,使用 equal() 方法来判断两个相等的对象,必须具有相同的 hashcode。
将对象放入到集合中时,首先判断要放入对象的 hashcode 是否已经在集合中存在,不存
在则直接放入集合。如果 hashcode 相等,然后通过 equal()方法判断要放入对象与集合中
的任意对象是否相等:如果 equal()判断不相等,直接将该元素放入集合中,否则不放入。
有没有可能两个不相等的对象有相同的 hashcode
有可能,两个不相等的对象可能会有相同的 hashcode 值,这就是为什么在 hashmap 中
会有冲突。如果两个对象相等,必须有相同的 hashcode 值,反之不成立。
可以在 hashcode 中使用随机数字吗?
不行,因为同一对象的 hashcode 值必须是相同的
a==b 与 a.equals(b)有什么区别
如果 a 和 b 都是对象,则 a==b 是比较两个对象的引用,只有当 a 和 b 指向的是堆中的同
一个对象才会返回 true,而 a.equals(b) 是进行逻辑比较,所以通常需要重写该方法来提
供逻辑一致性的比较。例如,String 类重写 equals() 方法,所以可以用于两个不同对象,
但是包含的字母相同的比较。
返回值是什么
false,因为有些浮点数不能完全精确的表示出来。
a=a+b 与 a+=b 有什么区别吗?
+=操作符会进行隐式自动类型转换,此处 a+=b 隐式的将加操作的结果类型强制转换为持
有结果的类型,而 a=a+b 则不会自动进行类型转换。如:
byte a = 127;
byte b = 127;
b = a + b; // error : cannot convert from int to byte
b += a; // ok
(译者注:这个地方应该表述的有误,其实无论 a+b 的值为多少,编译器都会报错,因为
a+b 操作会将 a、b 提升为 int 类型,所以将 int 类型赋值给 byte 就会编译出错)
short s1= 1; s1 = s1 + 1; 该段代码是否有错,有的话怎么改?
有错误,short 类型在进行运算时会自动提升为 int 类型,也就是说 的运算结果是
int 类型。
short s1= 1; s1 += 1; 该段代码是否有错,有的话怎么改?
+=操作符会自动对右边的表达式结果强转匹配左边的数据类型,所以没错。
& 和 &&的区别
首先记住&是位操作,而&&是逻辑运算符。另外需要记住逻辑运算符具有短路特性,而 &
不具备短路特性。
剩余59页未读,继续阅读









安全验证
文档复制为VIP权益,开通VIP直接复制

评论0