.介绍JAVA 中的Collection FrameWork(及如何写自己的数据结构)【基础】
答:Collection FrameWork 如下:
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│
└Set
|-HashSet
|-TreeSet
Map
├Hashtable
├HashMap
1.说出ArrayList,Vector, LinkedList 的存储性能和特性?【基础】
答:ArrayList 和Vector 都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector 由于使用了synchronized 方法(线程安全),通常性能上较ArrayList 差,而LinkedList 使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快
2.Collection 和Collections 的区别?【基础】
答:Collection 是java.util 下的接口,它是各种集合的父接口,继承于它的接口主要有Set 和List;Collections 是个java.util 下的类,是针对集合的帮助类,提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。
3.HashMap 和Hashtable 的区别? 【基础】
二者都实现了Map 接口,是将惟一键映射到特定的值上;主要区别在于:
1)HashMap 没有排序,允许一个null 键和多个null 值,而Hashtable 不允许
2)Hashtable 的方法是Synchronize 的,而HashMap 不是,在多个线程访问Hashtable 时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。
4.List、Map、Set 三个接口,存取元素时,各有什么特点?【基础】
答:List 以特定次序来持有元素,可有重复元素。Set 无法拥有重复元素,内部排序。Map 保存key-value 值,value 可多值
5.Set 里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别? 【基础】
答:Set 里的元素是不能重复的,用equals ()方法来区分重复与否。覆盖equals()方法用来判断对象的内容是否相同,而”==”判断地址是否相等,用来决定引用值是否指向同一对象
6.java 中有几种类型的流?JDK 为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?【基础】
答:字节流,字符流。字节流继承于InputStream、OutputStream,字符流继承于Reader、Writer。在java.io 包中还有许多其他的流,主要是为了提高性能和使用方便
7.什么是java 序列化,如何实现java 序列化?【基础】
序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题;序列化的实现:将需要被序列化的类实现Serializable 接口,该接口没有需实现的方法,implements Serializable 只是为了标注该对象是可被序列化的,然后使用一个输出流(如FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream 对象的writeObject(Object obj)方法就可以将参数为obj 的对象写出(即保存其状态),要恢复的话则用输入流
8.通过方法的迭代 遍历出某个文件夹下所有的文件。
迭代器的使用步骤:
1.创建集合对象,往集合中添加元素
2.使用集合中的方法iterator获取迭代器的实现类对象,使用Iterator接口接收(多态)
3.使用iterator中的方法hasNext和next方法进行迭代,取出集合中的元素
9.单例模式。
饿汉
1、 forward 和 和 t redirect 的区别?
forward: 转发,在下一个页面中,request 保留上一个页面中的 request 的所有值
redirect: 跳转,不传递 request 对象。
3. Servlet 的生命周期是什么?
4. 什么情况下调用 doGet() 和 doPost() ?
第一:你的servlet如果是继承自HttpServlet,就必须重写它里面的两 个虚方法doGet和doPost,也就是说,先不管别的servlet或jsp会去调用哪个方法,这两个方法都应该有。
第二:至于它调用哪个方法,就看提交方式
method属性的值是get,它就去调用对应servlet的doGet方法。
同理,method属性的值是get,它就去调用对应servlet的doPost方法。
一般来说,不管采用那种提交方式,在servlet里要做的事情是一样的。所以,我们很多情况下,在一个方法里面调用另一个方法,这样随你那种方式提交的,都可以转去做一种处理。
第三:举个最常见的例子,登陆 页面 和登陆 提交后的表单处理都用同一个url
但是 获取登陆页面放在 doGet里处理,而提交登陆 表单后的处理逻辑放在 doPost里
因为登陆需要提交 用户名密码 等敏感数据,用post更加 安全
5. 列出JSTL中core核心标签中常见的一些标签
6. 列出JSTL中fmt格式化标签中常见的一些标签
根据区域或定制的方式将数字格式化成数字、货币或百分比
用来将字符串类型的数字、货币、或百分比转换成数字类型
用来将日期类型转换为字符串类型日期
用来将字符串类型的时间或日期转换成日期时间类型
7. 如何实现一个自定义的 servlet?
- 1. 写一个Servlet类extends HttpServlet并重写doPost或doGet或service方法
2.在web.xml中进行部署
- 2.
8. t short 1 s1 = = = = ; 1; 1 s1 = = = = s1+ + + + 1; 有什么错? t short 1 s1 = = = = ; 1; 1 s1 = += 1;
9. Math.round(11.5) 等於多少? Math.round(-11.5) 等於多少?
10. 给我一个你最常见到的 runtime
1、String s=”Hello”;s=s+”world!”;这两行代码执行后,原始的String对象中的内容是否改变?
改变了,+相当于字符串拼接
2、是否可以继承String类?
String类是final类故不可以继承。一切由final修饰过的都不能继承
3、String s=new String(“xyz”);创建了几个对象?二者之间有什么区别?
1个或2个, 如果”xyz”已经存在于常量池中,则只在堆中创建”xyz”对象的一个 拷贝,否则还要在常量池中在创建一份
3、String和StringBuffer的区别?
(1)String:是对象不是原始类型.为不可变对象,一旦被创建,就不能修改它的值.对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.String 是final类,即不能被继承
(2)StringBuffer:是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象。它只能通过构造函数来建立对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.向StringBuffer中付值的时候可以通过它的append方法.
5、如何把一段逗号分割的字符串转换成一个数组?
String.split(“,”);
6、数组有没有length()这个方法?String有没有length()这个方法?
数组求长度用length属性
字符串求长度用length()方法
集合求长度用size()方法
7、下面这条语句一共创建了多少个对象:String s=”a”+”b”+”c”+”d”;
这个和JVM实现有关, 如果常量池为空,可能是1个也可能是7个等
8、try{}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会别执行?什么时候执行?在return前还是后?
会执行 try{}中的return执行后在没有返回数据时先去执行finally{}中的代码,然后再 返回。所以说finally{}在return中间执行。
9、finally,final,finalize的区别?
final可以用来修饰类,方法和变量
finally作为异常处理的一部分,它只能用在try/catch语句中,并且附带一个语句块,表示这段语句最终一定会被执行(不管有没有抛出异常),经常被用在需要释放资源的情况下
finalize()是在java.lang.Object里定义的,也就是说每一个对象都有这么个方法。这个方法在gc启动,该对象被回收的时候被调用。其实gc可以回收大部分的对象(凡是new出来的对象,gc都能搞定,一般情况下我们又不会用new以外的方式去创建对象),所以一般是不需要程序员去实现finalize的。
特殊情况下,需要程序员实现finalize,当对象被回收的时候释放一些资源,比如:一个socket链接,在对象初始化时创建,整个生命周期内有效,那么就需要实现finalize,关闭这个链接。
使用finalize还需要注意一个事,调用super.finalize();
一个对象的finalize()方法只会被调用一次,而且finalize()被调用不意味着gc会立即回收该对象,所以有可能调用finalize()后,该对象又不需要被回收了,然后到了真正要被回收的时候,因为前面调用过一次,所以不会调用finalize(),产生问题。 所以,推荐不要使用finalize()方法,它跟析构函数不一样。
1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?.....
一个.java源文件可以有多个类,但最多只能有一个public类。
2、Java有没有goto?..........................................................................................
有的,goto是java保留关键字,但是不能使用。
在C语言中goto一般配合条件语句,可用来实现条件转移,形成循环,跳出循环等。
3、说说&和&&的区别。......................................................................................
&是按位与操作符,&& 是逻辑与操作符
4、在JAVA中如何跳出当前的多重嵌套循环?...................................................
break
抛出异常也可以跳出多重循环
5、switch语句能否作用在byte上,能否作用在long上,能否作用在String上?...
switch可作用于char byte short int
switch可作用于char byte short int对应的包装类
switch不可作用于long double float boolean,包括他们的包装类
switch中可以是字符串类型,String(jdk1.7之后才可以作用在string上)
6、short s1 =1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
1、 s1=s1+1会存在数据类型转换问题. 1默认为int型,
s1是short型进行运算时结果是int型(这里自动转换)
,等号右边结果是int型,相当于把int型赋值给short,
那么就必须强制类型转换,否则就报错。正确的写法应该是s1=(short)(s1+1);
2、这个复合赋值是自带了隐式的强制类型转换的
7、char型变量中能不能存贮一个中文汉字?为什么?
char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,
所以,char型变量中当然可以存储汉字啦。不过,如果某个特殊的汉字没有被包含在
unicode编码字符集中,那么,这个char型变量中就不能存储这个特殊汉字。
8、用最有效率的方法算出2乘以8等於几?
2 << 3
10、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。
11、"=="和equals方法究竟有什么区别?
== 操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引
用变量是否相等,只能用==操作符。
equals()方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独立的
12、静态变量和实例变量的区别?
语法区别:静态变量需要static关键字修饰,实例变量不需要。
程序运行时的区别:静态变量从属于类,实例变量从属于对象。
实例变量必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量;
静态变量即类别量,只要程序加载了类的字节码,静态变量就会被分配空间,即可使用。
综上,实例变量必须创建对象后通过这个对象来使用,静态变量可以直接使用类名来引用。
13、是否可以从一个static方法内部发出对非static方法的调用?
不可以。
因为非static方法属于某个对象,也叫实例方法,必须创建一个对象后,才可以调用该对象的该非static方法。
而static方法(静态方法)也叫类方法,属于某个类,可以直接通过类名调用,不用创建对象。
也就是说,当调用一个static方法时,可能还没有创建任何实例对象,此时不能调用非static方法。
14、Integer与int的区别
1、Integer是int的包装类,int则是java的一种基本数据类型
2、Integer变量必须实例化后才能使用,而int变量不需要
3、Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值
4、Integer的默认值是null,int的默认值是0
15、Math.round(11.5)等於多少?Math.round(-11.5)等於多少?
12,-11
16、下面的代码有什么不妥之处?
17、请说出作用域public,private,protected,以及不写时的区别
、public:public表明该数据成员、成员函数是对所有用户开放的,所有用户都可以直接进行调用
2、private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直接使用,私有财产神圣不可侵犯嘛,即便是子女,朋友,都
不可以使用。
3、protected:protected对于子女、朋友来说,就是public的,可以自由使用,没有任何限制,而对于其他的外部class,protected就变成
private。
4、default 则在包内包外的子类都可见。
18、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
重载:同一个类中,方法名相同,参数列表不同。与返回值类型无关。
重写:存在于子父类,或者子父接口中,方法声明相同。
Overload的方法可以改变返回值的类型,因为它与返回值类型无关
19、构造器Constructor是否可被override?
构造器不能被继承,所以不存在override(重写)的问题,但是可以被重载。
20、接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concreteclass)?抽象类中是否可以有静态的main方法?
接口可以继承接口,而且支持多重继承。抽象类可以实现(implements)接口。抽象类可继承具体类也可以继承抽象类。
抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。抽象类中可以有静态的方法
21、写clone()方法时,通常都有一行代码,是什么?
实现Cloneable接口 覆写clone()方法 克隆要先克隆父类 所以要super.clone();
22、面向对象的特征有哪些方面
封装。继承,多态。抽象
23、java中实现多态的机制是什么?
1,方法的多态:继承,实现
2.对象的多态
1、 java中可见的访问修饰符的含义
public:访问不受限制。
protected:访问仅限于包含类或从包含类派生的类型。只有包含该成员的类以及继承的类可以存取.
Internal:访问仅限于当前程序集。只有当前工程可以存取.
protected internal:访问仅限于当前程序集或从包含类派生的类型。
private:访问仅限于包含类型。只有包含该成员的类可以存取.
2、 是否可以从一个static方法内部发出对非static方法的调用?
不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。也就是说,当一个static方法被调用时,可能还没有创建任何实例对象,如果从一个static方法中发出对非static方法的调用,那个非static方法是关联到哪个对象上的呢?这个逻辑无法成立,所以,一个static方法内部发出对非static方法的调用。
3、 在Java中,什么是interface,abstractclass?Interface和abstract class有何区别?
interface : java中的接口是,程序的规范,当中可以定义常量和抽象方法(它允许使用者确定方法名,参数列表和返回值,但是没有方法体),接口提供了形式,但是没有提供具体的实现。
abstract Class:抽象类,抽象类是接口和普通类之间的一种实现方式,因为不能总是使用纯接口,但是又必须使用抽象方法的时候,抽象类就成了用于此目的的重要工具。
abstract method:仅有声明而没有方法体的方法,就成为抽象方法,包含抽象方法的类就叫抽象类,这个时候的类就不需要加上abstract的限定,否则编译错误。
Interface和abstract class的区别:
1、 接口中不允许有方法实现,抽象类中,可以存在抽象或者非抽象方法。
2、 接口中只能有静态的不可修改的成员(static final)。
3、 因为java只允许单集成,所以抽象作为类型定义,受到了极大的限制,但是接口可以多实现。
4、 设计理念不同,abstract class 表示的是“is-a”关系,而interface表示“like-a”关系。
5、 抽象类中的变量默认是friendly型,其值可以在子类中重新定义,也可以重新赋值。
接口中的方法默认都是public abstract类型的
4、 说明链表、哈希表、数组的特点(靖城远景公司)
1、 链表是一种物理存储单元上非连续,非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。
a) 链表的存储在内存中可以是非连续性的,因为链表结构可以通过自身节点中的数据域指针域来找到下一个节点。
b) 对链表进行删除插入操作时,只需要将其指针域进行修改即可(相对于数组来说内部操作更便捷)
c) 链表本身不存在下标,所有查询效率略低。
*:一般而言进行删除修改等操作的时候使用的是链表结构,而查询的时候则使用数组结构
*:Java中由于linked*的内部实现是采用链表结构。
2、 散列表(Hashtable,也叫哈希表),是根据关键码值(Key Value)而直接进行访问的数据结构
a) 哈希表最大的优势,就是把数据的存储和查询消耗的时间大大降低,几乎可以看成是常数时间。损失的代价仅仅是消耗比较多的内存,然而在当前可利用内存越来越多的情况下,用空间换时间的做法是相当值得的。而且编码也比较容易。
b) 散列表查询速度快的原因:
i. 将键值保存在某处,以便于能很快找到(数组中,这里保存的不是键本身而是键的信息,数组的下标就是这个对象的hashCode)
ii. 查询的过程就变成了,首先生产该对象的HashCode,然后查询数组,,然后再去保存值的list当中查询
3、 数组是一种物理存储单元上连续,顺序的存储结构,可以通过下标访问数组元素。
a) 数组的保存效率高并且具备保存基本类型的能力。
b) 数组是一种简单的线性序列,这使得访问速度非常快。
c) 数组在定义时其大小被固定,并且在其声明周期中不可改变。
数组的查询速度,相对来说是比较快的,因为可以对其索引进行快速便利
5、 一个类是否可以继承多个接口?
1、在Java中接口是允许多实现的,接口和接口之间可以进行多实现,大部分的类也都是实现多个接口。
6、 一个类是否可以继承多个超类?
1、类的继承,同一层次结构只能继承一个类。
7、 接口是否可继承接口?
1、接口之间不能实现,因为接口本身就是抽象的,但是接口可以继承接口的,并且可以进行多继承(因为抽象,所以不担心方法的冲突)
8、 抽象类是否可以实现(implement)接口?
1、可以,抽象类也是类,类是可以实现接口的。
9、 如何将字符串转换为Integer?
1、Integer parseInt = Integer.parseInt(“123”);
10、 如何将日期类型转换为”xxxx年xx月xx日“格式的字符串?
@Test
publicvoidformatDate(){
Date time = new Date();
DateFormat df = new SimpleDateFormat("yyyy年MM月dd日-hh:mm:ss");
System.err.println(df.format(time));
}
11、 如何将字符串bbbwlirbbb转换为bbbhhtccc?
@Test
publicvoid change(){
String str = "bbbwlirbbb";
String str1 = str.replaceAll(str, "bbbhhtccc");
System.err.println(str1);
}
1.AOP 的作用
https://blog.csdn.net/shao_zhiqiang/article/details/51705946
面向切面编程则是希望能够将通用需求功能从不相关的类当中分离出来,能够使得很多类共享一个行为,一旦发生变化,不必修改很多类,而只需要修改这个行为即可。
2.IOC和DI的意思
IOC(控制反转):全称为:Inverse of Control。从字面上理解就是控制反转了,将对在自身对象中的一个内置对象的控制反转,反转后不再由自己本身的对象进行控制这个内置对象的创建,而是由第三方系统去控制这个内置对象的创建。
DI(依赖注入):全称为Dependency Injection,意思自身对象中的内置对象是通过注入的方式进行创建。
那么IOC和DI这两者又是什么关系呢?
IOC就是一种软件设计思想,DI是这种软件设计思想的一个实现。而Spring中的核心机制就是DI。
3.SpringMVC的工作原理
1、 用户发送请求至前端控制器DispatcherServlet。
2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。
3、 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
4、 DispatcherServlet调用HandlerAdapter处理器适配器。
5、 HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
6、 Controller执行完成返回ModelAndView。
7、 HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。
8、 DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
9、 ViewReslover解析后返回具体View。
10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
11、 DispatcherServlet响应用户。
4.iBatis 与 与 Hibernate 有什么不同?
相同点:屏蔽 jdbc api 的底层访问细节,使用我们不用与 jdbc api 打交道,就可以访问数据。
jdbc api 编程流程固定,还将 sql 语句与 java 代码混杂在了一起,经常需要拼凑 sql 语句,
细节很繁琐。
ibatis 的好处:屏蔽 jdbc api 的底层访问细节;将 sql 语句与 java 代码进行分离;提供了将结
果集自动封装称为实体对象和对象的集合的功能,queryForList 返回对象集合,用
queryForObject 返回单个对象;提供了自动将实体对象的属性传递给 sql 语句的参数。
Hibernate 是一个全自动的 orm 映射工具,它可以自动生成 sql 语句,ibatis 需要我们自己在
xml 配置文件中写 sql 语句,hibernate 要比 ibatis 功能负责和强大很多。因为 hibernate 自
动生成 sql 语句,我们无法控制该语句,我们就无法去写特定的高效率的 sql。对于一些不
太复杂的 sql 查询,hibernate 可以很好帮我们完成,但是,对于特别复杂的查询,hibernate
就很难适应了,这时候用 ibatis 就是不错的选择,因为 ibatis 还是由我们自己写 sql 语句。
5. 、BS 与 与 CS 的联系 的联系与区别。 与区别。
C/S 是 Client/Server 的缩写。服务器通常采用高性能的 PC、工作站或小型机,并采用大型
数据库系统,如 Oracle、Sybase、InFORMix 或 SQL Server。客户端需要安装专用的客户
端软件。
B/S是 Brower/Server 的缩写,客户机上只要安装一个浏览器(Browser),如 Netscape
Navigator 或 Internet Explorer,服务器安装 Oracle、Sybase、InFORMix 或 SQL Server
等数据库。在这种结构下,用户界面完全通过 WWW 浏览器实现,一部分事务逻辑在前端
实现,但是主要事务逻辑在服务器端实现。浏览器通过Web Server 同数据库进行数据交互。
C/S 与 B/S 区别:
共同点:
1.bs是特殊的cs,此时浏览器充当了客户端
2.基于HTTP协议的
区别:
1.cs服务器主要就是一个数据库,所有业务逻辑以及界面渲染交给客户度端
bs:把业务逻辑交给服务端完成,客户端只做界面渲染和数据交换,每次升级需要安装,可移植性差。
2.cs:较安全,用户界面很丰富,用户体验不错
bs:只开发服务端,跨平台,可移植性强,安全性低,用户体验差。
6.描述一下 JVM 加载 class 文件的原理机制?
JVM 中类的装载是由 ClassLoader 和它的子类来实现的,Java ClassLoader 是一个重要的
Java 运行时系统组件。它负责在运行时查找和装入类文件的类。
7.error和exception有什么区别?
error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指
望程序能处理这样的情况。 exception 表示一种设计或实现问题。也就是说,它表示如果程
序运行正常,从不会发生的情况。
8.String s = "Hello";s = s + " world!"; 这两行代码执行后,原始的 String
对象中的内容到底变了没有?
没有,指向了新的空间,原来的没变。
数据库优化:
1. 使用索引,我们在创建表的时候可以同时创建合适的索引,也可以使用ALTERTABLE或CREATEINDEX在以后创建索引
- 优化的查询语句,最好是在相同类型的字段间进行比较的操作,其次,在建有索引的字段上尽量不要使用函数进行操作,在搜索字符型字段时,我们有时会使用LIKE关键字和通配符,这种做法虽然简单,但却也是以牺牲系统性能为代价的
- 使用外键
- 事务
- 使用连接(JOIN)来代替子查询(Sub-Queries)
- 选取最适用的字段属性
SpringMVC 常用注解都有哪谢?(2017-11-24-gxb)
@requestMapping 用于请求 url 映射。
@RequestBody 注解实现接收 http 请求的json数据,将json 数据转换为java对象。
@ResponseBody 注解实现将 controller 方法返回对象转化为 json 响应给客户
Spring 的常用注解?
@Required:该注解应用于设值方法
@Autowired:该注解应用于有值设值方法、非设值方法、构造方法和变量。
@Qualifier:该注解和@Autowired 搭配使用,用于消除特定 bean 自动装配的歧义
@Configuration把一个类作为一个IoC容器,它的某个方法头上如果注册了@Bean,就会作为这个Spring容器中的Bean。
@Scope注解 作用域
@Lazy(true) 表示延迟初始化
@Service用于标注业务层组件、
@Controller用于标注控制层组件(如struts中的action)
@Repository用于标注数据访问组件,即DAO组件。
@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
@Scope用于指定scope作用域的(用在类上)
二.什么是泛型?
泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。
1.多线程如何实现异步
eventProducer(当然,也可以是dataProducer等)是生产者,它会将前端传输过来的数据或者说需要处理的事件封装好,然后将这些封装好的数据放进一个队列里面去;
而eventConsumer是消费者,它会读取队列里面的数据,然后进行处理。
在这个过程,程序是以异步的方式运行的:生产者无需等待消费者处理完成,它的职责只是将数据推到内存里面去,然后就可以进行响应;而消费者只需要处理数据即可,它不用管数据是哪来的。显然,这样的方式可以提高响应的速度,同时使得异步的实现方式变得简单起来。
2.spring bean的作用域,生命周期
3.js事物冒泡
事件开始时由最具体的元素接收,然后逐级向上传播到较为不具体的节点
正如上面我们所说的,它会从一个最具体的的元素接收,然后逐级向上传播, p=>button=>div=>body
4.HashMap和HashTab的区别
HashMap 是线程不安全的,HashMap 是一个接口,是 Map 的一个子接口,是将键映射到值得对象,不允许键值重复,允许空键和空值;由于非线程安全,HashMap 的效率要较 HashTable 的效率高一些.
HashTable 是线程安全的一个集合,不允许 null 值作为一个 key 值或者 Value 值;
HashTable 是 sychronize,多个线程访问时不需要自己为它的方法实现同步,而 HashMap 在被多个线程访问的时候需要自己为它的方法实现同步;
4.1如何实现线程同步:
1.使用syncronized代码块
2.使用对象锁
3.使用同步方法
5.Arraylist和Vector,Linklist的区别
ArrayList 和Vector 都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector 由于使用了synchronized 方法(线程安全),通常性能上较ArrayList 差,而LinkedList 使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但
是插入数据时只需要记录本项的前后项即可,所以插入速度较快
6.Set的两个子类的区别
7.jsp九大内置对象和其中的方法
8.servlet的生命周期
9.spring和mybatis的基础实现过程
1.导入jar包
2.在src目录下创建一个mybatis-config.xml的配置文件
3.在src目录下创建一个jdbc.properties的连接数据库的配置文件,这样做的目的是以后切换数据库的时候不用修改配置文件,直接在这个目录下修改就可以。
.还需要一个配置文件,因为mybatis是需要自己创建表的,实体类可以不要(但是一般会创建一个)。在和实体类相同的目录下创建一个和实体类名称相同的xml的配置文件。
10.SSm是如何整合的?
spring-mybatis.xml
1.配置包扫描
2.配置JDBC连接池
3.配置sqlSessionFactory
4.引入mybatis映射文件
5.配置mybatis接口扫描
6.声明事务类
7.配置意见,切面
spring-mvc
1.配置包扫描
2.视图解析器
3.配置静态资源处理
4.配置文件上传
web.xml
1.配置前端控制器
2.编码过滤器,设置编码UTF-8
11.mybatis的dao层和sal语句是如何映射起来的
12.数据库的连接方式和约束方式
内连接 左联,右连。全连接
五大约束
1. 主键约束primay key Constraint:唯一性 非空性
2. 唯一约束Unique Constraint:唯一性 可以空 但只能有一个
3. 检查约束 Check Constraint:对该列数据的范围、格式的限制
4. 默认约束 Default OCnstraint:该数据的默认值
5. 外键约束 Foreign keyConstraint:需要建立两表之间的关系并引用主表的列
13.数据库左联和右联的区别
14.数据库的函数
15. js中如何获取时间,比如获取小时或者分钟或者秒
16.数据库的乐观锁和悲观锁与Java中的锁
悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。再比如Java里面的同步原语synchronized关键字的实现也是悲观锁。
乐观锁:顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库提供的类似于write_condition机制,其实都是提供的乐观锁。在Java中java.util.concurrent.atomic包下面的原子变量类就是使用了乐观锁的一种实现方式CAS实现的。
17.说出你常见的运行异常
- ArithmeticException(算术异常)
- ClassCastException (类转换异常)
- IllegalArgumentException (非法参数异常)
- IndexOutOfBoundsException (下标越界异常)
- NullPointerException (空指针异常)
- SecurityException (安全异常)