阿里2021届Java开发实习面经

JDK8的新特性

1.lambda表达式,允许把函数作为一个方法的参数
2.方法引用,用来简化lambda表达式,减少冗余代码
3.stream流,优化集合类的方法
4.默认方法,接口中可以写default修饰的方法

Exception的父类
Throwable

多线程实现方式
1.继承Thread类
2.实现Runnable接口,作为参数传递给Thread
3.实现Callable接口,使用FatureTask包装该对象并作为Thread参数

买家要看到自己买的订单, 卖家要看到自己卖的订单, 怎么设计数据库
不会

mysql存储引擎
对于MySQL 5.5及更高版本,默认的存储引擎是InnoDB,在5.5版本之前,MySQL的默认存储引擎是MyISAM。

aop原理
面向切面编程,作为面向对象的一种补充,用于处理系统中分布于各个模块的横切关注点,比如事务管理、日志、缓存等。AOP实现的关键在于AOP框架自动创建的AOP代理,AOP代理主要分为静态代理和动态代理,静态代理的代表为AspectJ;动态代理则以Spring AOP为代表。

Spring AOP中的动态代理主要有两种方式,JDK动态代理和CGLIB动态代理。JDK动态代理通过反射来接收被代理的类,并且要求被代理类必须实现一个接口。JDK动态代理的核心式InvocationHandler接口和Proxy类。

如果目标类没有实现接口,那么Spring AOP会选择使用CGLIB来动态代理目标类。CGLIB是一个代码生成的类库,可以在运行时动态的生成某个类的子类,注意CGLIB是通过继承的方式做的动态代理,因此如果某个类被标记为final,那么其无法使用CGLIB做动态代理。

JMV的GC原因
MinorGC :
当eden区满没有足够内存给新对象分配内存时触发
FullGC:

  • 调用System.gc()时,系统建议JVM执行full gc,但不必然执行。
  • 老年代或者方法区空间不足
  • 在monor gc 前,判断老年代最大可用连续空间是否大于新生代所有可用对象大小,如果不大于,则需要判断是否允许担保失败,如果不允许,直接full gc。如果允许,在判断老年代的最大可用连续空间是否大于历次晋升到老年代对象的平均大小,如果不大于,则直接full gc.
  • 由eden区和from survivor区 复制到 to survivor区的对象如果大于to区的可用空间,则直接转存至老年代,此时老年代空间不足,则full gc
  • survivor区对象年龄达到阈值,转存老年代,老年代空间不足,full gc。
  • survivor区存在某一年龄的对象超过至少一半,则大于等于此年龄的对象,转存老年代,老年代空间不足,则触发full gc.

问如何从20M文件读取中间数据
不会

问哪个设计模式用了反射
代理模式(这个居然没答出来。。。)

问单例模式
单例模式是保证系统实力唯一性的重要手段。单例模式首先通过将类的实例化方法私有化来防止程序通过其他方式创建该类的实例,然后通过提供一个全局唯一获取该类实例的方法帮助用户获取类的实例,用户只需也只能通过调用该方法获取类的实例。

单例模式的设计保证了一个类在整个系统中同一时刻只有一个实例存在,主要被用于一个全局类的对象在多个地方被使用并且对象的状态是全局变化的场景下。同时单例模式为系统资源的优化提供了很好的思路,频繁创建或销毁对象都会增加系统的资源消耗,而单例模式保障了整个系统只有一个对象能被使用,很好地节约了资源。

单例模式的实现很简单,每次在获取对象前都判断系统是否已经有这个单例对象,有则返回,无则创建。需要注意的是,单例模型的类构造器是私有的,只能由自身创建和销毁对象,不允许除了该类的其他程序使用new关键字创建对象及破坏单例模式。

发布了66 篇原创文章 · 获赞 302 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq_41112238/article/details/105069061
今日推荐