Java面试题

1、 内存优化:声明变量时在赋值时内存才会分配空间
jdk7之前包括7,sort方法效率较低,通常自己写排序算法
jdk8之后,sort方法效率得到了较高的优化,通常直接使用sort方法

java数据结构:
枚举(Enumeration)、位集合(BitSet)、向量(Vector)、栈(Stack)、字典(Dictionary)、属性(Properties)、哈希表(HashTable)
2、 接口可以继承接口
3、 抽象类可以实现接口
4、 抽象类可以继承抽象类

&与&&的区别
&&:如果符号左边条件不成立,则不判断符号右边条件成不成立,直接输出false;
(逻辑与是按照逻辑去执行程序)
&:如果符号左边条件不成立,则继续判断符号右边条件成不成立,再输出false;
(按位与是按照程序的执行顺序是执行程序)

if-else 结构与三目运算的区别:
三目运算有返回值,if-else无返回值

运算符优先级:
()~ !~ 算数运算符 ~ 比较运算符 ~ && ~ || ~赋值运算符 )
For循环和while和do-while的区别:
For:结构紧凑,内存使用更合理,可预知循环次数
While:语法宽松,使用各种循环,兼容性强,无法预知循环次数
Do-while:至少执行一次循环体

6、 (注意:在一个类中写有参构造方法必须配一个无参构造方法)
7、 static{ }静态构造块——{ }构造块——构造方法——方法
面试题:继承关系中各种代码块的运行顺序:(双亲委派)

父类的静态块
子类的静态块
父类的构造块
父类的构造方法
子类的构造块
子类的构造方法
8、 继承的优先级
i. 父类的静态块子类的静态块
ii. 父类的构造块,父类的构造方法
iii. 子类的构造块;子类的构造方法

9、 重写和重载的区别:
@Overload :重载:
1、发生在一个类里,方法名相同,参数类型、个数、顺序 至少有一个不同
2、返回值类型可以相同也可以不同
@Override :重写:
1、发生在父类与子类中间,
2、子类重写父类的方法(方法名,参数列表,返回类型都相同)
3、子类方法的修饰符不能小于父类
4、重写的方法不能跑出异常

7、ArrayList 和 LinkedList 的区别
LinkedList:链表集合;
特点:链表(有头有尾)查询慢,增删快,遍历慢,线程不安全,效率高
ArrayList:数组型的集合,存储引用数据类型,
特点:查询快,遍历效率高,增删慢,线程不安全

10、 String和StringBuffer区别:
1、 内存操作不同(String每次进行更改都会产生新的对象,StringBuffer实在原有的对象上进行更改)
2、 String是一个被final修饰的引用数据类型,他的值一旦创建就不能更改
11、 StringBuffer和StringBuilder区别:
StringBuffer多线程安全,所以对象操作会比较慢,进行并发处理时,会有阻塞现象
StringBuilder单线程不安全,但速度有优势

12、 Date = new Date();
13、 // 1970.1.1 8:00 格林威治时间(所有硬件上的时间都是以这个为参照物)
14、 . getTime() 和 . currentTimeMillis() :获取当前系统的毫米数
15、 New SimpleDateFormat (“yyyy-MM-dd HH:dd:ss”) :时间格式化类
16、 . format(date) :格式化时间

JDK1.8新特性:
17、 Lambda表达式:本质上是一段匿名内部类(面向过程)
18、 新时间日期API
19、 红黑树:特殊的二叉查找树(任意一个节点所包含的键值,大于等于左孩子的键值,小于等于右孩子的键值)
20、 8、集合
21、 集合使用.size获取集合长度
22、 使用集合必须使用泛型(泛型:集合存放数据的类型)
23、 为什么使用泛型:当把一个对象放入集合中,集合不会记住此对象的类型,再次取出次对象是时,该对象的类型会变成Object,但运行时类型仍为其本身类型

笔试题

1、重载(overload)和重写(override)的区别?
重载:发生在一个类里,方法名相同,参数类型不同

  1. 方法名相同,参数列表【参数的顺序,类型,个数】不同

  2. 重载与方法的返回值无关,发生在同一类中

  3. 是编译时的多态性
    重写:发生在父类子类中间,子类重写父类的方法

  4. 参数列表和返回值类型必须相同

  5. 重写发生在子类与父类之间

  6. 子类抛出的异常不能超过父类相应方法抛出的异常

  7. 子类方法的的访问级别不能低于父类相应方法的访问级别

  8. 是运行时的多态性

  9. 被fainal修饰的类不能被继承,

  10. 被fainal修饰的方法不能被重写

  11. 被final修饰的变量不能被修改

2、short s1=1; s1=s1+1;有什么错? Short s1=1;s1+=1;有什么错?
赋值表达式等号两bai侧的转换的规则是右侧的向du左侧的看齐,即右侧
表达式zhi要转换到和左边的类型一样。
short s1 = 1; s1 = s1 + 1;错! s1 + 1,s1是short类型,1是int型,s1会自动转换为int型的1,与1相加后,得到int型的2,要向左侧的short类型的s1看齐,即需要通过强制类型转换。正确写法:s1 = (short) (s1 + 1);

short s1 = 1; s1 += 1;错! 执行s1+=1;其实执行的是s1 = (short) (s1 + 1); 其中会有一个强制转换的过程。
3、请写出不使用中间变量交换两个数(a=1,b=2)的过程?

	    	int a=1;
	   	int b=2;
		  //		a=a+b;
//		b=a-b;
//		a=a-b;	
//		System.out.println(a+" "+b);
		 a = a^b;
		 b = a^b;
		 a = a^b;
		System.out.println(a+" "+b);

4、转发(forward)和重定向(redirect)的区别?

重定向会改变URL地址,请求转发不会
重定向可以用URL绝对路径访问其他web服务器的资源,而请求转发只能在一个web应用程序内进行资源转发
重定向效率低,相当于再一次请求,请求转发跳转仅发生在服务器端。

5、JSP有哪些内置对象?作用分别是什么?

request 用户端请求,此请求会包含来自GET/POST请求的参数
response 网页传回用户端的回应
pageContext 网页的属性是在这里管理
session 与请求有关的会话期
application servlet 正在执行的内容
out 用来传送回应的输出
config servlet的构架部件
page JSP网页本身
exception 针对错误网页,未捕捉的例外

6、MyBatis中使用#和$书写占位符有什么区别?

#将传入的数据都当成一个字符串,会对传入的数据自动加上引号; 将 传 入 的 数 据 直 接 显 示 生 成 在 S Q L 中 。 注 意 : 使 用 将传入的数据直接显示生成在SQL中。 注意:使用 SQL使占位符可能会导致SQL注射攻击,能用#的地方就不要使用 , 写 o r d e r b y 子 句 的 时 候 应 该 用 ,写order by子句的时候应该用 orderby而不是#

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坏女人净画饼

原创辛苦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值