面试总结
Posted sunjh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试总结相关的知识,希望对你有一定的参考价值。
这几天面试,忘记了很多东西,也发现自己很多不足,所以总结一下。
1.抽象
抽象类可以有非抽象方法;
抽象方法只有方法的声明,没有方法的实现(即没有方法体);
有抽象方法的类必定是抽象类;
抽象方法不能为private,final(final规定子类不能再覆盖它。abstract是专等着要别人来覆盖)或者static。
2.接口
java单继承多实现;
接口只能有抽象方法(不能实现)和final和staic修饰的变量。
3.二叉树的前序、中序和后序遍历
前序:根节点-左节点-右节点
中序:左节点-根节点-右节点
后序:左节点-右节点-根节点
4.ioc
控制反转,又称依赖注入,说的是一个类A要调用另一个类B,本来应该在类A里面创建B的实例的,控制权在A手里。现在用了Spring了,有了IOC,控制权就不在A手里了,而是交到Spring的IOC容器了,A要用到B,那Spring就把B分给A了。传统方式使用new来控制程序之间的关系,这种实现的方式会造成组件之间耦合(一个好的设计,不但要实现代码重用,还要将组件间关系解耦),使用ioc时,控制程序间关系的实现交给了外部的容器来完成,降低了耦合。
IoC的实现形式
属性注入(setter注入):
package com.spring.demo.entity; public class Programmer private String name; private String sex; // 在这里定义要依赖的computer属性,加上set方法 private Computer computer; public String getName() return name; public void setName(String name) this.name = name; public String getSex() return sex; public void setSex(String sex) this.sex = sex; public Computer getComputer() return computer; /** * 加上Setter方法 * */ public void setComputer(Computer computer) this.computer = computer;
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="programmer" class="com.spring.demo.entity.Programmer"> <property name="name" value="小李"></property> <property name="sex" value="男"></property> <property name="computer" ref="computer"></property> </bean> <bean id="computer" class="com.spring.demo2.entity.Computer"> <property name="brand" value="hp"></property> <property name="color" value="黑"></property> <property name="size" value="14"></property> </bean> </beans>
构造器注入:
package com.spring.demo1.entity; import com.spring.demo.entity.Computer; public class Programmer private Computer computer; public Programmer(Computer computer) this.computer = computer;
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="programmer" class="com.spring.demo1.entity.Programmer"> <constructor-arg ref="computer"></constructor-arg> </bean> <!-- 构造器里面没有name字段,只有value,是根据构造器的方法参数顺序来定义的 --> <bean id="computer" class="com.spring.demo3.entity.Computer"> <constructor-arg value="中兴"></constructor-arg> <constructor-arg value="黑色"></constructor-arg> <constructor-arg value="15寸"></constructor-arg> </bean> </beans>
自动装配:
package com.spring.demo02.entity; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component public class Programmer @Autowired Computer computer;
package com.spring.demo02.entity; import org.springframework.stereotype.Component; @Component public class Computer private String brand; private String color; private String size; public String getBrand() return brand; public void setBrand(String brand) this.brand = brand; public String getColor() return color; public void setColor(String color) this.color = color; public String getSize() return size; public void setSize(String size) this.size = size;
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <context:component-scan base-pakage="com.spring.demo02"> </beans>
Spring容器会把加了@Component的类实例化;在实际运行时,会给加了@Autowired的属性注入对应的实例。
5.子类继承父类执行顺序
父类静态代码块
子类静态代码块
父类代码块
父类构造方法
子类代码块
子类构造方法
解释:从.class 到JVM加载的时候,就执行static代码块和static变量,所以先执行静态代码块;创建对象的时候,调用了它的构造方法,所有子类的构造方法第一行的时候都隐含 super(),所以会先调用父类的构造方法,而每次在执行构造方法之前都会执行代码块;子类和main方法在同一个类中,如果在new子类对象之前main方法中有语句,那么顺序就是:静态、main()的语句、父类代码块、父类构造方法.....
注意:静态变量只执行一次
6.set和List的区别
Set集合中的对象不按特定方式排序,并且没有重复对象,Set的add()方法判断对象是否已经存在
List集合对象按索引位置排序,可以有重复对象,Collections.sort(list)方法用于对List中的对象进行排序
以上是关于面试总结的主要内容,如果未能解决你的问题,请参考以下文章