面试知识点总结

网易:

1、如果是覆盖索引,比如:sex,class,student覆盖索引,where后面只有sex,也会用到索引,类型是index(index索引的意思是不需要回聚簇索引查询,只需要在索引树中查询,所以速度通常比all快一点),当where后面是sex=...and  class=...,或者是sex=...and student=...索引类型就是ref(ref类型索引的意思是:使用了索引,但是不是主键索引和唯一索引这种能确定某行的索引,最后查找的是一片数据)

2、ArrayList和LinkedList一直往后add的话,ArrayList更快。

3、JVM的gc过程在新生代中,只要复制一次,就将此对象年龄加一(不是gc一次年龄加一)

4、ArrayList的线程安全类:CopyOnWriteArrayList<E>类

5、Object类下面有哪些方法:equals(),hashCode(),clone(),toString(),notify(),notifyall(),wait(Long timeout),finalize()

6、equals()和hashCode()方法必须同时重写吗

                必须同时重写,java规定:

                        1、如果两个对象equals,则他们的hashCode一定相等,如果不equals,他们的hashCode也可能相等

                        2、如果两个对象hashCode不相等,则一定不equals,如果hashCode相等,也不一定equals

                在每个覆盖了equals方法的类中,也必须覆盖hashCode方法,如果不这样做的话,就会违反Object.hashCode约定,从而导致集合类无法正常运作,比如HashMap、HashSet和HashTable等。

7、volatile关键字是否具有可见性、原子性和有序性?

                1)、具有可见性,当一个共享变量被volatile修饰时,它会保证修改的值会立即从缓存更新到主存,当有其他线程需要读取时,它会去内存中读取新值。

                2)、不具有原子性,假如某个时刻变量inc的值为10,线程1对变量进行自增操作,线程1先读取了变量inc的原始值,然后线程1被阻塞了;然后线程2对变量进行自增操作,线程2也去读取变量inc的原始值,由于线程1只是对变量inc进行读取操作,而没有对变量进行修改操作,所以不会导致线程2的工作内存中缓存变量inc的缓存行无效,所以线程2会直接去主存读取inc的值,发现inc的值时10,然后进行加1操作,并把11写入工作内存,最后写入主存。线程1对变量进行读取操作之后,被阻塞了的话,并没有对inc值进行修改。然后虽然volatile能保证线程2对变量inc的值读取是从内存中读取的,但是线程1没有进行修改,所以线程2根本就不会看到修改的值。

                可以采用synchronized、Lock、AtomicInteger来保证原子性

                3)、volatile能在一定程度上保证有序性。

8、设计一个单例

9、Object下面有哪些方法?有没有sleep(),有没有wait()、notify()?

10、如何统计一个网站的访问量?

11、surivor from和to的区别,只是用来复制的吗?

猜你喜欢

转载自blog.csdn.net/a274537260/article/details/80280677