avatar

融盛Java面试题

1.1.Java是从(B)语言改进重新设计

1
A. Ada		B. C++		C. Pasacal		D. BASIC

1.2.以下声明合法的是(B)

1
2
A. default String s;		B. public final static native int w()
C. abstract double d; D. abstract final double hyperbolicCosine()

1.3.关于以下application的说明方法,正确的是(C)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class StaticStuff{

static int x = 10;

static {x += 5;}

public static void main(String[] args) {

System.out.println(x);

}

static {x /= 3;}

}
1
2
3
4
A. 4行与9行不能通过编译,因为缺少方法名和返回类型
B. 9行不能通过编译,因为只能有一个静态初始化器
C. 编译通过,执行结果为: x = 5
D. 编译通过,执行结果为: x = 3

1.4.以下哪个关键字可以用来伪对象加互斥锁? (D)

1
A. transient		B. static		C. serialize		D. synchronized

1.5.在关系模型中,实现”关系中不允许出现相同的元组”的约束是通过(B)

1
A. 候选键		B. 主键		C. 外键		D. 超键

1.6.在SQL语句中,与X between 20 and 30等价的表达式是(D)

1
A. X >= 20 and X < 30		B. X > 20 and x < 30		C. X > 20 and X <= 30		D. X >= 20 and X <= 30

1.7.下列标识符不合法的有(A,C,D)

1
A. new		B. $Usdollars		C. 1234		D. car.taxi

1.8.以下关于继承的叙述正确的是(A)

1
2
3
4
A. 在Java中只允许单一继承
B. 在Java中一个类只能实现一个接口
C. 在Java中一个类不能同时继承一个类和实现一个接口
D. 在Java中接口只允许单一继承

1.9.在教学管理中心,一名学生可以选择多门课程,一门课程可以被多名学生选择,这说明学生记录型与课程记录型之间的关系是(C)

1
A. 一对一		B. 一对多		C. 多对多		D. 未知

1.10.下述概念中不属于面向对象方法的是(D)

1
A. 对象、消息		B. 继承、多态		C. 类、封装		D. 过程调用

1.11.从数据库中删除表的命令是(A)

1
A. drop table		B. alter table		C. delete table		D. use

1.12.在调用方法时,若要使方法改变形参的值,可以(B)

1
2
3
4
A. 用基本数据类型作为参数
B. 用对象作为参数
C. 以上都对
D. 以上都不对

1.13.关于以下程序段,正确的说法是(C)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public static void main(String[] args) {

String s1 = "a" + "b";
String s2 = new String(s1);

if (s1 == s2){

System.out.println("== is succeeded");

}

if (s1.equals(s2)){

System.out.println(".equals is succeeded");

}
}
1
2
A. 两个判断都执行						B. 第一个判断执行,第二个判断不执行
C. 第一个判断不执行,第二个判断执行 D. 两个判断都不执行

1.14.下列说法正确的有(C)

1
2
3
4
A. class中的constructor不可省略
B. constructor必须与class同名,但方法不能与class同名
C. constructor在一个对象被new时执行
D. 一个class只能定义一个constructor

1.15.提供Java存取数据库能力的包是(A)

1
A. java.sql			B. java.awt			C. java.lang		D. java.swing

1.16.下列运算符合法的是(A)

1
A. &&			B. <>			C. if		D. :=

1.17.执行如下程序代码是(C)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public static void main(String[] args) {

int a = 0;
int c = 0;

do {

--c;
a = a - 1;

}while(a > 0);

System.out.println(c);

}
1
A. 0		B. 1		C. -1		D. 死循环

1.18.下列说法错误的有(B,C,D)

1
2
A. 数组是一种对象							B. 数组属于一种原生类
C. int number=[]={31,23,33,43,35,63} D. 数组的大小可以随意改变

1.19.下列语句正确的是(A)

1
2
A. 形式参数可被视为local variable				B. 形式参数可被字段修饰符修饰
C. 形式参数为方法被调用时,真正被传递的参数 D. 形式参数不可以是对象

1.20.下列哪种说法是正确的(D)

