华为通用软开实习面经

791 阅读7分钟

1. Colletion接口下有哪些子类?

① List:ArrayList、LinkedList和Vector。②Set:HashSet和TreeSet。③Map:HashMap和TreeMap。

2. 排序算法知道哪些?冒泡排序的时间复杂度和空间复杂度?

冒泡排序,选择排序,插入排序,归并排序,快速排序,希尔排序,堆排序,基数排序。

3. Java数据类型有哪些?

分为基本数据类型和引用数据类型。基本类型有八种:byte、short、int、long、float、double、char、boolean。其余类型都是引用类型。

4. Java的异常分类?

Throwable是Java语言中所有错误或异常的超类,在Java中只有Throwable类型的实例才可以被抛出(throw)或者捕获(catch),它是异常处理机制的基本组成类型。实例分为 Error 和 Exception 两种。Error 类是指 java 运行时系统的内部错误和资源耗尽错误。应用程序不会抛出该类对象。如果出现了这样的错误,除了告知用户,剩下的就是尽力使程序安全的终止。Exception又有两个分支,一个是运行时异常RuntimeException , 一 个是检查异常 CheckedException。RuntimeException 如 :NullPointerException 、 ClassCastException ;CheckedException 如: I/O 错误导致的 IOException、SQLException。RuntimeException 是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。 如果出现 RuntimeException,那么一定是程序员代码书写导致的错误.

5. OutOfMemoryError是哪种异常?

属于Error。

6. Hashmap、Hashtable、ConcurrentHashmap的原理和区别?

HashMap:java8之前是数组加链表,java8之后是数组加链表加红黑树。默认加载因子是0.75,初始容量是2的指数次幂,链表转红黑树树的阈值是8,如果这个值变为6,则将红黑树转回链表。ConcurrentHashmap的数据结构同样也是数组加链表加红黑树。解决并发的方式是CAS+synchronized使锁更细化。 区别: HashMap线程不安全,数组+链表+红黑树。 HashTable线程安全,锁住整个对象,数组+链表。 ConcurrentHashmap线程安全,CAS+同步锁,数组+链表+红黑树。将锁的元素细粒度到table的每个元素。 HashMap的key、value均可以为null,其他的两个类不支持。

7. Java的锁机制分类?

悲观锁和乐观锁、独占锁和共享锁、互斥锁和读写锁、可重入锁、公平锁和的非公平锁、分段锁。 锁升级: 研究发现大多数情况下,锁不仅不存在多线程竞争,而且总是由同一线程多次获得,为了不让这个线程每次获得锁都需要CAS操作的性能消耗,就引入了偏向锁。当一个线程访问对象并获取锁时,会在对象头里存储锁偏向的这个线程的ID,以后该线程再访问该对象时只需判断对象头的Mark Word里是否有这个线程的ID,如果有就不需要进行CAS操作,这就是偏向锁。当线程竞争更激烈时,偏向锁就会升级为轻量级锁,轻量级锁认为虽然竞争是存在的,但是理想情况下竞争的程度很低,通过自旋方式等待一会儿上一个线程就会释放锁,但是当自旋超过了一定次数,或者一个线程持有锁,一个线程在自旋,又来了第三个线程访问时(反正就是竞争继续加大了),轻量级锁就会膨胀为重量级锁,重量级锁就是Synchronized,重量级锁会使除了此时拥有锁的线程以外的线程都阻塞。

8. Java的内存分区?

9. 利用jdbc进行查询的步骤?

(1)加载数据库驱动类 (2)获取数据库连接对象 (3)写sql (4)创建PreparedStatement对象 (5)执行查询返回ResultSet结果集对象 (6)遍历结果集,获取查询结果 (7)释放资源

10.PreparedStatement和Statement的区别?

关系:PreparedStatement继承自Statement,都是接口 区别:PreparedStatement可以使用占位符,是预编译的,批处理比Statement效率高。PreparedStatemant,是处理预编译语句的一个接口,PreparedStatemant可用于执行动态的SQL语句,所谓动态SQL语句,就是可以在SQL语句中提供参数,这是我们可以对相同的SQL语句替换参数从而多次使用。因此当一个SQL语句需要执行多次时,使用预编译语句可以减少执行时间。

11.基本数据类型和包装类的区别?为什么需要包装类?

区别: (1)包装类是对象,拥有方法和字段,对象的调用都是通过引用对象的地址,基本类型不是 (2)包装类型是引用的传递,基本类型是值的传递 (3)声明方式不同,基本数据类型不需要new关键字,而包装类型需要new在堆内存中进行new来分配内存空间 (4)存储位置不同,基本数据类型直接将值保存在值栈中,而包装类型是把对象放在堆中,然后通过对象的引用来调用他们 (5)初始值不同,eg: int的初始值为 0 、 boolean的初始值为false 而包装类型的初始值为null (6)使用方式不同,基本数据类型直接赋值使用就好 ,而包装类型是在集合如 coolection Map时会使用

使用包装类的原因: (1)包装类里面有一些很有用的方法和属性,如HashCode,ParseInt (2)基本类型不能赋null值,某些场合需要。 (3)有些地方不能直接用基本类型,比如集合。

12. synchronized有多少种用法?锁方法和锁代码块哪种比较好?听说过锁类和锁实例吗?

用法:5种。锁住的可以是:普通方法、静态方法、类、对象实例、this实例。 锁方法和锁代码块的比较:(锁代码块的粒度比所方法更小)使用synchronized声明的方法在某些情况下是有弊端的,比如A线程调用同步的方法执行一个长时间的任务,那么B线程就必须等待比较长的时间才能执行,这种情况可以使用synchronized代码块去优化代码执行时间,只有在必须锁住对象的时候再上锁,也就是通常所说的减少锁的粒度。 类锁和对象锁:(1)类锁是对静态方法使用synchronized关键字后,无论是多线程访问单个对象还是多个对象的sychronized块,都是同步的。 (2)对象锁是实例方法使用synchronized关键字后,如果是多个线程访问同个对象的sychronized块,才是同步的,但是访问不同对象的话就是不同步的。(3)类锁和对象锁是两种不同的锁,可以同时使用,但是注意类锁不要嵌套使用,这样子容易发生死锁。

13. 数据库的DDL和DML的用法和区别?

DML(data manipulation language): 它们是SELECT、UPDATE、INSERT、DELETE,就象它的名字一样,这4条命令是用来对数据库里的百数据进行操作的语言 DDL(data definition language): DDL比DML要多,主要的命令有度CREATE、ALTER、DROP等,DDL主要是用在定义或改问变表(TABLE)的结构,数据类型,表之间的链接和约束答等初始化工作上,他们大多在建立表时使用 DCL(Data Control Language): 是数据库控制功能。是用来设置或更改数据库用户或角色权限的语句,包专括(grant,deny,revoke等)语句。在默认状态下,只有sysadmin,dbcreator,db_owner或db_securityadmin等人员才有权力执行DCL

TCL - Transaction Control Language:事务控制语言,COMMIT - 保存属已完成的工作,SAVEPOINT - 在事务中设置保存点,可以回滚到此处,ROLLBACK - 回滚,SET TRANSACTION - 改变事务选项

14. 手撕代码:leetcode原题242

import java.util.*;
class Solution {
    public boolean isAnagram(String s, String t) {
    if (s.length() != t.length()) {
        return false;
    }
    char[] str1 = s.toCharArray();
    char[] str2 = t.toCharArray();
    Arrays.sort(str1);
    Arrays.sort(str2);
    return Arrays.equals(str1, str2);   
    }
}