摘要:一、Spring 面试题 1. Spring 在 SSM 中起什么作用? Spring 是轻量级框架,作用是作为 Bean 工厂,用来管理 Bean 的声明周期和框架集成。 Spring 的两大核心:IOC/DI(控制反转/依赖注入):把 DAO 依赖注入到 service 层,service 层反
阅读全文
摘要:在Java中将String设计成不可变的是综合考虑到各种因素的结果,需要综合考虑内存、同步、数据结构以安全方面的考虑。 String被设计成不可变的主要目的是为了安全和高效。 1)字符串常量池的需要 字符串常量池是Java堆内存中的一个特殊的存储区域,当创建一个String对象时,加入此字符串值已经
阅读全文
摘要:此三个接口的声明如下: Statement用于执行不带参数的简单SQL语句,每次执行SQL语句时,数据库都要编译该SQL语句,以下是一个最简单的SQL语句 PreparedStatement表示预编译的SQL语句对象,用于执行带参数的预编译SQL语句。 CallableStatement提供了用来调
阅读全文
摘要:事务是数据库中一个但单独的执行单元(Unit),他通常由高级数据库操作语言(如SQL)或编程语言(如C++、Java)编写的用户程序的执行所引起。当在数据库中更改数据成功时,在事务中更改的数据便会提交,不再改变;否则,事务就取消或者回滚,更改无效。 事务必须满足四个属性:ACID 原子性(Atomi
阅读全文
摘要:第一种 使用new关键字 第二种 使用反射技术:1)通过Class类的newInstance()方法;2)通过Constructor类的newInstance方法 第三种 通过Object类的clone()方法 第四种 通过反序列化的方式
阅读全文
摘要:synchronized和Lock都是Java语言提供的两种实现对共享资源进行同步的机制。其中synchronized使用Object对象本身的wait()、notify()、notifyAll()方法实现调度机制,而Lock可以使用Condition进行进程之间的调度,完成synchronized
阅读全文
摘要:两者都是Thread类的静态方法,定义如下 public static void sleep(long millis) throws InterruptedException public static void yield() 1)sleep()方法给其他线程机会时不会考虑线程的优先级,因此会给低
阅读全文
摘要:通过调用线程类的start()方法来启动一个线程,使线程处于就绪状态,即可以被JVM来调度执行,在调度过程中,JVM通过调用线程类的run()方法来完成实际的业务逻辑,当run()方法结束后,此线程就会终止。 如果直接调用线程类的run()方法,会被当作一个普通的函数调用,程序中仍然只有主线程这一个
阅读全文
摘要:所谓同步,就是发出一个功能调用时,在没有得到结果之前,该调用就不返回或者继续执行后续操作。 异步跟同步相对,当一个异步调用发出后,调用者在没有得到结果之前,就可以继续执行后续操作。当这个调用完成后,一般通过状态、通知和回调的方式来通知调用者。对于异步调用,调用的返回并不受调用者控制。 根据同步的定义
阅读全文
摘要:问题 在 int i = 0; i = i++; 语句中,i = i++是线程安全的么?如果不安全,请说明上面操作在JVM中的执行过程,为什么不安全?说出JDK中哪个类能达到以上的效果,并且是线程安全而且高效的,简述其原理。 回答 语句 i = i++;不是线程安全的。 该语句执行过程如下, 先把
阅读全文
摘要:用输入/输出写一个程序,让用户输入一些姓名和电话号码,每一个姓名和电话号码经加在文件中。用户通过输入“done”来告诉系统整个列表输入完毕。如果用户输入完整的一个列表,程序将创建一个输出文件并显示或打印出来。
阅读全文
摘要:给定a、b两个文件,各存放50亿个url,每个url各占64B,内存限制4GB,请找出文件a与文件b中共同的url。 由于内存限制为4GB,而每个文件大小为50亿*64B = 5*64GB = 320GB,远远超出了内存限制,因此无法将所有的url读取到内存中,此时可以采取分批读取的方法。 Hash
阅读全文
摘要:已知两个链表head1和head2各自有序,请把它们合并成一个依然有序的链表。结果链表要包含head1和head2的所有节点,及节点值相同。
阅读全文
摘要:1)int是Java提供的8中基本类型的一种,只能用来运算,Integer是int的包装类,可以做更过的事情,因为Integer提供了很多有用的方法 2)int作为对象的属性时默认值为0,Integer作为对象属性时默认值为null。由此可见,int无法区分未赋值和赋值为0的情况,而Integer却
阅读全文
摘要:wait()是Object类的方法,当一个线程执行到wait()方法时,该线程就进入到一个和该线程相关的等待池中,同时释放了对象锁(暂时失去对象锁,wait(long timeout)超时时间到后还需要返还对象锁),其他线程可以访问同步方法或同步代码块; wait()使用notify() / not
阅读全文
摘要:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是保证汉子不被截半个,例如输入“人ABC” 4,应该截为“人AB”;输入“人ABC们DEF” 6,应该输出为“人ABC”,而不是“人ABC+半个们”。 分析:在String中英文占1个字节,中文占2个字节
阅读全文
摘要:ArrayList、Vector、LinkedList类均在java.util包中,均为可伸缩数组。 1)ArrayList和Vector都是基于存储元素的Object[] array来实现的,它们会在内存中开辟一块连续的空间来存储,因此支持通过下标来访问元素,同时索引数据的速度比较快,但是在插入和
阅读全文
摘要:1)String、StringBuffer、StringBuilder都用于字符串操作,其中,String是不可变类,即String对象一旦被创建,其值不能被修改,而StringBuffer和StringBuilder都是可变类,对象被创建以后仍然可以对其值进行修改。 2)在字符串需要共享的场合中使
阅读全文
摘要:面向对象的主要特征包括抽象、封装、继承、多态 1)抽象就是找出一些事物的相似和共性之处,然后将这些事物归为一类,这个类只考虑这些事物的相似和共性之处,并且忽略与当前主题和目标无关的那些方面,将注意力集中在与当前目标有关的方面。例如,看到一只蚂蚁和大象,你能够想象出它们的共同之处这就是抽象。抽象包括行
阅读全文
摘要:List<? extends T>表示类型的上界为T,即参数化的类型可能是T也可能是T的子类。<? extends T>被设计用来读数据的泛型,只能读取类型为T的元素。 List<? super T>表示类型的下界为T,即参数化的类型可能是T也可能是T的父类型。<? super T>被设计用来写数据
阅读全文