找不到工作的面试者总结
提示:写文章的时候,我还在找工作!!!
文章目录
- 找不到工作的面试者总结
- 前言
- 一、JAVA面死题
- 1. OOP是什么
- 2. 重载与重写的区别
- 3. java基本类型
- 4. String、StringBuffer、StringBuilder的区别
- 5. 接口和抽象类区别
- 6. 什么是自动拆装箱 int 和 Integer 有什么区别
- 7. ==和 equals 区别
- 8. final 、 finally 、 finalize
- 9.object有哪些方法?
- 10. 集合有哪些?
- 11. ArrarList 和 LinkedList 区别
- 12. HashMap底层,为什么要这样用?
- 13. HashMap 和 HashTable 区别
- 14. 线程的创建方式
- 15. 请写出你最常见的 5 个 RuntimeException
- 16. java的反射你是如果理解的
- 17. 什么是 java 序列化, 如何实现 java 序列化
- 二、Mysql面死题
- 1. mysql事务你了解吧,和我说说
- 2. mysql隔离级别
- 3. 事务并发问题
- 4. mysql的引擎
- 5. MySQL 四种索引
前言
提示:学了这些也找不到工作,计算机真的崩了,如果看到这篇文章,别干java,别干大数据,肺腑之言。
一、JAVA面死题
1. OOP是什么
OOP(Object Oriented Programming)即面向对象编程,面向对象的三大特征:封装、继承、多态
2. 重载与重写的区别
方法的重载是编译时多态,方法的重写是运行时多态
重载:重载发生在一个类中,同名的方法,不同的参数类型或者不同的参数个数
重写:重写发送在子类和父类之间,要求子类的重写方法和父类的被重写方法的方法名字、方法参数个数、方法类型、返回类型相同,访问权限不能比父类的低。
3. java基本类型
java基本类型八个,六种数字类型(四个整数型,两个浮点型),一种字符串型,还有一种布尔型。
byte、short、int、long、float、double、boolean、char
注意:string是引用类型
4. String、StringBuffer、StringBuilder的区别
String:字符串由final修饰的常量,存在常量池中,所以他是线程安全的。
StringBuffer:它使用了synchronize关键字,对方法进行了同步处理,所以线程是安全的。
StringBuilder:执行效率虽然高,但是因为线程不安全,所以不建议在多线程的环境下对同一个StringBuilder对象进行操作
5. 接口和抽象类区别
抽象类(abstract):接口需要子类继承、单继承、可以有构造方法,访问修饰符可以有public,protected和default、可以有成员变量。
接口(interface):需要子类实现接口、多实现、不能有构造方法,访问修饰符只能是public、只能有常量
。
6. 什么是自动拆装箱 int 和 Integer 有什么区别
底层是通过 Integer.valueOf()和 Integer.intValue() 方法实现 。 Integer 的默认值是
null, int 的默认值是 0
所以在[-128,127]区间内,==比较的时候,值总是相等的(指向的是同一对象),在这个区间外是不等的,
7. ==和 equals 区别
==:如果比较的是基本数据类型, 那么比较的是变量的值 如果比较的是引用数据类型, 那么比较的是地址值 (两个对象是否指向同一块内 存)
equals:如果没重写equals方法比较的是两个对象的地址值
如果重写了比较的是内容,equals是从object类中继承的,默认实现方法是双等
8. final 、 finally 、 finalize
final修饰符(关键字):被final修饰的类,就意味着不能再派生出新的子类,不能作为父类而被子类继承。因此一个类不能既被abstract声明,又被final声明。将变量或方法声明为final,可以保证他们在使用的过程中不被修改。被声明为final的变量必须在声明时给出变量的初始值,而在以后的引用中只能读取。被final声明的方法也同样只能使用,即不能方法重写。
finally是在异常处理时提供finally块来执行任何清除操作。不管有没有异常被抛出、捕获,finally块都会被执行。try块中的内容是在无异常时执行到结束。catch块中的内容,是在try块内容发生catch所声明的异常时,跳转到catch块中执行。finally块则是无论异常是否发生,都会执行finally块的内容,所以在代码逻辑中有需要无论发生什么都必须执行的代码,就可以放在finally块中。
finalize是方法名。java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在object类中定义的,因此所有的类都继承了它。子类覆盖finalize()方法以整理系统资源或者被执行其他清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的
9.object有哪些方法?
protected Object clone()—>创建并返回此对象的一个副本 。
boolean equals(Object obj)—>指示某个其他对象是否与此对象“相等
protected void finalize()—>当垃圾回收器确定不存在对该对象的更多引用时, 由 对象的垃圾回收器调用此方法 。
Class<?extendsObject> getClass()—>返回一个对象的运行时类。
int hashCode()—>返回该对象的哈希码值 。 void notify()—>唤醒在此对象监视器上等待的单个线程。
void notifyAll()—>唤醒在此对象监视器上等待的所有线程。 String toString()—>返回该对象的字符串表示
10. 集合有哪些?
11. ArrarList 和 LinkedList 区别
ArrayList 是实现了基于动态数组的数据结构, LinkedList 基于链表的数据结构
对于随机访问 get 和 set, ArrayList 效率优于 LinkedList, 因为 LinkedList 要移 动指针 。
对于新增和删除操作 add 和 remove, LinkedList 比较占优势, 因为 ArrayList 要 移动数据 。 这一点要看实际情况的。若只对单条数据插入或删除, ArrayList 的速 度反而优于 LinkedList 。但若是批量随机的插入删除数据, LinkedList 的速度大大 优于 ArrayList. 因为 ArrayList 每插入一条数据, 要移动插入点及之后的所有数 据 。
12. HashMap底层,为什么要这样用?
HashMap 底层是 数组+链表+红黑树 数组 Node<K,V>[] table ,哈希表, 根据对象的 key 的hash 值判断在数组里面是哪个节点
链表的作用是解决 hash 冲突, 将 hash 值取模之后的对象存在一个链表放在 hash值对应的槽位
红黑树 JDK8 使用红黑树来替代超过 8 个节点的链表,发送哈希碰撞,会带来链化,效率会变低,引入红黑树会提高查找效率从原来的 O(n)到 O(logn)
当链表长度大于8,且总数据量大于64的时候,链表就会转化成红黑树,
当前存入数据大于阈值即发生扩容或者存入数据到某一条链表时,此时该链表数据个数大于8,且数组总数量小于64即发生扩容每次扩容为初始容量的2倍
13. HashMap 和 HashTable 区别
HashTable 是线程安全的,而 HashMap 不是。
HashMap 的性能要比 HashTable 更好,因为HashTable 采用了全局同步Synchronized来保证安全性,对性能影响较大
HashMap 只有 containsValue 和 containsKey 方法; HashTable 有 contains 、 containsKey 和 containsValue 三个方法, 其中 contains 和 containsValue 方法功 能相同 。
Hashtable 中, key 和 value 都不允许出现 null 值 。HashMap 中, null 可以作为 键, 这样的键只有一个; 可以有一个或多个键所对应的值为 null。
HashTable 在不指定容量的情况下的默认容量为 11, 而 HashMap 为 16 , Hashtable 不要求底层数组的容量一定要为 2 的整数次幂, 而 HashMap 则要求一 定为 2 的整数次幂。
Hashtable 扩容时, 将容量变为原来的 2 倍加 1, 而 HashMap 扩容时, 将容量变 为原来的 2 倍 。
14. 线程的创建方式
线程的5种状态: 新建状态、就绪状态、运行状态、阻塞状态、死亡状态
1、继承 Thread 类创建线程
2、实现 Runnable 接口创建线程
3、实现callable接口和创建Future类创建线程,有返回值
4、使用线程池创建线程
5、使用匿名线程创建
15. 请写出你最常见的 5 个 RuntimeException
java.lang.NullPointerException 空指针异常; 出现原因: 调用了未经初始化的对象或者是不存在的对象 。
java.lang.ClassNotFoundException 指定的类找不到; 出现原因: 类的名称和路径加载错误; 通常都是程序试图通过 字符串来加载某个类时可能引发异常 。
java.lang.NumberFormatException字符串转换为数字异常; 出现原因: 字符型数据中包含非数字型字符 。
java.lang.IndexOutOfBoundsException 数组角标越界异常, 常见于操作数组对象时发生 。
java.lang.IllegalArgumentException 方法传递参数错误
java.lang.ClassCastException 数据类型转换异常。
16. java的反射你是如果理解的
在运行状态下,任何一个类,你都能知道它的所有方法和属性,对任何一个对象,你都能调用它的方法和属性,这种动态调用和获取的方法叫做反射机制
获取Class对象的三种方式
1 Object ——> getClass();
2 任何数据类型(包括基本数据类型)都有一个“静态”的class属性
3 通过Class类的静态方法:forName(String className)(常用)
17. 什么是 java 序列化, 如何实现 java 序列化
序列化是一种用来处理对象流的机制, 所谓对象流也就是将对象的内容进行流 化 。可以对流化后的对象进行读写操作, 也可将流化后的对象传输于网络之间
序列化的实现: 将需要被序列化的类实现 Serializable 接 口, 该接口没有 需 要 实 现 的 方 法, implements Serializable 只是为了标注该对象是可被序列化的,然后使用一个输出流(如: FileOutputStream)来构造一个 ObjectOutputStream(对象流) 对象, 接着, 使用 ObjectOutputStream 对象的 writeObject(Object obj)方法就可以将 参数为 obj 的对象写出(即保存其状态), 要恢复的话则用输入流。
二、Mysql面死题
1. mysql事务你了解吧,和我说说
原子性(Atomicity):事务过程中,如果其中操作出现错误,所有操作全部回滚,要么全嘎要么全做。
一致性(Consistency):事务开始和结束,事务完整约束没有被破坏。比如 A 向 B 转账, 不可能 A 扣了钱, B 却没收到
隔离性(Isolation):同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有干扰,比如 A 正在从一张银行卡中取钱, 在A 取钱的过程结束前, B 不能向这张卡转账。
持久性(Durability):事务完成后,数据保存好,无法回滚。
2. mysql隔离级别
3. 事务并发问题
脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到数据的脏数据。
不可重复读:事务A多次读同一数据,事务B在多次读取中修改了数据,事务A就出现了结果不一样。
幻读:事务A修改多个数据时,事务B插入了一条新的数据,此事出现了一条数据没有改过来,出现了幻读。
注意:不可重复读的和幻读很容易混淆, 不可重复读侧重于修改, 幻读侧重于新增或删除 。解决不可重复读的问题只需锁住满足条件的行, 解决幻读需要锁表。
4. mysql的引擎
5. MySQL 四种索引
1、普通索引:最基本的索引,没有任何限制
创建sql create index index_name on table(column(length))
2、唯一索引:索引列值必须唯一,运行null
创建sql create unique index indexName on table(column(length))
3、主键索引:是一种特殊的唯一索引,一个表只能有一个主键,不允许空值,在创建的时候一般会同时创建
创建sql 创建表时加上primary key (id)
4、组合索引:在多个字段上创建索引,只有在查询条件中使用创建索引时的第一个字段,索引才会被使用
创建sql alter table table_name add index name_city_age (name,city,age);
5、全文索引:主要用来查找文本中的关键字,而不是直接与索引中的值相比较
创建sql create fulltext index index_content ON article(content)