Java SE
-
面向对象有哪些特性?说说你的理解。
封装:把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。
继承:继承是从已有类得到继承信息创建新类的过程。
多态:多态指同一个实体同时具有多种形式。在面向对象语言中,接口的多种不同的实现方式即为多态。
抽象:将一类对象的共同特征抽象构造成类; -
访问权限修饰符public、private、protected, 以及不写(默认)时的区别?
-
& 与 && 的区别?
&: 按位与、逻辑与;
&&: 短路与运算;&& 左边是false则短路。 -
Java如何跳出多重嵌套循环?
先标记,然后break 标记here: for (int i = 1; i <= 4; i++) { a1 = "外层循环第"+i+"层"; for (int j = 1; j <= 4; j++) { b1 = "内层循环第"+j+"层"; if (2 == j & 2 == i) { break here; } } }
-
重写equals()方法要重写hashCode()方法吗?为什么?
equals与hashCode都是Obeject类的基本方法;假如在覆盖了equals方法的类中,没有覆盖hashcode,会导致该类无法结合基于散列集合(HashMap,HashSet,HashTable)一起正常运作。 -
两个对象值相同 (x.equals(y) == true) ,但却可有不同的hashCode,这句话对不对?
错。Java 对于eqauls 方法和 hashCode 方法是这样规定的:
(1)如果两个对象相同(equals 方法返回 true),那么它们的hashCode 值一定要相同;
(2)如果两个对象的 hashCode 相同,它们并不一定相同。当然,你未必要按照要求去做,但是如果你违背了上述原则就会发现在使用容器时,相同的对象可以出现在 Set 集合中,同时增加新元素的效率会大大下降(对于使用哈希存储的系统,如果哈希码频繁的冲突将会造成存取性能急剧下降)。
equals方法要满足:自反性、null性、对称性、传递性、一致性。 -
为什么函数不能根据返回类型来区分重载?
因为方法调用时不能指定返回值类型。 -
char 型变量中能不能存储一个中文汉字,为什么?
char 类型可以存储一个中文汉字,因为Java中使用的编码是 Unicode(不选择任何特定的编码,直接使用字符在字符集中的编号,这是统一的唯一方法),一个 char 类型占 2 个字节(16 比特),所以放一个中文是没问题的。 -
抽象的(abstract)方法是否可同时是静态的(static), 是否可同时是本地方法 (native),是否可同时被synchronized?
都不能。抽象方法需要子类重写,而静态的方法是无法被重写的,因此二者是矛盾的。本地方法是由 本地代码(如 C 代码)实现的方法,而抽象方法是没有实现的,也是矛盾的。synchronized 和方法的实现细节有关,抽象方法不涉及实现细节,因此也是相互矛盾的。 -
==
和equals的区别?
equals和== 最大的区别是一个是方法一个是运算符。
==:如果比较的对象是基本数据类型,则比较的是数值是否相等;如果比较的是引用数据类型,则比较的是对象的地址值是否相等。
equals():用来比较方法两个对象的内容是否相等。
注意:equals 方法不能用于基本数据类型的变量,如果没有对 equals 方法进行重写,则比较的是引用类型的变量所指向的对象的地址。 -
Java中异常分为哪些种类?
编译时异常;
运行时异常; -
error和exception的区别?
Error类和Exception类的父类都是Throwable类,他们的区别如下。
Error类一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢出等。对于这类错误的导致的应用程序中断,仅靠程序本身无法恢复和和预防,遇到这样的错误,建议让程序终止。
Exception类表示程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止异常。 -
java异常处理机制?
throws、try catch -
String 、StringBuilder 、StringBuffer的区别?
(1)、可变不可变
String:字符串常量,在修改时不会改变自身;若修改,等于重新生成新的字符串对象。
StringBuffer:在修改时会改变对象自身,每次操作都是对StringBuffer对象本身进行修改,不是生成新的对
象;使用场景:对字符串经常改变情况下,主要方法:append(),insert()等。
(2)、线程是否安全
String:对象定义后不可变,线程安全。
StringBuffer:是线程安全的(对调用方法加入同步锁),执行效率较慢,适用于多线程下操作字符串缓冲区
大量数据。
StringBuilder:是线程不安全的,适用于单线程下操作字符串缓冲区大量数据。
(3)、共同点
StringBuilder与StringBuffer有公共父类AbstractStringBuilder(抽象类)。 StringBuilder、StringBuffer的方法都会调用AbstractStringBuilder中的公共方法,如super.append(…)。只是 StringBuffer 会在方法上加 synchronized 关键字,进行同步。最后,如果程序不是多线程的,那么使用StringBuilder效率高于StringBuffer。 -
什么情况下用“+”运算符进行字符串连接比调用StringBuffer/StringBuilder 对象的append方法连接字符串性能更好?
在 Java 中无论使用何种方式进行字符串连接,实际上都使用的是 StringBuilder。
多线程
- 线程的创建方式?
- 线程池的原理?
- 介绍一下几种线程池?
- synchronized与volitile的区别?
- concurrentHashMap实现原理?
- 乐观锁与悲观锁?
- 什么是死锁?死锁的条件?
- wait与sleep的区别?
Java高级
- 什么是反射?
- Java的动态代理?
- 你所知道的设计模式有哪些?
- JVM内存模型?
- 垃圾回收机制?
- 对象创建过程?
Java Web
- 原生jdbc的实现过程?
- 为什么要使用PreparedStatement?
- TCP三次握手与四次挥手?
- GET与POST区别?
- 转发与重定向区别?
- 常见网络状态码?
接下来总结SSM、然后Springboot+SpringCloud+Redis+Shiro、然后Linux+大数据框架、机器学习。找个好工作真难啊,2020届应届生校招体验极差。。。