1.Java中同步方法和同步代码块的区别
synchronized修饰的方法称为同步方法,synchronized修饰的代码块称为同步代码快。
两者解锁方式不同,同步方法是为特定方法加锁同步,而同步代码块是为特定的代码块同步加锁;
同步放方法加锁的范围相比于同步代码块加锁的范围大,但是同步代码代码块的加锁效果比同步方法要好。
2.HashMap和HashTable的区别
(1)Hashtable 继承Dictiionary ,而 HashMap继承AbstractMap
(2)HashMap允许将null作为一个entry的key或者value,而Hashtable不允许
(3)HashMap是非线程安全的,Hashtable是线程安全的
(4)HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey,
(5)Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步(Collections.synchronizedMap)。
3.String类是否可以继承
不可以,因为String是final修饰的类,final修饰的类不能被继承。
4.静态嵌套类(static Nested Class)和内部类(Inner Class)的不同
Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化
5.阐述final、finally、finalize的区别
final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。
6.java的对象反射是什么?有什么作用?
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
作用:
7.wait与sleep的区别
sleep()是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,此时系统的CPU部分资源被占用,其他线程无法进入,会增加时间限制,但是监控状态依然保持,到时后会自动恢复,调用sleep不会释放对象锁。
wait()是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,此时线程不占用任何资源,不增加时间限制,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。
8.Spring IOC容器是什么?说说IOC的优点
Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。
优点:
实现组件之间的解耦,提高程序的灵活性和可维护性。
9.Spring AOP是什么?说说AOP的优点?
面向切面编程(AOP)完善spring的依赖注入(DI),面向切面编程在spring中主要表现为两个方面 1.面向切面编程提供声明式事务管理 2.spring支持用户自定义的切面面向切面编程(aop)是对面向对象编程(oop)的补充,面向对象编程将程序分解成各个层次的对象,面向切面编程将程序运行过程分解成各个切面。
优点:
A.各个步骤之间的良好隔离性
B.源代码无关性
C.每个关注点现在都集中于一处,而不是分散到多处代码中服务模块更简洁,服务模块只需关注核心代码。
10.volatile变量和atomic变量有什么不同?
Volatile可以看做是一个轻量级的synchronized,它可以在多线程并发的情况下保证变量的“可见性”,什么是可见性?就是在一个线程的工作内存中修改了该变量的值,该变量的值立即能回显到主内存中,从而保证所有的线程看到这个变量的值是一致的。
atomic对于原子操作类,Java的concurrent并发包中主要为我们提供了这么几个常用的:AtomicInteger、AtomicLong、AtomicBoolean、AtomicReference<T>。对于原子操作类,最大的特点是在多线程并发操作同一个资源的情况下,使用Lock-Free算法来替代锁,这样开销小、速度快,对于原子操作类是采用原子操作指令实现的,从而可以保证操作的原子性。
11.设计一个单例类
public class Singleton { private static Singleton instance; private Singleton (){} public static synchronized Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }
12.什么是cookie?session和cookie有什么区别?
cookie是一种发送到客户浏览器的文本串句柄,并保存在客户机硬盘上,可以用来在某个WEB站点会话间持久的保持数据。
cookie和session的区别
(1)cookie数据存放在客户的浏览器上,session数据放在服务器上
(2)cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,如果主要考虑到安全应当使用session
(3)session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,如果主要考虑到减轻服务器性能方面,应当使用COOKIE
(4)单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能3K。
(5)登陆信息等重要信息存放为SESSION;其他信息如果需要保留,可以放在COOKIE中
13.sendRedirected和forward方法有什么区别
forward转发:url地址没有变化,没有重新发出请求,转发过程携带数据,目标url仅应用于本WEB应用,转发时服务器端行为,只请求一次。
redirect重定向:url地址变化,且会重新发出请求,在重定向过程中不携带数据,url适用于任何地址,是客户端行为,至少发送两次请求。
14.解释下Servlet的生命周期
Servlet的生命周期分为5个阶段:加载、创建、初始化、处理客户请求、卸载。
(1)加载:容器通过类加载器使用servlet类对应的文件加载servlet
(2)创建:通过调用servlet构造函数创建一个servlet对象
(3)初始化:调用init()方法初始化
(4)处理客户请求:每当有一个客户请求,容器会创建一个线程来处理客户请求
(5)卸载:调用destroy()方法让servlet自己释放其占用的资源
15.内连接与外连接的区别
内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分三种:
(1)等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。
(2)不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括>、>=、<=、<、!>、!<和<>。
(3)自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。
内连接时,返回查询结果集合中的仅是符合查询条件( WHERE 搜索条件或 HAVING条件)和连接条件的行。而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行
16.写一个适用于Mysql的分页查询语句
select *
from tname
where tname = ‘*a*’
limit (pageIndex-1)*pageSize,pageSize;
17.某员工信息表(userinfo)与部门表(dept)结构如下:
(1)查询公司姓名包含“张”字员工的基本信息
select name 姓名,salary 薪资,hiredate 受雇日期
from userinfo
where name like “*张*”;
(2)查找雇员数超过2个的部门名称,并按照部门编号倒序输出(使用join实现)
select count(0) deptSum,deptid
from dept d left join userinfo u
where d.deptid=u.deptid
group by deptid desc
having deptSum >2