问题
1做一下自我介绍吧
2介绍一下你的顺带手项目,遇到什么问题,怎么解决?(图片上传我这里没有说清楚)
3你的项目用框架做的?哦,servlet,那你说一下servlet的生命周期吧?
4考察点:arraylist和linkedlist的源码问你一下java的基础问题吧,说一下java集合吧,有哪几个实现类?arraylist和linkedlist的区别?增删改查各自的时间复杂度?set中的元素可以重复吗?怎么将一个重复的arraylist去重?
5考察点:equals()怎么实现的说一下equals()吧?怎么比较两个对象是不是相同的?(通过看引用是否只指向同一块内存)
equals方法可以重写吗?如果要比较两个student对象是否相等,怎么比较?直接用equals吗?要是用equals那么怎么重写?
说一下图片上传怎么解决的?说一下怎么解决的跨域问题?
8说一下那个抽象类和接口的区别吧?
9说一下java的异常吧?怎么分类的?(error/exception)说一下编译时异常和运行时异常的区别?
10重载和重写的区别?
6说一下数据库吧?
说一下那个数据库的左连接和右连接的区别?a表id属性,b表的外键是a_id,a表存在一条记录a_id=1,b表存在2条记录a_id=1,那么进行左链接,查询出来的是什么?
假设统计平均成绩,怎么用一个查询查询出女生的平均成绩和男生的平均成绩?groupby?
7说一下你的程序的部署环境吧?怎么部署的?
最后我问了一下面试官什么建议?
面试官很好,对我说,你的基础不好,应该多学习基础?最重要的是应该多写代码?
多写,多想,多用,多思考,举一反三?多敲一些基础的代码,
-----------------------------------------------------------------------------------------------------------
6说一下数据库吧?
说一下那个数据库的左连接和右连接的区别?a表id属性,b表的外键是a_id,a表存在一条记录a_id=1,b表存在2条记录a_id=1,那么进行左链接,查询出来的是什么?
假设统计平均成绩,怎么用一个查询查询出女生的平均成绩和男生的平均成绩?groupby?
嗯~ o(* ̄▽ ̄*)o,这里呀,说一下聚合函数哦,聚合函数对一组值执行计算后返回单一的值,聚合函数还经常和group by子句一起使用
sum呢一般用于统计某列的和,count呢一般用于统计行数
所以说怎么用一个查询查询出女生的平均成绩和男生的平均成绩?groupby?
5说一下equals()吧?怎么比较两个对象是不是相同的
equals方法可以重写吗?如果要比较两个student对象是否相等,怎么比较?直接用equals吗?要是用equals那么怎么重写?
==:
== 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象。比较的是真正意义上的指针操作。
1、比较的是操作符两端的操作数是否是同一个对象。
2、两边的操作数必须是同一类型的(可以是父子类之间)才能编译通过。
3、比较的是地址,如果是具体的阿拉伯数字的比较,值相等则为true,如:
int a=10 与 long b=10L 与 double c=10.0都是相同的(为true),因为他们都指向地址为10的堆。
equals:
equals用来比较的是两个对象的内容是否相等,由于所有的类都是继承自java.lang.Object类的,所以适用于所有对象,如果没有对该方法进行覆盖的话,调用的仍然是Object类中的方法,而Object中的equals方法返回的却是==的判断。
equals和==的区别
equals方法最初是在所有类的基类Object中进行定义的,源码是
1 2 3 |
|
由equals的源码可以看出这里定义的equals与==是等效的(Object类中的equals没什么区别),不同的原因就在于有些类(像String、Integer等类)对equals进行了重写,但是没有对equals进行重写的类(比如我们自己写的类)就只能从Object类中继承equals方法,其equals方法与==就也是等效的,除非我们在此类中重写equals。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
补充说明一下==和equals
首先先上源码
1object的equals方法源码
/*这里比较的是对象的内存地址,跟String.equals方法不同,它比较的只是对象的值*/
public boolean equals(Object obj) { return (this == obj); }
2String的equals方法源码
public boolean equals(Object anObject) {
//判断地址值是否相等
if (this == anObject) {
return true;
}
//判断对象类型是否为String
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
//判断长度是否相等
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
//每一个字符都必须相同
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
从这两个类中我们可以看出,所有类的祖先类object中的equals()方法是实现的==,及判断两个引用是否指向同一块内存区域,判断两个引用是否是指向同一个实例的,也就是比较内存地址是否相同
而所有的类都是在继承object这个类的,因此如果子类没有对object父类的equals方法进行重写,那么子类在调用时依旧比较的是地址是否相同。但是如果子类重写父类的equals()方法,那么比较的内容就是另一回事了,那就看你子类的equals方法是怎么重写的了,向string重写的时候,就是先比较地址,如果地址不同就比较值,所以就看需求了,
3你的项目用框架做的?哦,servlet,那你说一下servlet的生命周期吧?
通过调用 init () 方法进行初始化;调用 service() 方法来处理客户端的请求;通过调用 destroy() 方法终止(结束)Servlet 是由 JVM 的垃圾回收器进行垃圾回收的;
8说一下那个抽象类和接口的区别吧?
一个类可以实现多个接口,但最多只能实现一个抽象类。
接口中的实例变量是默认是final的,并且只能用public,static,final修饰,static而抽象类中的实例变量则没有这以要求。
接口中的方法默认都是public的,而抽象类中的方法可以规定不同的作用域。
接口的实现必须实现所有的抽象方法(默认方法除外),而子类继承自抽象类可以不用实现所有的抽象方法。
接口中不能有构造方法,抽象类中可以有构造方法。
从设计层面上来讲:接口是对行为的规范,用于描述行 为的一种抽象,而抽象类是对类的抽象,是一种模板式的设计,同时抽象类的继承含有a is b的意义在里面。
抽象类特点:
抽象类只是用来派生子类的,不能用来创建抽象类的对象
1)不能被实例化(子类继承后可实例化子类)
2)充当父类
3)有属性,方法,构造方法,抽象方法
4)抽象类中抽象方法必须都被重写
5)子类有且只有一个父类
接口特点:
1)不能被实例化
2)充当父接口
3)有属性,默认方法(有函数体)抽象方法(无函数体)(属性必须初始化,且不能更改)
4)子类可以实现多个接口
抽象类(abstract class):
1:abstract 关键字修饰,并且没有方法体
2:抽象类不能直接创建实例
3:抽象类只能被继承,一个具体类继承一个抽象类,必须实现所有抽象方法
接口(interface):
1:实现接口的不一定要实现接口里定义的所有方法,default和static里的默认方法可以不用实现
2:接口可以实现多重继承
区别:
1:抽象类和接口都不能够实例化,但可以定义抽象类和接口类型的引用
2:一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类
4:抽象类中的成员可以是private、默认、protected、public的,而接口中的成员全都是public的
5:抽象类中可以定义成员变量,而接口中定义的成员变量实际上都是常量。有抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法
6.接口可以继承接口,甚至可以继承多个接口;类可以实现多个接口,只能继承一个类。类只是单继承,而接口是多继承!
-------------------------------------------------------------------------------------
可以创建final类的对象的。。。。。。。。。。。。。。。。。。。。。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
10重载和重写的区别?
重载的时候java只认识函数名,因此重载是不以返回值为依据的