文章目录
-
-
- 什么是面向对象?
- 1. 描述一下值传递和引用传递的区别
- 2. ==和equals区别?String的equals方法是如何重写的?为什么要重写equals方法?为什么要重写hashCode方法?
- 3. String s1 = new String("abc"); String s2 = "abc"; s1 == s2? 语句1在内存中创建了几个对象?
- 4. String为什么是不可变的?jdk源码中的String如何定义的?为什么这么设计?
- 4. 请描述一下static关键字和final关键字的用法。
- 5. 接口和抽象类的区别是什么?
- 6. 重载和重写的区别?
- 7. 面向对象的三大特性,谈谈你对xx的理解
- 8. 请写出下面程序的输出结果 (考察的是基本类型的转换,及原码反码补码的运算)
- 9. byte的取值范围是多少?怎么计算出来的?
- 10. hashMap相关
- 11. Integer缓存池
- 12. UTF-8和Unicode的关系
- 13. 项目为UTF-8环境,char c = ‘中’,是否合法?
- 14. Arrays.asList获得的List使用时需要注意什么
- 15. Collection和Collections区别?
- 16. 你知道fail-fast 和 fail-safe吗?
- 17. ArrayList和LinkedList和Vector的区别?
- 18. Set和List区别?Set如何保证元素不重复?
- 19. UTF-8与GBK互转,为什么会乱码
- 20. 重载和重写的区别
- 21. 为什么Java是解释性语言
- 22. Mybatis执行流程
- 23. Mybatis缓存
- 24. Mybatis用到的设计模式
- 25. ConcurrentHashMap 1.7和1.8的区别
- 26. 地址栏输入URL发生了什么
- 27. 组合和聚合的区别:
- 28. OSI七层模型
- 29. 讲一下CMS垃圾回收器
- 30. Spring事务管理原理?
- 31. JDK动态代理和GClib动态代理
-
什么是面向对象?
这个问题其实是最不好回答的,因为这个东西甚至就可以上升到哲学方面…,回答的好与不好很能看出Java学的深浅,这里借用《Think in Java》这本书来说一下吧
- 万物皆对象
- 程序是对象的集合,它们通过发送消息来告知彼此所要做的。
- 每个对象都有自己的由其他对象所构成的存储。
- 每个对象都有其类型
- 而某-特定类型的所有对象都可以接收同样的消息。
1. 描述一下值传递和引用传递的区别
https://blog.csdn.net/qq_17806439/article/details/86075353
值传递:
方法调用时,实际参数把它的值传递给对应的形式参数,函数接收的是原始值的一个copy,此时内存中存在两个相等的基本类型,即实际参数和形式参数,后面方法中的操作都是对形参这个值的修改,不影响实际参数的值。
引用传递:
也称为传地址。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,函数接收的是原始值的内存地址;
在方法执行中,形参和实参内容相同,指向同一块内存地址,方法执行中对引用的操作将会影响到实际对象。
2. ==和equals区别?String的equals方法是如何重写的?为什么要重写equals方法?为什么要重写hashCode方法?
可参考:http://www.bimowu.com/kstudy-web/clienttopic/view.do?topicId=751
以及:Java 如何重写对象的 equals 方法和 hashCode 方法
3. String s1 = new String(“abc”); String s2 = “abc”; s1 == s2? 语句1在内存中创建了几个对象?
http://www.bimowu.com/kstudy-web/clienttopic/view.do?topicId=751
补充:
String str1 = "str";
String str2 = "ing";
String str3 = "str" + "ing";//常量池中的对象
String str4 = str1 + str2; //在堆上创建的新的对象
String str5 = "string";//常量池中的对象
System.out.println(str3 == str4);//false
System.out.println(str3 == str5);//true
System.out.println(str4 == str5);//false
String s1 = new String("计算机");
String s2 = s1.intern();
String s3 = "计算机";
System.out.println(s2);//计算机
System.out.println(s1 == s2);//false,因为一个是堆内存中的 String 对象一个是常量池中的 String 对象,
System.out.println(s3 == s2);//true,因为两个都是常量池中的 String 对象
尽量避免多个字符串拼接,因为这样会重新创建对象。如果需要改变字符串的话,可以使用 StringBuilder 或者 StringBuffer。
请着重掌握关于String的以下知识:
- String对"+"的重载
- String s = “a” + “b”,编译器会进行常量折叠(因为两个都是编译期常量,编译期可知),即变成 String s = “ab”
- 对于能够进行优化的(String s = “a” + 变量 等)用 StringBuilder 的 append() 方法替代,最后调用 toString() 方法 (底层就是一个 new String())
- 字符串拼接的几种方式和区别
- JDK 6和JDK 7中substring的原理及区别
- 对new String(“abc”)的理解
4. String为什么是不可变的?jdk源码中的String如何定义的?为什么这么设计?
https://blog.csdn.net/weixin_42447959/article/details/82598778
4. 请描述一下static关键字和final关键字的用法。
静态变量、静态方法、静态类
1.静态变量:
声明为static的静态变量实质上就是全局变量,当声明一个对象时,并不产生static变量的拷贝,而是该类所有实例变量共用同一个static变量。也就是说这个静态变量只加载一次,只分配一块储存空间。
2.静态方法:
声明为static的静态方法有以下几个特点:
(1)静态方法只能调用静态方法;
(2)静态方法只能访问静态数据;
(3)静态方法不能以任何方式引用this或super;
3.静态类:
通常一个普通类不允许声明为静态,只有一个内部类才可以(main方法就是一个典型),这时这个声明的静态类可以直接作为一个普通类来使用,而不需要实例一个外部类。
final的作用从变量、方法、类三个方面来理解、
final修饰的变量的值不能被修改,是一个常量;
final修饰的方法不能被重写;
final修饰的类不能被继承;
5. 接口和抽象类的区别是什么?
https://www.jianshu.com/p/c4f023d02f0c
6. 重载和重写的区别?
重载: 发生在同一个类中,方法名必须相同,参数类型不同、个数不同、顺序不同,方法返回值和访问修饰符可以不同,发生在编译时。
重写: 发生在父子类中,方法名、参数列表必须相同,返回值范围小于等于父类,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类;如果父类方法访问修饰符为private则子类就不能重写该方法。
7. 面向对象的三大特性,谈谈你对xx的理解
https://www.cnblogs.com/inspred/p/9526253.html
8. 请写出下面程序的输出结果 (考察的是基本类型的转换,及原码反码补码的运算)
public static void main(String[] args) {
// TODO Auto-generated method stub
int a=255;
System.out.println(Integer.toBinaryString(a));
System.out.println((byte) a);
}