春招面试经验系列(七)蚂蚁金服

蚂蚁金服

一、解释一下多态。

多态是面向对象程序设计中代码重用的一个重要机制,它表示当同一个操作作用在不同对象时,会有不同的语义,从而产生不同的结果。例如同样是执行“+”操作,整型之间是整数结果,而字符串之间相加则仍然是字符串。

二、java 垃圾回收问题。

三、hashmap 和 hashtable

  1. Hashtable 的方法是同步的,HashMap未经同步,在多线程场合要手动同步HashMap
  2. Hashtable不允许null (key和value都不行),HashMap允许null值(key和value都可以)
  3. Hashtable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。
  4. 哈希值的使用不同,Hashtable直接使用对象的hashCode,HashMap重新计算hash值,而且用与代替求模
  5. ConcurrentHashMap和CopyOnWriteArrayList保留了线程安全的同时,也提供了更高的并发性
  6. Hashtable和ConcurrentHashMap有什么分别呢?它们都可以用于多线程的环境,但是当Hashtable的大小增加到一定的时候,性能会急剧下降,因为迭代时需要被锁定很长的时间。因为ConcurrentHashMap引入了分割(segmentation),不论它变得多么大,仅仅需要锁定map的某个部分,而其它的线程不需要等到迭代完成才能访问map。

四、对object方法的认识。

Object类是Java中其他所有类的祖先,没有Object类Java面向对象无从谈起。作为其他所有类的基类,Object具有哪些属性和行为,是Java语言设计背后的思维体现。

Object类位于java.lang包中,java.lang包包含着Java最基础和核心的类,在编译时会自动导入。Object类没有定义属性,一共有13个方法

五、hashcode重写场景。

六、递归和迭代的区别。

  1. 递归的基本概念:程序调用自身的编程技巧称为递归,是函数自己调用自己。
  2. 递归的使用可以使代码更简洁清晰,可读性更好(对于初学者到不见得),但由于递归需要系统堆栈,所以空间消耗要比非递归代码要大很多,而且,如果递归深度太大,可能系统资源会不够用。
  3. 利用变量的原值推算出变量的一个新值。如果递归是自己调用自己的话,迭代就是A不停的调用B。

七、线程池。

  1. 线程池的好处:第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控
  2. 线程池的创建:通过ThreadPoolExecutor来创建一个线程池
  3. 线程池的参数:
    1. corePoolSize(线程池的基本大小)
    2. runnableTaskQueue(任务队列):用于保存等待执行的任务的阻塞队列。 可以选择以下几个阻塞队列。
    3. maximumPoolSize(线程池最大大小):线程池允许创建的最大线程数。如果队列满了,并且已创建的线程数小于最大线程数,则线程池会再创建新的线程执行任务。值得注意的是如果使用了无界的任务队列这个参数就没什么效果。
    4. ThreadFactory:用于设置创建线程的工厂,可以通过线程工厂给每个创建出来的线程设置更有意义的名字
    5. RejectedExecutionHandler(饱和策略)
    6. keepAliveTime(线程活动保持时间):线程池的工作线程空闲后,保持存活的时间。所以如果任务很多,并且每个任务执行的时间比较短,可以调大这个时间,提高线程的利用率。
    7. TimeUnit(线程活动保持时间的单位)

八、spring MVC的过程。

提供了servlet监听器的context和web应用的上下文。同时还集成了一些现有的web框架。

然后可以解释下MVC模型框架:

模型(M)控制业务逻辑,视图(V)与用户交互,控制器(C)搭建模型和视图的桥梁。

九、反射。

对象在运行过程中能否有一种机制查看自身的状态,属性和行为。这就是反射机制。
每一个运行中的类,都会有一个class对象,表示这个类的类对象。使用关键字new创建一个类的时候,这个类可以没有被加载。但是
使用Class对象的newInstance()方法的时候,就必须保证:1、这个类已经加载;
2、这个类已经连接了。而完成上面两个步骤的正是Class的静态方法forName()所完成的,

这个静态方法调用了启动类加载器,即加载 java API的那个加载器。

十、多线程锁

十一、CAS数据库索引事务特性

你可能感兴趣的:(面试,春招,互联网公司)