自我介绍
会问些与专业相关的问题(LZ数学专业,学渣没答上来)
1、说说汉罗塔算法
2、说说逆矩阵的应用
Java基础知识
1、简单介绍一下面向对象
把一组数据结构和处理它们的方法组成对象(object),把相同行为的对象归纳为类(class),通过类的封装
(encapsulation)隐藏内部细节,通过继承(inheritance)实现类的特化(specialization)/泛化
(generalization),通过多态(polymorphism)实现基于对象类型的动态分派(dynamic dispatch)。
2、说说B树的实现和在数据库中的应用
http://blog.csdn.net/xiaolaohu_zy/article/details/78049942
3、主键索引和组合索引哪个更快?为什么主键索引比组合索引快
我不知道 面试官给我讲了讲,大概就是因为主键索引不需要维护数据库内部的树形结构,而组合索引需要维护内部结构。
4、写一个单例模式,并说说单例模式的缺点
单例模式应该大家都会吧,有懒汉式和饿汉式两种。(我写时候还忘记加static了)
缺点我只知道不能保证多线程下的应用
后来我上网查了一下:
优点:1、提供了对唯一实例的受控访问
2、由于系统内只存在一个对象,可以节约系统资源,速与一些需要频繁创建与销毁的系统对象,无疑提高了系统性能
3、允许可变数目的实例
缺点:1、由于单例模式中间没有抽象层,单例模式的扩展非常困难。
2、单例类指责过重,一定程度上违背了“单一职责”原则
3、滥用单例会带来负面作用,如,将数据库连接池设计为单例类,可能导致连接程序过多,出现溢出现象;如果单例出的对象
长时间没有用则会导致被回收,出现对象丢失。
4、懒汉式是时间换空间,饿汉式是空间换时间
5、不加同步的懒汉式是线程不安全的,但是加了同步会降低访问速度(可以用双重检查加锁volatile)
5、讲讲GC和内部实现的算法
我只知道是垃圾回收器,采用计数算法,看有没有对象引用,没有的话就被回收。具体可以看
http://blog.csdn.net/xiaolaohu_zy/article/details/78048746
6、你知道悲观锁与乐观锁吗?
不知道。。以前看过,忘记了。
悲观锁:
是指假设并发冲突会发生,所以是否发生都会使用锁机制;它会锁住读取的记录,防止其他事务读取和更新这些记录,会导致其他事务一直阻塞,
悲观锁独享占用资源,悲观锁可以使用Repeatable Read事务,它完全满足悲观锁的要求。
乐观锁:
不会锁住任何东西,完全是应用系统层面的东西;如果使用乐观锁,数据库必须加版本字段,来记录当前记录被修改的次数。
7、讲讲怎样实现同步?synchronize的内部实现方法
没有说出来
synchronize(同一个数据){}:就是N条线程同时访问同一个数据
public synchronize 返回类型 方法名(){ }:同步方法,使用java.lang.object中的三个方法:wait();notify();notifyAll()
synchronize的实现原理:
synchronize可以放在方法前面、类的前面、对象前面。
同步代码块是使用monitorenter和monitorexit指令实现的,同步方法依靠的是方法修饰符上
的ACC_SYNCHRONIZED标志隐式实现的。
任何一个Java对象都有一个monitor与之关联,monitor是由C++的ObjectMonitor实现的