java后端实习生面试题目
1、编程题:java从10000到99999找到AABB类型
public class Test1 { public static void main(String[] args) { String str; for (int i = 10000; i < 100000; i++) { str = String.valueOf(i); if (str.charAt(0) == str.charAt(1) && str.charAt(2) != str.charAt(1) && str.charAt(3) != str.charAt(2) && str.charAt(3) == str.charAt(4)) { System.out.println(str); } } } }
转换成字符串,然后直接根据要求进行判断即可
2、数据库的基本特点是。
A.(1)数据可以共享(或数据结构化) (2)数据独立性
(3)数据冗余大,易移植(4)统一管理和控制
B.(1)数据可以共享(或数据结构化) (2)数据独立性
(3)数据冗余小,易扩充(4)统一管理和控制
C.(1)数据可以共享(或数据结构化) (2)数据互换性
(3)数据冗余小,易扩充 (4)统一管理和控制
D.(1)数据非结构化(2)数据独立性
(3)数据冗余小,易扩充(4)统一管理和控制
answer:B吧
1.数据结构化 数据之间具有联系,面向整个系统。 2.数据的共享性高,冗余度低,易扩充 3.数据独立性高 4.数据由DBMS统一管理和控制
3、Java 中的构造器链是什么?
当你从一个构造器中调用另一个构造器,就是Java 中的构造器链。这种情况只在重载了类的构造器的时候才会出现。
4、JRE、JDK、JVM 及 JIT 之间有什么不同?
JRE 代表 Java 运行时(Java run-time),是运行 Java 引用所必须的。JDK 代表 Java 开发工具(Java development kit),是 Java 程序的开发工具,如 Java 编译器,它也包含 JRE。JVM 代表 Java 虚拟机(Java virtual machine),它的责任是运行 Java 应用。JIT 代表即时编译(Just In Time compilation),当代码执行的次数超过一定的阈值时,会将 Java 字节码转换为本地代码,如,主要的热点代码会被准换为本地代码,这样有利大幅度提高 Java 应用的性能。
5、数据库有时候会产生数据不一致的原因是:
answer:数据不一致性是指数据的矛盾性、不相容性。
产生数据不一致的原因主要有以下三种:一是由于数据冗余造成的;二是由于并发控制不当造成的;三是由于各种故障、错误造成的。
根本原因:数据冗余
6、3*0.1 == 0.3 将会返回什么?true 还是 false?
false,因为有些浮点数不能完全精确的表示出来。
7、使用SQL语句进行分组检索时,为了去掉不满足条件的分组,应当 ______。
A.使用WHERE子句
B.在GROUP BY后面使用HAVING子句
C.先使用WHERE子句,再使用HAVING子句。
D.先使用HAVING子句,再使用WHERE子句
answer:在SQL SELECT语句中,GROUPBY短语用作数据分组的条件,HAVING子句紧跟GROUP BY语句之后,作为进一步的分组条件,且不能单独存在。
8、什么是数据库的完整性约束条件
answer:储在数据库中的所有数据值均正确的状态。
如果数据库中存储有不正确的数据值,
则该数据库称为已丧失数据完整性。 数据完整性
(Data Integrity)是指数据的精确性(Accuracy) 和可靠性(Reliability)。它是应防止数据库中存在不符合语义规定的...
9、外键必须是另一个表的主键吗?
answer:
不一定是主键,但必须是唯一性索引。
主键约束和唯一性约束都是唯一性索引。
10、在WHERE语句中,以下哪个操作符可以取代OR?
SELECT stu_no,stu_name FROM student WHERE stu_no =1001 OR stu_no =1009; 在WHERE语句中,以下哪个操作符可以取代OR? A. IN B. BETWEEN …… C. LIKE D. <= E. >=
answer:在sql里面 or可以取代in in也可以取代or 但是or消耗的资源要小于in 所以一般情况下面 推荐使用or
11、32 位和 64 位的 JVM,int 类型变量的长度是多数?
32 位和 64 位的 JVM 中,int 类型变量的长度是相同的,都是 32 位或者 4 个字节。
12、我们能将 int 强制转换为 byte 类型的变量吗?如果该值大于 byte 类型的范围,将会出现什么现象?
是的,我们可以做强制转换,但是 Java 中 int 是 32 位的,而 byte 是 8 位的,所以,如果强制转化是,int 类型的高 24 位将会被丢弃,byte 类型的范围是从 -128 到 128。
13、你能保证 GC 执行吗?
不能,虽然你可以调用 System.gc() 或者 Runtime.gc(),但是没有办法保证 GC 的执行。
14、Java 中堆和栈有什么区别?
JVM 中堆和栈属于不同的内存区域,使用目的也不同。栈常用于保存方法帧和局部变量,而对象总是在堆上分配。栈通常都比堆小,也不会在多个线程之间共享,而堆被整个 JVM 的所有线程共享。
15、“a==b”和”a.equals(b)”有什么区别?
如果 a 和 b 都是对象,则 a==b 是比较两个对象的引用,只有当 a 和 b 指向的是堆中的同一个对象才会返回 true,而 a.equals(b) 是进行逻辑比较,所以通常需要重写该方法来提供逻辑一致性的比较。例如,String 类重写 equals() 方法,所以可以用于两个不同对象,但是包含的字母相同的比较。
16、ArrayList 与 LinkedList 的不区别?
最明显的区别是 ArrrayList 底层的数据结构是数组,支持随机访问,而 LinkedList 的底层数据结构书链表,不支持随机访问。使用下标访问一个元素,ArrayList 的时间复杂度是 O(1),而 LinkedList 是 O(n)。
17、java 中怎么打印数组?
你可以使用 Arrays.toString() 和 Arrays.deepToString() 方法来打印数组。由于数组没有实现 toString() 方法,所以如果将数组传递给 System.out.println() 方法,将无法打印出数组的内容,但是 Arrays.toString() 可以打印每个元素。
18、Java 中的 TreeMap 是采用什么树实现的
Java 中的 TreeMap 是使用红黑树实现的。
19、手写一个除饿汉式,懒汉式的单例模式。
(这个自己写吧)
20、解释一下hibernate的延迟加载机制。
最直观的认识:在hibernate方法中,直接涉及到延迟加载的方法有get和load,使用get时,不会延迟加载,load则反之。另外,在many-to-one等关系配置中,我们也可以通过lazy属性设置是否延迟加载。(详细的自行百度。)
21、Java 中 ++ 操作符是线程安全的吗?
不是线程安全的操作。它涉及到多个指令,如读取变量值,增加,然后存储回内存,这个过程可能会出现多个线程交差。
22、3*0.1 == 0.3 将会返回什么?true 还是 false?
false,因为有些浮点数不能完全精确的表示出来
23、构造方法不能有返回值
24、Java 中的 LinkedList 是单向链表还是双向链表?
是双向链表,你可以检查 JDK 的源码。在 Eclipse,你可以使用快捷键 Ctrl + T,直接在编辑器中打开该类。
25、Java 中的 TreeMap 是采用什么树实现的?
Java 中的 TreeMap 是使用红黑树实现的。
26、wait()和sleep()的区别
sleep来自Thread类,和wait来自Object类
调用sleep()方法的过程中,线程不会释放对象锁。而 调用 wait 方法线程会释放对象锁
sleep睡眠后不出让系统资源,wait让出系统资源其他线程可以占用CPU
sleep(milliseconds)需要指定一个睡眠时间,时间一到会自动唤醒
27、JAVA 中堆和栈的区别,说下java 的内存机制
a.基本数据类型比变量和对象的引用都是在栈分配的
b.堆内存用来存放由new创建的对象和数组
c.类变量(static修饰的变量),程序在一加载的时候就在堆中为类变量分配内存,堆中的内存地址存放在栈中
d.实例变量:当你使用java关键字new的时候,系统在堆中开辟并不一定是连续的空间分配给变量,是根据零散的堆内存地址,通过哈希算法换算为一长串数字以表征这个变量在堆中的”物理位置”,实例变量的生命周期–当实例变量的引用丢失后,将被GC(垃圾回收器)列入可回收“名单”中,但并不是马上就释放堆中内存
e.局部变量: 由声明在某方法,或某代码段里(比如for循环),执行到它的时候在栈中开辟内存,当局部变量一但脱离作用域,内存立即释放
28、JAVA多态的实现原理
a.抽象的来讲,多态的意思就是同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)
b.实现的原理是动态绑定,程序调用的方法在运行期才动态绑定,追溯源码可以发现,JVM 通过参数的自动转型来找到合适的办法。
29、CAS(Compare And Swap) 无锁算法:
CAS是乐观锁技术,当多个线程尝试使用CAS同时更新同一个变量时,只有其中一个线程能更新变量的值,而其它线程都失败,失败的线程并不会被挂起,而是被告知这次竞争中失败,并可以再次尝试。CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。