1
2
3
A. 实例方法可直接调用超类的实例方法				B. 实例方法可直接调用超类的类方法
C. 实例方法可直接调用其他类的实例方法
D. 实例方法可直接调用本类的类方法 子类是否可以调用父类要看父类相应方法的权限,而无论本类方法的权限如何,都可以调用

1.21.下列哪些语句关于内存回收的说明是正确的? (B)

1
2
A. 程序员必须创建一个线程来释放内存			B. 内存回收程序负责释放无用内存
C. 内存回收程序允许程序员直接释放内存 D. 内存回收程序可以在指定的时间释放内存对象

1.22.下列说法正确的有(A)

1
2
A. 环境变量可在编译source code时指定			B. 在编译程序时,所能指定的环境变量不包括class path
C. javac一次可同时编译数个Java源文件 D. javac.exe能指定编译结果要置于哪个目录(directory)

1.23.下列哪些语句关于内存回收的说明是正确的? (B)

1
2
A. abstract修饰符可修饰字段、方法和类			B. 抽象方法的body部分必须用一对大括号{ }包住
C. 声明抽象方法,大括号可有可无 D. 声明抽象方法不可写出大括号

2.简答题

2.1.doGet()方法和doPost()方法有什么区别?

1
2
1.get方法会把值对追加在请求的url后面,因为url对字符数目有限制,进而限制了用在客户端请求的参数值的数目,并且请求中的参数值是可见的,因此敏感信息不能用这种方式传递(路径传参,效率高,安全性差)
2.post方法通过把请求参数值放在请求体中来克服get方法的限制,因此,可以发送的参数的数目是没有限制的,最后,通过post请求传递的敏感信息对外部客户端是不可见的(实体传参,效率低,安全性好)

2.2.Java常见的异常类型

1
2
3
4
5
6
7
8
9
1.NullpointerException: 空指针异常
2.ClassCastException: 类型转换异常
3.ArrayIndexOutOfBoundsException: 数组下标越界异常
4.UnsupportedClassVersionErrorc: 不支持的类版本错误
5.NumberFormatException: 数字转换异常
6.IllegalArgumetException: 非法参数异常
7.IOExcetion: I/O流异常
8.ClassNotFoundException: 不能加载请求的类异常
9.IllegalAccessException: 对类的访问被拒绝异常

2.3.页面样式导入时,使用link和@import有什么区别?

1
2
3
link属于XHTML标签,除了加载CSS外,还能定义rel连接属性等作用,而@import是CSS提供的,只能用于加载CSS
页面被加载时,link会同时被加载,而@import引用的CSS会等页面被加载完再加载
@import是CSS 2.1提出的,只在IE5以上才能被识别,存在兼容问题,而link是XHTML标签,无兼容问题

2.4.Java有几种类型的流?

1
2
3
4
从输入输出方面来讲: Java中有输入流和输出流
从流的编码方式上来讲:Java中有字节流和字符流
字节流: InputStream、OutputStream
字符流: InputStreamReader、OutputStreamReder

2.5.字符流和字节流有什么区别?

1
2
3
4
1.字节流操作的基本单元为字节;字符流操作的基本单元为Unicode码元
2.字节流默认不使用缓冲区;字符流使用缓冲区
3.字节流通常用于处理二进制数据,实际上它可以处理任意类型的数据,但它不支持直接写入或读取Unicode码元;字符流通常处理文本数据,它支持写入及读取Unicode码元
4.底层设备永远只接受字节数据,有时候要写字符串到底层设备,需要将字符串转成字节再进行写入;字符流是字节流的包装,字符流则是直接接受字符串,它内部将串转成字节,再写入底层设备,这为我们向IO设别写入或读取字符串提供了一点点方便

2.6.varchar(N)或char(N)中N的含义是什么?

1
字符个数,不是字节大小

2.7.内联接,外联接的区别

1
2
1.内连接只产生所有表中存在匹配的记录,最常见的就是我们常用的where语句连接,两边的表返回的都是匹配的记录
2.外连接是不对称连接,分为左联接和右联接,应该说他们的语法都是一样的,只是一个左,一个右内,结果是:相匹配的左(右)部的表的记录都出现在结果集中,而另一部分(满足前一条原则下)有匹配显示记录,无匹配则是显示NULL,可以用where过滤不是null的或是null的,相当于只满足一边返回匹配值

