- Spring原理(中)
spring的最大作用ioc/di,将类与类的依赖关系写在配置文件中,程序在运行时根据配置文件动态加载依赖的类,降低的类与类之间的藕合度。它的原理是在applicationContext.xml加入bean标记,在bean标记中通过class属性说明具体类名、通过property标签说明该类的属性名、通过constructor-args说明构造子的参数。其一切都是返射,当通过applicationContext.getBean(“id名称”)得到一个类实例时,就是以bean标签的类名、属性名、构造子的参数为准,通过反射实例对象,唤起对象的set方法设置属性值、通过构造子的newInstance实例化得到对象。正因为spring一切都是反射,反射比直接调用的处理速度慢,所以这也是spring的一个问题。
spring第二大作用就是aop,其机理来自于代理模式,代理模式有三个角色分别是通用接口、代理、真实对象代理、真实对象实现的是同一接口,将真实对象作为代理的一个属性,向客户端公开的是代理,当客户端调用代理的方法时,代理找到真实对象,调用真实对象方法,在调用之前之后提供相关的服务,如事务、安全、日志。
- Hibernate原理(中)
Hibernate的实现原理:通过解析数据库配置文件获取数据库连接信息并建立连接,通过解析映射文件可以获取映射类名、属性名、表名以及字段名等信息,得到名字后通过反射机制可以得到映射类信息,调用构造方法创建对象,调用每个属性的set方法给对象设值完成数据的装载
- 定义数组(易)
type arrayName[]
- 说说数据连接池的原理(中)
对于共享资源,有一个很著名的设计模式:资源池(Resource Pool)。该模式正是为了解决资源的频繁分配?释放所造成的问题。为解决上述问题,可以采用数据库连接池技术。数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量?使用情况,为系统开发?测试及性能调整提供依据
- 如何配置Tomcat(易)
1.下载j2sdk和tomcat
2.安装和配置你的j2sdk和tomcat
配置JAVA_HOME CATALINA_HOME
3.在server.xml文件中可进一步修改配置
- Ajax如何实现的(易)
实现Ajax的关键是使用XMLHttpRequest对象(下简称XHR对象)
Step 1. 创建XHR对象实例
Step 2. 向服务器做请求
Step 3. 指定回调函数, 即当服务器返回结果时如何处理结果
Step 4. 使用XHR对象的send方法发送请求
- 如何实现代码的版本控制(中)
在服务器端建立该项目的数据库,并保存你选定的项目源文件的第一个版本。客户端任一用户要获得某源文件的修改权利,需进行check out操作。之后客户端一般每完成一个无编译错误的版本想保存的时候,进行check in操作,将当前版本保存在服务器端上并成为最新版本(注意,不是覆盖以前的哟)。任一客户端可以方便地得到服务器上的文件的任意版本(如果有权限的话)。一般还实现了一个重要的功能是版本比较,任一客户端可以利用版本控制工具对某文件的不同版本进行版本比较,它会标记出不同版本的同名文件的不同点,可以轻易地看出版本内容的演化
常用的工具有vss和cvs
- J2EE的好处是什么(中)
J2EE的全称是Java 2 Platform Enterprise Edition,它是由SUN公司领导、各厂商共同制定并得到广泛认可的工业标准。业界各大中间件厂商如BEA、IBM、Oracle都积极地促进了它的“诞生”、“长大”。
从一开始,J2EE走的就是开放路线——众多厂商共同制定规范,使得J2EE吸收了这些厂商多年来在系统设计、系统集成方面的经验、教训。同时,这些厂商对新技术发展的预测以及各自独到的观点,也会在J2EE的规范中体现。所以,J2EE产品可以满足当前不断变化、日趋复杂的商业需求。
保护企业的投资
对于很多企业而言,在多年的发展过程中,它会有自己的技术人员设计开发的系统,也会有从专业软件公司那里买来的系统。这些系统可能是由同一种编程语言写的,也可能是由不同的编程语言写的;可能运行在相同的操作系统上,也可能需要运行在不同的操作系统上。
为了保护已有投资,企业在构建新系统的时候,会尽量利用已有的系统以节约人力物力并加快系统开发的速度。参加J2EE规范制定的各厂商都在自己的产品中实现了和老系统的接口,如BEA的WebLogic可以直接调用Tuxedo中的服务,IBM的WebSphere也可以调用CICS的服务。Java本身的跨平台性,使得J2EE产品几乎可以在任何操作系统上运行。因此,选择J2EE,企业可以充分利用已有硬件和操作系统。
对于系统将来的扩展,J2EE规范也考虑得很周全。J2EE规范强制开发者把业务逻辑封装成可重用的组件模式。在系统扩展的时候,原来的组件可以直接使用。另外,即使企业重新购买了别的J2EE产品,由于所有的J2EE产品都遵循一个统一的规范,原来的组件只要经过极少的改动就可以在新的J2EE产品上使用。这样,也避免了企业被一家厂商绑死。
- Vector和ArrayList的区别(中)
l vector是线程同步的,所以它也是线程安全的,而arraylist是线程异步的,是不安全的。如果不考虑到线程的安全因素,一般用arraylist效率比较高。
l 如果集合中的元素的数目大于目前集合数组的长度时,vector增长率为目前数组长度的100%,而arraylist增长率为目前数组长度的50%.如过在集合中使用数据量比较大的数据,用vector有一定的优势。
l 如果查找一个指定位置的数据,vector和arraylist使用的时间是相同的,都是0(1),这个时候使用vector和arraylist都可以。而如果移动一个指定位置的数据花费的时间为0(n-i)n为总长度,这个时候就应该考虑到使用linklist,因为它移动一个指定位置的数据所花费的时间为0(1),而查询一个指定位置的数据时花费的时间为0(i)。
- Action有几种?(中)
除了基本的Action 之外, Struts 还提供了几个其他类型的Action ,这些Action 大大
丰富了Struts 的功能。下面介绍如下儿个常用的Action 。
l DispatchAction: 能同时完成多个Action 功能的Action 。
l ForwardActon: 该类用来整合Struts 和其他业务逻辑组件,通常只对请求作有效性检查。
l IncludeAction: 用于引入其他的资源和页面。
l LookupDispatchAction: DispatchAction 的子类,根据按钮的key ,控制转发给action的方法。
l MappingDispatchAction: DispatchAction 的子类,一个action 可映射出多个Action地址。
l SwitchAction: 用于从一个模块转换至另一个模块,如果应用分成多个模块时,就可以使用SwitchAction 完成模块之间的切换。
- 说说你知道的排序方式(难)
l 插入排序:该算法在数据规模小的时候十分高效,该算法每次插入第K+1到前K个有序数组中一个合适位置,K从0开始到N-1,从而完成排序:
l 冒泡排序:这可能是最简单的排序算法了,算法思想是每次从数组末端开始比较相邻两元素,把第i小的冒泡到数组的第i个位置。i从0一直到N-1从而完成排序。(当然也可以从数组开始端开始比较相邻两元素,把第i大的冒泡到数组的第N-i个位置。i从0一直到N-1从而完成排序。)
l 选择排序:选择排序相对于冒泡来说,它不是每次发现逆序都交换,而是在找到全局第i小的时候记下该元素位置,最后跟第i个元素交换,从而保证数组最终的有序。相对与插入排序来说,选择排序每次选出的都是全局第i小的,不会调整前i个元素了。
l Shell排序:Shell排序可以理解为插入排序的变种,它充分利用了插入排序的两个特点:1)当数据规模小的时候非常高效;2)当给定数据已经有序时的时间代价为O(N)。所以,Shell排序每次把数据分成若个小块,来使用插入排序,而且之后在这若个小块排好序的情况下把它们合成大一点的小块,继续使用插入排序,不停的合并小块,知道最后成一个块,并使用插入排序。这里每次分成若干小块是通过“增量” 来控制的,开始时增量交大,接近N/2,从而使得分割出来接近N/2个小块,逐渐的减小“增量“最终到减小到1。一直较好的增量序列是2^k-1,2^(k-1)-1,…..7,3,1,这样可使Shell排序时间复杂度达到O(N^1.5)
l 快速排序:快速排序是目前使用可能最广泛的排序算法了。一般分如下步骤:1)选择一个枢纽元素(有很对选法,我的实现里采用去中间元素的简单方法);2)使用该枢纽元素分割数组,使得比该元素小的元素在它的左边,比它大的在右边。并把枢纽元素放在合适的位置。3)根据枢纽元素最后确定的位置,把数组分成三部分,左边的,右边的,枢纽元素自己,对左边的,右边的分别递归调用快速排序算法即可。快速排序的核心在于分割算法,也可以说是最有技巧的部分。
l 还有归并排序,堆排序,桶式排序,基数排序
59. 冒泡排序的时间复杂度(易)
O(n*n)
60. 查出一个表中30到50条的数据,sql语句(易)
Select top 21 * from 表名 where id not in
(select top 29 id from 表名order by id) order by id
61.说一下存储过程如何定义,怎么用(易)
Create procedure procedue_name
[@parameter data_type][output]
[with]{recompile|encryption}
as sql_statement
解释:
output:表示此参数是可传回的
with {recompile|encryption}
recompile:表示每次执行此存储过程时都重新编译一次
encryption:所创建的存储过程的内容会被加密
使用:exec proc 存储过程名 参数列表
- TCP与UDP(难)
OSI 和 TCP/IP 模型在传输层定义两种传输协议:TCP(或传输控制协议)和 UDP(或用户数据报协议)。
TCP:
TCP 的目的是提供可靠的数据传输,并在相互进行通信的设备或服务之间保持一个虚拟连接。TCP 在数据包接收无序、丢失或在交付期间被破坏时,负责数据恢复。它通过为其发送的每个数据包提供一个序号来完成此恢复。记住,较低的网络层会将每个数据包视为一个独立的单元,因此,数据包可以沿完全不同的路径发送,即使它们都是同一消息的组成部分。这种路由与网络层处理分段和重新组装数据包的方式非常相似,只是级别更高而已。
为确保正确地接收数据,TCP 要求在目标计算机成功收到数据时发回一个确认(即 ACK)。如果在某个时限内未收到相应的 ACK,将重新传送数据包。如果网络拥塞,这种重新传送将导致发送的数据包重复。但是,接收计算机可使用数据包的序号来确定它是否为重复数据包,并在必要时丢弃它
UDP:
UDP 与 TCP 的主要区别在于 UDP 不一定提供可靠的数据传输。事实上,该协议不能保证数据准确无误地到达目的地。UDP 在许多方面非常有效。当某个程序的目标是尽快地传输尽可能多的信息时(其中任意给定数据的重要性相对较低),可使用 UDP。ICQ 短消息使用 UDP 协议发送消息。
许多程序将使用单独的 TCP 连接和单独的 UDP 连接。重要的状态信息随可靠的 TCP 连接发送,而主数据流通过 UDP 发送。
- sql中如何去掉重复数据?(中)
分为是否有主键两种情况
如果没有主键:
–将不重复的记录插入临时表
select distinct *
into temp
from test
select * from temp
–删除原表数据
delete test
–从临时表复制过来
insert into test
select * from temp
select * from test
–如果有主键
delete test2 where id not in(
select min(id) from test2 group by A,B
)
select * from test2
- html水平对齐和垂直对齐的属性?如何获取单选按钮的值?(易)
水平:align垂直: valign
单选按钮的值:form.控件名[i].value
- 容器的理解(中)
容器也是 java 程序,它的主要作用是为应用程序提供运行环境。,容器用来接管安全性、并发性、事务处理、交换到辅助存储器和其它服务的责任.
以tomcat为例:Tomcat是一个后台服务进程,其它的servlet(相当于DLL)是在Tomcat容器内运行,Broswer只与Tomcat通迅; Tomcat接受browser的请求,经过一系列动作(如果是静态网页,那么装载,按http协议形成响应流;如果是动态的如JSP,那就要调用JDK 中的servlet.jsp接口,解释形成静态网页,按http协议生成响应流发送回browser)后,形成静态网页,返回响应。
- JSP 内置对象有哪些,,分别简述作用?
答案:内置九大对象:
a) request对象:客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。它是HttpServletRequest类的实例。
b) response对象:response对象包含了响应客户请求的有关信息,但在JSP中很少直接用到它。它是HttpServletResponse类的实例。
c) session对象:session对象指的是客户端与服务器的一次会话,从客户连到服务器的一个WebApplication开始,直到客户端与服务器断开连接为止。它是HttpSession类的实例。
d) out对象:out对象是JspWriter类的实例,是向客户端输出内容常用的对象。
e) page对象:page对象就是指向当前servlet自身,有点象类中的this指针。
f) application对象:application对象实现了用户间数据的共享,可存放全局变量。它开始于服务器的启动,直到服务器的关闭,在此期间,此对象将一直存在;这样在用户的前后连接或不同用户之间的连接中,可以对此对象的同一属性进行操作;在任何地方对此对象属性的操作,都将影响到其他用户对此的访问。服务器的启动和关闭决定了application对象的生命。它是ServletContext类的实例。
g) exception对象:exception对象是一个例外对象,当一个页面在运行过程中发生了例外,就产生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。他实际上是java.lang.Throwable的对象。
h) pageContext对象:pageContext对象提供了对JSP页面内所有的对象及名字空间的访问,也就是说他可以访问到本页所在的SESSION,也可以取本页面所在的application的某一属性值,他相当于页面中所有功能的集大成者,它的本 类名也叫pageContext。
i) config对象:config对象是在一个Servlet初始化时,JSP引擎向它传递信息用的,此信息包括Servlet初始化时所要用到的参数(通过属性名和属性值构成)以及服务器的有关信息(通过传递一个ServletContext对象)。
- JSP 动作有哪些,简述作用?
答案: JSP动作是一系列可以调用内建于网络服务器中的功能的XML标签。
j) jsp:include 和子过程类似,JAVA SERVLET暂时接管对其它指定的JSP页的请求和响应。当处理完该JSP页后就马上把控制权交还当前JSP页。这样JSP代码就可以在多个JSP页中共享而不用复制。
k) jsp:param 可以在jsp:include, jsp:forward 或 jsp:params块之间使用。指定一个将加入请求的当前参数组中的参数。
l) jsp:forward 用于处理对另一个JSP或SERVLET的请求和响应。控制权永远不会交还给当前JSP页。
m) jsp:plugin Netscape Navigator 的老版本和 Internet Explorer 使用不同的标签以嵌入一个applet。这个动作产生为嵌入一个APPLET所需要的指定浏览器标签。
n) jsp:fallback 如果浏览器不支持APPLETS则会显示的内容。
- o) jsp:getProperty 从指定的JavaBean中获取一个属性值。
p) jsp:setProperty 在指定的JavaBean中设置一个属性值。
q) jsp:useBean 创建或者复用一个JavaBean 变量到JSP页。
- 写出JAVA的8个基本数据类型
答案:byte、short、int、long、float、double、char、boolean
- 请写出线程同步的方法
答案:synchronized
- 写出java异常处理的5个关键字,并简单描述作用
答案:try、catch、finally、throw、throws
- 描述break和continue控制循环的流程不同之处,简单写代码说明
答案:break——中断本次循环并跳出当前循环
continue——中断本次循环并继续下次循环
- 下面语句是否正确
public class hi{
public int addOne(final int x) {
return ++x;
}
}
这样写对嘛?
答案:这样写不对!
因为addOne中的参数是final类型的,不能够更改。
- 写四个基本的sql语句,分别是增加,更新,查询,删除,其中查询返回数据且按序降序排序。
答案:
增加:insert into users (user_name, user_password) values(‘test’,’123456’);
更新:update users set user_password=’12345678’;
删除:delete from users where user_name=’test’;
查询:select user_name,user_password from users order by user_name desc;
- 写一个方法将两个数组合并成一个数组返回
答案:
public static Object[] concat(Object[] array1, Object[] array2) {
if(array1 == null && array2 == null){
return new Object[0];
}
if(array1 == null){
return array2;
}
if(array2 == null){
return array1;
}
int length1 = array1.length;
int length2 = array2.length;
Object[] concatArray = new Object[length1 + length2];
System.arraycopy(array1, 0, concatArray, 0, length1);
System.arraycopy(array2, 0, concatArray, length1, length2);
return concatArray;
}
- 用java编写一个截取字符串的函数,输入一个字符串和字节数,输入为按字节截取的字符串,但要保证汉字不被截取半个,例如:“我abc”,4,应截取为:我ab”,输入“我abc汉字”6,应该是输出”我abc“。而不是”我abc”+汉的半个
答案:
public static String substring(String source, int length) {
String isoResource = “”;
try {
isoResource = new String(source.getBytes(“GBK”), “ISO8859_1”);
}
catch (java.io.IOException e) {
isoResource = “”;
}
int strLength = isoResource.length();
if (strLength <= 0) {
return “”;
}
if (length <= 0) {
length = 0;
}
if (length > strLength) {
length = strLength;
}
byte[] bs = null;
try {
bs = source.getBytes(“GBK”);
}
catch (UnsupportedEncodingException ex) {
ex.printStackTrace();
bs = new byte[0];
}
int i = 0;
for (i = length – 1; i >= 0; i–) {
if (bs[i] > 0) {
break;
}
}
if ((length – 1 – i) % 2 == 1) {
length = length + 1;
}
return new String(bs, 0, length);
}
- 一个工程,包含哪些阶段?你在一般从事哪个阶段?
答案:工程阶段包括:需求分析、架构设计、系统开发、系统测试、系统部署、系统维护等等
- UML有哪几类图,你都用过什么工具,简述方法。
答案:UML用例图与UML时序图
- 你都知道什么文档类别?他们的作用是什么?测试用例应写在什么文档里?
答案:需求分析文档、开发文档、测试文档、数据库设计文档等等。
- 你都知道什么关系型数据库?你所熟悉的数据库是哪个?
答案:MySQL、SQLServer、Oracle、DB2、Sysbase
比较熟悉SQLServer
- 有三张表 学生表 课程表 选课表
(1) 用sql语句建表,主键,自己设计。
(2) 查询年龄20岁以下的学生,要查5个字段,并且这5个字段含概了这3张表,且第一个表里没有年龄列,只有生日列。
(3) 用.Net3.5中的LINQ实现第二问。
- ORM框架技术用过什么?
答案:常见的ORM框架有:Torque,OJB,Hibernate,TopLink,Castor JDO,TJDO,Active Record,ADO.NET Entity Framework。用过的是:Hibernate、ADO.NET Entity Framework 、JPA