Java面试总结:华资软件实习生面试--21/7/14

Java面试总结:华资软件实习生面试–21/7/14

String和StringBuffer、StringBuilder的区别?

简单的来说:String 类中使用 final 关键字字符数组保存字符串, private final char value[] ,所以 String对象是不可变的。而StringBuilder 与 StringBuffer 都继承自 AbstractStringBuilder 类,在 AbstractStringBuilder中也是使用字符数组保存字符串 char[]value 但是没有用 final 关键字修饰,所以这两种对象都是可变的。

== 和 equals

== :它的作用是判断两个对象的地址是不是相等。(基本数据类型比较的是值,引用数据类型比较的是内存地址)
equals:它的作用也是判断两个对象是否相等,一般有两种使用情况:
情况1:类没有覆盖 equals() 方法。则通过 equals() 比较该类的两个对象时,等价于通过“
”比较这两个对象。
情况2:类覆盖了 equals() 方法。一般,我们都覆盖 equals() 方法来两个对象的内容相等;若它们的内容相
等,则返回 true (即,认为这两个对象相等)。
##比较一下Arraylist和LinkedList
1、是否保证线程安全:Arraylist和LinkedList都是不同步的,也就是不保证线程安全;
2、底层数据结构:ArrayList底层使用的是Object数组;LinkedList底层使用的是双向链表数据结构
3、插入和删除是否受元素位置的影响:ArrayList 采用数组存储,所以插入和删除元素的时间复杂度受元素
位置的影响。LinkedList 采用链表存储,所以插入,删除元素时间复杂度不受元素位置的影响,都是
近似 O(1)而数组为近似 O(n)。
4、是否支持快速随机访问:LInkedList不支持高效的随机元素访问,而ArrayList支持。快速随机访问就是通过元素的序号快速获取元素对象(对应于 get(int index) 方法)。
5、内存空间占用: ArrayList的空 间浪费主要体现在在list列表的结尾会预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗比ArrayList更多的空间(因为要存放直接后继和直接前驱以及数
据)。

List、Set、Map使用情况

List是一个继承于Collection的接口,即List是集合中的一种。List是有序的队列,List中的每一个元素都有一个索引;第一个元素的索引值是0,往后的元素的索引值依次+1。和Set不同,List中允许有重复的元素。实现List接口的集合主要有:ArrayList、LinkedList、Vector、Stack。

Set是一个继承于Collection的接口,Set是一种不包括重复元素的Collection。它维持它自己的内部排序,所以随机访问没有任何意义。与List一样,它同样运行null的存在但是仅有一个。由于Set接口的特殊性,所有传入Set集合中的元素都必须不同,关于API方面。Set的API和Collection完全一样。实现了Set接口的集合有:HashSet、TreeSet、LinkedHashSet、EnumSet。

Map与List、Set接口不同,它是由一系列键值对组成的集合,提供了key到Value的映射。在Map中它保证了key与value之间的一一对应关系。也就是说一个key对应一个value,所以它不能存在相同的key值,当然value值可以相同。实现map的集合有:HashMap、HashTable、TreeMap、WeakHashMap。

垃圾回收

垃圾回收器有两个基本的原理:
考虑某个对象在未来的程序运行中,将不会被访问。
向这些对象要求归回内存。

数据库如何提高查询速度

主要通过三种途径提高数据库查询效率:1.SQL的性能优化,2.数据库的性能优化,3.查询优化
其中查询优化方面:

  1. 纵向、横向分割表,减少表的尺寸
  2. 根据查询条件,建立索引,优化索引、优化访问方式,限制结果集的数量量。注意填充银子要适当(最好使用默认值0)。索引应该尽量的小,使用自己数小的列建索引好,不要对涌现的几个值的列建立单一索引。
  3. 用OR的子句可以分解成多个查询,并且通过UNION 连接多个查询。它们的速度只与是否使用索引有关,如果查询需要用到联合索引,用UNION ALL执行的效率更高。

什么是事务

事务是逻辑上的一组操作,要么都执行,要么都不执行。
事务最经典也经常被拿出来说例子就是转账了。假如小明要给小红转账1000元,这个转账会涉及到两个关键操作就是:将小明的余额减少1000元,将小红的余额增加1000元。万一在这两个操作之间突然出现错误比如银行系统崩溃,导致小明余额减少而小红的余额没有增加,这样就不对了。事务就是保证这两个关键操作要么都成功,要么都要么都失败。

事物的特性(ACID)

  1. 原子性: 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;
  2. 一致性: 执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的;
  3. 隔离性: 并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;
  4. 持久性: 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。

简单介绍一下面向切面方法

AOP: 面向切面编程。(Aspect-Oriented Programming) 。AOP可以说是对OOP的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码,属于静态代理。

你可能感兴趣的:(Java面试总结:华资软件实习生面试--21/7/14)