1.java中所有类的父类是什么?他都有什么方法?
Object类,主要方法:equals(), getType() ,getHashCode(), toString(), referenceEquals(), 受到保护的方法 finalize(),memberwiseClone().
2.java中IO包下面的inputstream运用了什么设计模式?请简述你知道的设计模式?
Decorator模式,主要功能是给一个对象动态的添加一些额外的功能,添加一个装饰,装饰必须与被装饰的组件继承于同一个接口,这样用户就不用担心装饰的集体实现,因为对他们老说是透明的。
java I/O 的设计模式主要有装饰模式(decorator)和适配器模式。
3.ArrayList跟LinkedList的区别详细说出?
一般大家都知道ArrayList和LinkedList的大致区别:
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
ArrayList和LinkedList是两个集合类,用于存储一系列的对象引用(references)。例如我们可以用ArrayList来存储一系列的String或者Integer。那么ArrayList和LinkedList在性能上有什么差别呢?什么时候应该用ArrayList什么时候又该用LinkedList呢?
时间性能上:对数据进行随机访问get和set时,arrayList具有较好性能,因为linkedList需要移动指针。
空间上:linkedlist的每一个元素都会包含一些实体的相关信息(上下元素),当容量较大时,将会需要较大的内存开销;arraylist当数组空间满了时,需要创建新的空间,新空间=(旧*3)/2+1,大约增加原来的50%,当数据实际容量小于数据容量时,就会在列表末尾留下大量空闲空间。
可以这样说:当操作是在一列数据的后面添加数据而不是在前面或中间,并且需要随机地访问其中的元素时,使用ArrayList会提供比较好的性能;当你的操作是在一列数据的前面或中间(前1/10的数据,否则还是arraylsit的性能好)添加或删除数据,并且按照顺序访问其中的元素时,就应该使用LinkedList了。
4.session和cookie的区别?
1、session数据保存在服务器,cookie数据保存在客户端。
2、cookie不是很安全,别人可以分析存放在本地的cookie进行cookie欺骗,为安全考虑应当使用session(登录个人信息存放在session,其他信息存放在cookie)
3、session数据会一定时间保存在服务器上,当访问增多时,会影响服务器性能,考虑到服务器性能应该使用cookie。
4、一个cookie保存的数据不能超过4k,一般浏览器限制一个站点不能超过20个cookie。
5.说一下快速排序的原理?
原理:通过一趟排序把待排序记录划分为两部分,其中一部分的关键字均小于另一部分关键的大小,然后在分别再对这两个部分进行进行排序,以达到整个序列有序。
具体做法:附设两个指针low和high,分别设初值为low和high,设枢轴记录的关键字为key,并暂存于r[0],首先从high所指向的位置开始,向前一步搜索找到第一个关键字小于key的记录与low所指向的记录进行交换,然后在从low所指向的位置向后搜索找到第一个关键字大于key的记录与high指向的记录交换,重复上述两步骤,直到low=high相等,才得到枢轴记录的正确位置。插入即可。
6.如何在hibernate中查看原始的sql语句?
在hibernate的配置文件设置show_sql属性值ture,则可打印出sql了
7.简述AOP,及其作用?
AOP:面向方面的编程思想,可以说是对OOP的补充和完善,使用“横切”技术,AOP将软件系统分为两部分:核心关注点和横切关注点,业务的主要流程是核心关注点,与之关系不大的是横切关注点,横切关注点的一个特点是,他经常发生在核心关注点的多处,而且各处的都基本相似,如权限认证、日志、安全等,简单来说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装在一起,以减少系统的代码重复性,降低模块间的耦合性,并有利于未来的可操作性和可维护性。
作用:分离各个关注点,将核心关注点和横切关注点分离,提高代码重构性、可维护性。正如Avande公司的高级方案架构师Adam Magee所说,AOP的核心思想就是“将应用程序中的商务逻辑同对其提供服务的通用服务进行分离”。
(IOC:控制反转,是一种设计模式,一层含义是控制权转移:是由传统的在程序内控制依赖转移转由容器来控制,二层含义是依赖注入:将相互依赖的对象分离,在spring中配置文件中描述他们的依赖关系,他们的依赖只有在使用的时候才建立,简单来说就是不需要再new一个对象了。)
8.struts2的流程?
这是Struts2官方站点提供的Struts 2 的整体结构。
一个请求在Struts2框架中的处理大概分为以下几个步骤:
1. 客户端提起一个(HttpServletRequest)请求,如在浏览器中输入”http://localhost:8080/TestMvc/add.action”就是提起一个(HttpServletRequest)请求。
2. 请求被提交到一系列(主要是三层)的过滤器(Filter),如(ActionContextCleanUp、其他过滤器(SiteMesh等)、 FilterDispatcher)。注意这里是有顺序的,先ActionContextCleanUp,再其他过滤器(SiteMesh等)、最后到FilterDispatcher.
3. FilterDispatcher是控制器的核心,就是mvc中c控制层的核心。下面粗略的分析下 我理解的FilterDispatcher工作流程和原理:FilterDispatcher进行初始化并启用核doFilter。FilterDispatcher询问ActionMapper是否需要调用某个Action来处理这个(request)请求,如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy。
4. ActionProxy通过Configuration Manager(struts.xml)询问框架的配置文件,找到需要调用的Action类.如果提交请求的是add.action,那么找到的Action类就是edisundong.AddAction。
5. ActionProxy创建一个ActionInvocation的实例,同时ActionInvocation通过代理模式调用Action。但在调用之前ActionInvocation会根据配置加载Action相关的所有Interceptor。(Interceptor是struts2另一个核心级的概念)
下面我们来看看ActionInvocation是如何工作的:
ActionInvocation 是Xworks 中Action 调度的核心。而对Interceptor 的调度,也正是由ActionInvocation负责。ActionInvocation 是一个接口, 而
DefaultActionInvocation 则是Webwork 对ActionInvocation的默认实现。
Interceptor 的调度流程大致如下:
1. ActionInvocation初始化时,根据配置,加载Action相关的所有Interceptor。
2. 通过ActionInvocation.invoke方法调用Action实现时,执行Interceptor。
Interceptor将很多功能从我们的Action中独立出来,大量减少了我们Action的代码,独立出来的行为具有很好的重用性。XWork、WebWork的许多功能都是有Interceptor实现,可以在配置文件中组装Action用到的Interceptor,它会按照你指定的顺序,在Action执行前后运行。(拦截器就是AOP(Aspect-Oriented Programming)的一种实现。(AOP是指用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。))
6. 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。如上文中将结构返回“add.jsp”,但大部分时候都是返回另外一个action,那么流程又得走一遍………
9.简述下多线程?
进程是指运行的程序,每个进程分配一定的内存空间,一个进程中存在多个线程,启动一个java虚拟机,就是打开一个进程,当进程中同时运行多个线程,叫做并发。
线程的实现方式有两种:继承Thread类和实现Runnable接口,通过覆盖run()方法来实现线程的行为。
线程状态:
New状态,使用new新建一个线程对象处于新建状态,仅仅在堆栈中分配了内存。
Runnable就绪状态,线程调用start()方法后,线程就进入就绪状态,虚拟机为它创建方法调用栈和程序计时器,处于这个状态线程可进入可运行池中,等待获取cpu使用权。
Runnabing运行状态,这个状态的线程处于cpu的使用状态,如果计算机只有一个cpu,则有一个线程处于这个状态,如果有多个cpu,则有多个线程占用不同的cpu,只有处于就行状态的线程才才有机会变为运行状态。
阻塞状态,线程由于某些原因放弃了cpu,此时不为线程分配cpu,直到线程重新进入到就绪状态。(阻塞原因:wait()、sleep()、I/O、其他原因)
调度方式:分时调度和抢占式调度。
12.java有些类中为什么需要实现Serializable接口?
serializable接口,是java提供的通用数据存储和读取的接口,实现serializable接口的对象可以转换成字符流,这样就可以将对象存储在文件中,或是作为数据流通过网络传输到其他地方去,或是通过管道传输到系统的其他程序中,这样设计就极大的简化了类的设计,应用于分布式应用系统中。
13.hashmap,hashtable的区别?以及如何使用,以及他的一些方法?
第一,继承不同。public class Hashtable extends Dictionary implements Map
public class HashMap extends AbstractMap implements Map
第二,Hashtable 中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。在多线程并发的环境下,可以直接使用Hashtable,但是要使用HashMap的话就要自己增加同步处理了。
第三,Hashtable中,key和value都不允许出现null值。
在HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,即可以表示 HashMap中没有该键,也可以表示该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键, 而应该用containsKey()方法来判断。
第四,两个遍历方式的内部实现上不同。Hashtable、HashMap都使用了 Iterator。而由于历史原因,Hashtable还使用了Enumeration的方式 。
第五,哈希值的使用不同,HashTable直接使用对象的hashCode。而HashMap重新计算hash值。
第六,Hashtable和HashMap它们两个内部实现方式的数组的初始大小和扩容的方式。HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。
方法:get(key),remove(key),put(key,value),contains:containKey,containValue
,isEmpty()...
14.设计题,利用hashmap对苹果的重量进行排序?
15.struts2拦截器相关问题?
16.struts2接受参数的方式?
17.数据结构要会(本人很渣)
18.异常的相关问题?error和exception具体?
19.还问了个MYSQL如何查看运行状态没听懂不过肯定不会就pass了?
20.问了一些关于collections的方法?
21.servlet相关知识,doPost,doGet,一些内置对象?
23.set和list的区别,一些个实现类,继承关系等等?
24.在Hibernate中java的对象状态有哪些?
25.简述你看过java类的源代码?
26.数据库事务隔离机制及其特点是什么?
27.JVM内存heap and stack
28.HTTP报文包含内容?
29.TCP/IP三次握手?
30.垃圾回收?
31.其他问了未来规划,在学校学的最好的一门,然后教育了下我说大公司注重基础跟潜力,小公司注重上来就会做事,要多看源码多看jdk注重java基础!!!
一个月的时间大概5天面一次一共面了5轮下面是三面,四面的问题分享给大家
1.什么是 java 序列化, 如何实现 java 序列化?或者请解释 Serializable 接口 接口的作用?
2.MVC的各个部分都有那些技术来实现? 如何实现?
3.开发中主要使用 Spring 的什么技术 ?
4.对Spring的理解,项目中都用什么?怎么用的?对IOC、和AOP的理解及实现原理?
5.hashmap底层如何实现的?
6.arrayList底层如何扩展的?
7.谈谈Hibernate的理解,一级和二级缓存的作用,在项目中Hibernate都是怎么使用缓存的?
8.谈谈你在项目中的角色?
9.你做过的项目模块实现?
10.线程同步,并发操作怎么控制?
11.servlet容器启动过程,生命周期?
12.SQL关联关系?
13.list去重?
14.arraylist和hashmap在内存中开销?
15.sql行转列?