写在前面

本节八股文是有针对性的重点练习

对HR/技术面试官之反问

  • 能不能谈谈你作为一个老员工对公司的感受?
  • 我觉得我这次表现得不是很好,你有什么建议或者评价给我吗?
  • 公司对新入职的员工的培养机制是什么样的?
  • 以您来看,这个岗位未来在公司内部的发展如何?
  • 团队现在面临的最大的挑战是什么?

青岛乾程

List的遍历方式有哪些?

  • 普通循环
  • 增强for循环
  • iterator遍历

谈谈你对AOP和IOC的理解

  • AOP是面向切面编程。

  • IOC是控制反转

中科创达

什么是封装?

封装是指把一个对象的状态信息(也就是属性)隐藏在对象内部,不允许外部对象直接访问对象的内部信息。但是可以提供一些可以被外界访问的方法来操作属性。

怎么打破一个类的封装?

通过继承

怎样得到封装后对象的方法属性?

通过内置函数来访问。任何要访问类中私有成员变量的类都要通过这些getter和setter方法。

抽象类和接口区别和共同点?

区别:

  • 接口中的成员变量只能是 public static final 类型的,不能被修改且必须有初始值,而抽象类的成员变量默认 default,可在子类中被重新定义,也可被重新赋值。
  • 一个类只能继承一个类,但是可以实现多个接口。
  • 接口主要用于对类的行为进行约束,你实现了某个接口就具有了对应的行为。抽象类主要用于代码复用,强调的是所属关系。

共同点:

  • 都可以包含抽象方法。
  • 都不能被实例化。

什么是继承?

举个例子,小明小红都是科大的学生,他们共享学生的特性(班级,学号),我们就可以把这部分共同点抽象出一个父类来,班级和学号这种共同的属性就在父类中。小明和小红通过继承父类,就可以拥有班级和学号的属性。而小明和小红也有不同的地方,比如小明每天早餐都吃包子,小红每天早餐都吃烧麦,这两个不同的行为可以分别在子类中体现。这就是继承。

集成的特点:

  • 子类可以拥有自己属性和方法,即子类可以对父类进行扩展。
  • 子类拥有父类对象所有的属性和方法(包括私有属性和私有方法),但是父类中的私有属性和方法子类是无法访问,只是拥有
  • 子类可以用自己的方式实现父类的方法。

做项目的时候遇见的一些异常

  • JDBC错误。看报错日志,如果出现这几个字,基本上是因为没连接数据库。
  • 500错误。Tomcat没有配置相应的lib,用maven导jar包的话,也需要在tomcat上lib文件里导入相同的jar包。
  • 400错误。前端传递的数据的字段名和后端实体类无法匹配,无法封装。
  • 坑爹的500错误。这个错误折磨我很多次了,反复横跳。最多的原因在于,如果后端传递的值不是对象,而是单个的数据,那么传递的参数名必须要和实体类的属性名匹配,由于Spring托管,如果名字不匹配根本找不到对应的Service操作。

为什么使用单例模式,单例模式的优点

Java Singleton模式就为我们提供了这样实现的可能。使用Singleton的好处还在于可以节省内存,因为它限制了实例的个数,

有利于Java垃圾回收(garbage collection)。

单例模式:它的核心结构只包含一个被称为单例的特殊类。它的目的是保证一个类仅有一个实例,并提供一个访问它的全局访问点

优点:

  • 控制资源的使用,通过线程同步来控制资源的并发访问;
  • 控制实例产生的数量,达到节约资源的目的。
  • 作为通信媒介使用,也就是数据共享。

ArrayList的底层 得到ArrayList的某个值

  • ArrayList 底层使用的是 Object 数组

  • 通过get(index)方法来获取,index是索引

For的迭代器中,删除添加,ArrayList的某个索引会出现问题?

在通过迭代器来遍历集合元素的同时,增加或者删除集合中的元素,有可能会导致某个元素被重复遍历或遍历不到。

什么是内存泄漏?

  • 不再会被使用的对象的内存不能被回收,就是内存泄露。
  • 如果长生命周期的对象持有短生命周期的引用,就很可能会出现内存泄露

ArrayList字符串进行字符串反转方法

1
2
3
4
5
6
7
8
ArrayList aList = new ArrayList();
//Add elements to ArrayList object
aList.add("1");
aList.add("2");
aList.add("3");
aList.add("4");
aList.add("5");
Collections.reverse(aList);