【分享】找到一篇挺不错的面试题目

来源:互联网 发布:usb网络共享驱动下载 编辑:程序博客网 时间:2024/05/22 17:43

JavaSE

  1. ArrayList、LinkedList、HashMap在实际应用中如何选择?

  2. Vector、Hashtable的共同点和缺点?

  3. String、StringBuffer、StringBuilder如何选择?

  4. 数组
    a) 数组是如何实现的?
    b) 数组优点和缺点?
    c) 数组根据下标检索为什么速度非常快?
    d) 数组根据值检索采用什么方式会带来更好的效果?

  5. ArrayList
    a) ArrayList是如何实现的?
    i. ArrayList底层以数组的方式实现
    b) ArrayList默认初始化多大,如何优化?
    i. 初始化容量10
    ii. 创建ArrayList集合的时候指定初始化容量capacity
    c) ArrayList默认每次增容多少?
    i. 增容之后的容量是原容量的1.5倍。
    d) ArrayList优点和缺点?
    i. 优点是:查询效率高。
    ii. 缺点是:随机增删元素效率低。

  6. Vector
    a) Vector为什么使用很少?
    i. 线程安全的,运行效率低
    b) Vector被哪个集合取代了?
    i. ArrayList集合替代了。
    c) Vector默认初始化多大?
    i. 默认初始化10
    d) Vector每次增容多少?
    i. 增容后的容量是原容量的2倍。

  7. 链表
    a) 单向链表和双向链表是如何实现的?
    b) 链表有什么优点和缺点?
    i. 优点:增删效率高
    ii. 缺点:查询效率低,链表必须从第一个元素挨着往后搜索。
    c) LinkedList实现了单向链表还是双向链表?
    i. 双向链表

  8. 散列表(哈希表)
    a) 散列表是如何实现的?
    b) 散列表的优点和缺点?
    c) HashMap默认初始容量是多少?默认加载因子是多少?
    i. 默认初始化容量16
    ii. 默认加载因子0.75
    d) Hashtable有什么缺点?Hashtable默认初始化容量是多少?默认加载因子是多少?
    i. 缺点:效率低,线程安全
    ii. 初始化容量是11
    iii. 默认加载因子0.75
    e) Hashtable被哪个集合取代了?
    i. 被HashMap

  9. HashSet和HashMap有什么关系?
    a) HashSet底层是HashMap实现的。

  10. 如何保证散列表中的数据不会重复?
    a) 被存储到散列表中的对象,重写hashCode和equals方法。

  11. 散列表中如果放入重复的对象是覆盖掉以前的数据还是不改变集合中的数据?
    a) 覆盖

  12. String及相关包装类在相关集合中,为什么可以排序?而自定义的类就无法排序?
    a) 因为String及相关的包装类都实现了Comparable接口。
    b) 自定义的类没有实现java.lang.Comparable接口。

  13. 将自定义对象放到List或者其他集合中如何排序?
    a) 第一种方式:实现Comparable接口。
    b) 第二种方式:单独编写一个比较器java.util.Comparator

  14. Comparable和Comparator的差别?
    a) Comparable是可比较的接口,实现该接口的类必须实现compareTo方法,Comparable接口,和参加比较的类紧紧耦合在一起。
    b) Comparator和参与比较的对象是低耦合的。

  15. 栈的特点?队列的特点?
    a) 栈:后进先出
    b) 队列:先进先出

  16. 想要查询数组中是否存在某个元素,应该采用什么方法查询最快?
    a) 折半查找

  17. 你是怎么理解面向对象的?
    a) 我们根据项目中业务的需求,将现实世界分割成不同的单元(对象),然后我们可以给其一个环境,让这些对象“协作”起来,形成一个系统。

  18. ArrayList是否是线程安全的?如果不是如何得到一个线程安全的ArrayList?
    a) ArrayList集合非线程安全。
    b) Collection.synchronizedList(List list);可以将List集合封装成线程安全的。
    如果把全国10亿人放到一个集合中,实现最快的查询,该选择哪个集合?HashMap(HashSet)

  19. 如果想得到一个可排序的集合,并且不重复,该选择哪个集合?
    a) TreeSet集合(SortedSet)

  20. 集合中为什么有迭代器Iterator方法?有什么作用,是什么设计模式?
    a) 因为所有的集合都实现了java.util.Iterable接口,而该接口中有一个iterator方法。
    b) 迭代模式:隐藏实现类的细节。遍历集合的时候不需要关心集合底层的具体实现。无论是哪种数据结构,都可以通过迭代器去遍历。

  21. Java集合部分主要体现了哪些设计模式?
    a) 迭代模式。。。。。。。

  22. JavaIO部分主要体现了哪些设计模式?
    a) 装饰者模式
    b) 适配器模式

  23. 如果A继承B,谁的构造方法先执行?
    a) B的构造方法先执行。

  24. 静态变量和静态语句块在什么时候被初始化?初始化几次?
    a) 在类加载的时候初始化。初始化一次。

  25. new一个类和采用Class.forName(“”)初始化一个类有什么区别?
    a) New + 构造方法
    b) Class.forName(“”)是通过反射机制创建java对象。

  26. 谈谈final,finally,finalize之间的区别?
    a) final修饰的变量一旦赋值不可再改变。final修饰的类不能被继承,final修饰的方法不能被覆盖。
    b) finally是异常处理机制中的语句块。
    c) finalize是一个方法名,任何一个java对象都有这个方法,当该java对象被垃圾回收器回收之前会自动调用该对象的finalize方法。

  27. 如何才能写出一个Singleton模式?
    a) 懒汉式(常用),用到该对象的时候才会创建。如果不用到该对象,永远不会创建。
    b) 饿汉式,只要类加载,马上创建对象。

  28. 如果采用static语句块进行初始化相对比较简单,也只会初始化一次,为什么还出现了Singleton设计模式?

  29. Singleton设计模式的优点和缺点?
    a) 优点:可以保证该类型的对象,在JVM中只有一个,节省内存。
    b) 单例模式的对象无法被继承。单例模式的对象无法被垃圾回收器回收。
    c) 单例模式的java对象无法“反序列化”。

  30. 推技术是什么?你怎么实现?(观察者模式)

  31. 设计模式大致方向分为几种?
    a) 创建型、结构型、行为型

  32. Object类中hashCode方法返回值的类型是什么?
    a) int

  33. Object类中常用的方法有哪些?
    a) toString、equals、hashCode、clone、finalize

  34. native和transient关键字是什么意思?
    a) native表示该java代码“本地调用”,例如java代码底层调用C++程序。
    b) transient修饰的成员变量不参与序列化。

  35. synchronized关键字同步的是什么?实现原理是什么?
    a) 同步的是“对象”和“类”,因为有对象锁和类锁。
    b) 原理:凡是遇到synchronized关键字的线程,去寻找对应“对象锁”和“类锁”,如果能够获取到“对象锁”或者“类锁”就可以执行。

  36. 如果静态方法上放置synchronized关键字代表什么?
    a) 代表每个线程执行该静态方法的时候必须拿到“类锁”。

  37. String s = “a”和String s = new String(“a”)有什么区别?
    a) String s = “a”表示在方法区字符串常量池中创建一个字符串对象。
    b) String s = new String(“a”);表示方法区字符串常量池中创建一个字符串对象,并且在堆中也会创建一个对象。

  38. 接口中的变量和普通类中的变量有什么区别?
    a) 接口中的变量是常量。

  39. 什么是java序列化,如何实现java序列化?
    a) 将JVM中的java对象存储到“持久化设备”中。
    b) 参与序列化的java对象必须实现java.io.Serializable接口,并且给该java对象添加常量serialVersionUID,保证类版本。然后使用ObjectInputStream和ObjectOutputStream完成对象的反序列化和序列化。

  40. 面向对象的概念中,“相关的特征”你是怎么理解的?

  41. 软件开发的一般流程?
    a) 问题定义
    b) 可行性研究
    c) 需求分析
    d) 总体设计
    e) 详细设计
    f) 编码和单元测试
    g) 综合测试
    h) 软件维护

  42. 除了new还有哪些方法创建一个对象?
    a) new可以创建
    b) 通过反射机制可以创建。
    c) 通过反序列化可以创建。

  43. throw和throws的区别?
    a) throw是手动抛出异常
    b) throws在方法声明位置上抛出异常。如果m1方法去调用这个方法,那么m1方法需要去处理异常。

  44. 覆盖与重载的区别?

  45. super是指向父类对象吗?
    a) 不是。Super表示当前子类对象中的“父类特征”

  46. 如果一个方法只是让子类使用,那么如何声明?
    a) protected

  47. 抽象类和接口有什么共同点和区别?

  48. 什么是面向接口编程?
    a) 在开发之前,我们通常会去定义一些接口。将项目进行分层。所有调用程序的程序员面向接口调用。然后所有实现接口的程序员严格按照接口去实现。面向接口编程可以使程序耦合度降低,达到更好的“可插拔”

  49. Java虚拟机对内存是怎么划分的,局部变量和线程在哪个区域运行?对象在什么区域创建?
    a) 栈,堆,方法区。局部变量和线程都是在栈中运行。对象在堆中被创建。

  50. Java ClassLoader有哪些?Java类是如何加载的?
    a) 启动(Bootstrap)类加载器:引导类装载器是用本地代码实现的类装入器,它负责将/lib下面的类库加载到内存中。由于引导类加载器涉及到虚拟机本地实现细节,开发者无法直接获取到启动类加载器的引用,所以不允许直接通过引用进行操作。
    b) 标准扩展(Extension)类加载器:扩展类加载器由Sun的ExtClassLoader(sun.misc.Launcher$ExtClassLoader)实现的。它负责将/lib/ext或者由系统变量java.ext.dir指定位置中的类库加载到内存中。开发者可以直接使用标准扩展类加载器。
    c) 系统类(System)加载器:系统类加载器由sun的AppClassLoader实现的。它负责将系统类路径CLASSPATH中指定的类库加载到内存中。开发者可以直接使用系统类加载器。
    d) 线程上下文类加载器。

  51. 构造方法可以覆盖吗?
    a) 不能覆盖。

  52. 构造方法可以重载吗?
    a) 能

  53. 我们所说的真正意义上的多态是动态绑定还是静态绑定?动态绑定和静态绑定区别描述以下。
    a) 真正意义上的多态是动态绑定。父类型的引用指向子类对象。
    b) 静态绑定说的是“编译期”,动态绑定指的是“运行期”。

  54. ==和equals的区别?
    a) ==两边如果是引用数据类型则比较内存地址。
    b) Object中的equals比较的是内存地址,但在显示的业务逻辑当中应该比较“内容”。

  55. 如果要精确计算,应该采用java的什么类型?
    a) java.math.BigDecimal

  56. Java中都有哪些接口只是声明类型,没有方法?
    a) java.io.Serializable;
    b) java.lang.Cloneable;

  57. sleep有什么作用?
    a) 腾出CPU,让给其他线程执行。Thread.sleep方法出现在哪个线程中,哪个线程被“阻塞”。

  58. sleep和wait有什么区别?

  59. 什么是守护线程?守护线程的特点?
    a) 守护线程在其他线程结束之后马上结束。

  60. 如果正确的退出一个线程?
    a) 使用boolean类型的标识。如果想退出线程,则修改boolean类型的值。

  61. String和其他包装类有什么共同点?
    a) 都是引用类型。都实现了Comparable接口,和Serializable接口。String有字符串常量池,包装类中的Integer有整型常量池(-128-127)。

  62. JDK源码中,哪些类有serialVersionUID属性,该属性的作用是什么?
    a) ArrayList有该属性。作用是无论该类是否升级,是否发生源码的变动,只要该属性值一样,则代表是同一个版本的类。

  63. GC是什么?GC什么时候执行?GC主要回收哪块内存?
    a) 垃圾回收器
    b) 由JVM自己控制。我们可以建议垃圾回收器回收垃圾。System.gc();
    c) GC回收堆内存。