2.8.Java中为什么会出现空指针异常?

1
2
3
1.指针就是Java中的对象的引用;比如String s;s就是指针
2.空指针就是指针的内容为空;比如上面的s,如果令它指向null,就是空指针
3.空指针异常就是一个指针是空指针,你还要去操作它,既然它指向的是空对象,它就不能使用这个对象的方法;比如上面的s假如为null,你还要用s的方法,比如s.equals( String x);那么就会产生空指针异常

2.9.什么是Java序列化,如何实现Java序列化?

1
2
1.序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化(将对象转换成二进制);可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间,序列化是为了解决在对对象流进行读写操作时所引发的问题;把对象转换为字节序列的过程称为对象的序列化
2.实现Serializable接口

2.10.Spring的@Autowired与@Resource的区别?

1
2
相同点: @Resource的作用相当于@Autowired,均可标注在字段或属性的setter方法上
不同点: @Autowired默认按类型装配 ,依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,也可以使用名称装配,配合@Qualifier注解;@Resource 默认按名称进行装配,通过name属性进行指定

2.11.请写出Spring中几种常用的注解,并简单说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
1、声明bean的注解
@Component 组件,没有明确的角色
@Service 在业务逻辑层使用(service层)
@Repository 在数据访问层使用(dao层)
@Controller 在展现层使用,控制器的声明(C)
2.注入bean的注解
@Autowired 由Spring提供
@Resource 由JSR-250提供
3.配置类相关注解
@Configuration 声明当前类为配置类,相当于xml形式的Spring配置,其中内部组合了@Component注解,表明这个类是一个bean(类上)
@Bean 注解在方法上,声明当前方法的返回值为一个bean,替代xml中的方式(方法上)
@ComponentScan 用于对Component进行扫描,相当于xml中的(类上)
4.@Value注解
@Value为属性注入值(属性上)

2.12.请说明Mybatis sql配置文件中$与#的区别?

1
2
3
$是将传入的数据直接显示生成sql语句
#是将传入的值当做字符串的形式
使用#可以很大程度上防止sql注入(语句的拼接),但是如果使用在order by中就需要使用$

2.13.假定系统中有一个User类,请写出实例化该类的几种方法

1
2
3
4
5
1.用new语句创建对象
2.使用Class类的newInstance方法
3.使用Constructor类的newInstance方法
4.调用对象的clone()方法
5.使用反序列化

3.编程题

3.1.利用冒泡排序给数组排序([6,10,88,39,12]),从大到小排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public static void main(String[] args) {

int[] i = {6,10,88,39,12};

for (int i1 = 0; i1 < i.length; i1++) {
for (int i2 = 0; i2 < i.length -1; i2++) {

if (i[i2] < i[i2 + 1]){

int x = i[i2];
i[i2] = i[i2 + 1];
i[i2 + 1] = x;

}
}
}

for (int x : i) {

System.out.print(x + " ");

}

System.out.println();

}

3.2.查询A(ID,Name)表中第31至40条数据,ID作为主键可能是不是连续增长的列

1
select id, name from a limit 3, 10;

3.3.查询表A中存在ID重复三次以上的记录

1
select * from A where id in(select id from A group by id having count(id) > 3)

3.4.计算字符串子串出现的次数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public static void main(String[] args) {

String s1 = "asdqweasdasd";
String s2 = "asd";

int count = 0;

for (int i = 0; i < s1.length() + 1 - s2.length(); i++) {

if (s1.startsWith(s2, i)){

count++;

}
}

System.out.println(count);

}

3.5.利用递归方法求5!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public static void main(String[] args) {

DiGui(5);

}

/* 构造递归函数 */
public static int DiGui(int n) {
if(n==1) {

return 1;

}else {

return DiGui(n - 1) * n;

}
}
文章作者: 123
文章链接: https://gao5805123.github.io/123/2020/05/12/%E8%9E%8D%E7%9B%9BJava%E9%9D%A2%E8%AF%95%E9%A2%98/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 123
打赏
  • 微信
    微信
  • 支付宝
    支付宝