@author ironartisa

  1. JAVA基础
    1. 用户自己写一个String类,会发生什么?

会加载不进内存
由于JVM双亲委派机制,类加载器收到了加载类的请求,会把这个请求委派给他的父类加载器
用户自定义的String就会达到顶层BootStrap ClassLoader启动类加载器
启动类加载器加载的是系统中的String对象,而用户编写的java.lang.String不会被加载。
image.png

  1. sleep()和wait()区别

sleep不会释放锁

  1. Object类有哪些方法?

1 clone方法
保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。
2 getClass方法
final方法,获得运行时类型。
3 toString方法
该方法用得比较多,一般子类都有覆盖。
4 equals方法
该方法是非常重要的一个方法。一般equals和==是不一样的,但是在Object中两者是一样的。子类一般都要重写这个方法。
5 hashCode方法
该方法用于哈希查找,重写了equals方法一般都要重写hashCode方法。这个方法在一些具有哈希功能的Collection中用到。
6 wait方法
当前对象释放所持有的对象锁 (也就是不会继续执行后面的代码), 由运行态转为阻塞态, 进入等待队列.
7 notify方法
该方法唤醒在该对象上等待的某个线程。
8 notifyAll方法
该方法唤醒在该对象上等待的所有线程。

  1. 讲一下equals()和hashcode(),什么时候重写,为什么重写,怎么重写

原本的含义:Object类中定义的equals()方法是用来比较两个引用所指向的对象的内存地址是否一致;hashCode()方法,用的是native关键字修饰,该方法是原生函数是由C/C++实现的,运用对象的内存地址通过哈希函数计算。
为什么要重写:java中规定,两个对象的equals()相同,那么hashCode一定相同,反之则不一定。所以重写equals时一定要重写hashCode
什么时候重写:i 当需要重新定义两个对象是否相等的条件时(比如只需要部分属性值相同),比如往HashMap中添加元素时,需要比较的是key值而不是内存地址;ii 自定义的类,想要把它的实例保存在集合时就要重写这两个方法
怎么重写:重写equals:三个比较步骤 1. 比较内存地址;2. 判断对象类型是否一致;3. 判断对象属性值

  1. Java多态如何实现?
  2. Java如何保证多线程安全

1、线程中安全性问题的体现:
线程的安全性问题体现在三个方面:
(1)线程切换导致的原子性问题:
一个或者多个操作在 CPU 执行的过程中不被中断的特性。
(2)缓存导致的可见性问题:
一个线程对共享变量的修改,另外一个线程能够立刻看到
(3)编译优化导致的有序性问题:
程序执行的顺序按照代码的先后顺序执行
2、线程安全问题的解决办法
(1)JDK Atomic开头的原子类synchronizedLOCK,可以解决原子性问题。
(2)synchronizedvolatileLOCK,可以解决可见性问题。
(3)Happens-Before 规则可以解决有序性问题。

  1. I/O多路复用,epoll优势在哪里,为什么,epoll水平触发与边缘触发
  1. 操作系统
    1. 进程和线程的区别,进程间通信方式,socket在本机和网络通信的区别
    2. 多进程和多线程的区别和使用场景
  2. 计网
    1. 四次挥手,close_wait状态在什么时候?2msl的作用?
    2. http和https:80和443端口;https运行在ssl/tls之上(在tcp之上);对称加密DES,AES;
    3. http状态码
  3. 数据库
    1. Mysql是如何保证ACID的

  4. 算法题

剑指04: 左下角/右上角
奇数位放奇数,偶数位放偶数:以最后一个位置作为交换位,交换i = 0(i += 2)和j = 1(j += 2)
旋转数组:多次reverse,区间不同
之字形遍历二叉树:层序遍历,offerFirst右左,注意区别node和root
最长连续递增子序列:贪心