UML

  1. UML时序图中表示的是对象还是类?
    a) 对象

  2. UML中的泛化、实现、关联、聚合、合成、依赖的含义及表示符号分别是什么?
    a) 泛化:继承关系,类和类继承,接口和接口继承。
    b) 实现:类和接口之间是实现。
    c) 关联:在一个对象中含有另一个对象的引用。通过当前对象可以找到另一个对象的所有信息。他们处在同一个层级上。通常使用成员变量来实现。
    d) 聚合:整体和部分的关系,但是整体无法决定部分的生命周期。整体用一个类来表示,部分用集合去存储。
    e) 合成:关系比聚合紧密。整体决定部分的生命周期。
    f) 依赖:通常局部变量,方法参数,返回值等。

  3. UseCase(用例图)出现在哪个阶段?

  4. UML中的时序图表示的是类之间的通信还是对象之间的通信?
    a) 对象之间的通信。

  5. UML时序图中“柱状的竖线”是什么意思?
    a) 是对象的生命线。

  6. UML和Rational Rose是什么关系?
    a) UML是一种统一建模语言。
    b) Rational Rose是可以画UML的工具。

  7. Visio可以画UML图形吗?还知道其他工具吗?
    a) 可以。

  8. 你觉得UML就是画画图吗?你觉得掌握了什么才能真正的灵活的应用UML?

  9. 在实际应用中接触最多的UML图形是什么?
    a) 时序图
    b) 用例图
    c) 类图
    d) 状态图

