京东Java开发一面面经

来源:互联网 发布:开淘宝店怎么做推广 编辑:程序博客网 时间:2024/05/21 20:23

自我介绍

会问些与专业相关的问题(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实现的