Oracle JDBC

  1. Oracle客户端工具使用过什么?
    a) PLSQL Dev
    b) Toad

  2. Oracle分页查询语句怎么写?

  3. oracle安装需要注册码吗?不需要

  4. SQL中有哪些连接?
    a) 内连接(等值连接,非等值连接,自连接)
    b) 外连接(左外,右外)

  5. JDBC编程步骤?
    a) 注册驱动
    b) 获取连接
    c) 获取数据库操作对象
    d) 执行SQL语句
    e) 处理结果集
    f) 释放资源

  6. Statement和PreparedStatement有什么区别?
    a) PreparedStatement是一个预编译的数据库操作对象,可以将SQL语句框架进行提前编译,防止SQL注入,类型安全。批量执行同构的SQL语句,效率较高。

  7. 数据库优化从什么方面考虑?
    a) SQL语句编写。
    b) 索引的使用。

  8. count(*)和count(字段名)有什么区别?
    a) Count(*)表示记录所有。
    b) Count(字段名)只记录非空的个数。

  9. Connection设置为readOnly是什么意思?
    a) 表示只读数据库,这个时候数据库会启动相关DQL语句优化策略。可以提高查询语句执行效率。

  10. 将图片存储到数据库中采用什么数据类型去存储?
    a) BLOB (Binary Large OBject)

0 0
原创粉丝点击