技术面试真题汇总-答案

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1、Tomcate的根目录有哪几个文件
A: 1.config 配置文件存放的路径
2.webapps 项目部署的目录
3.bin tomcat运行需要的脚本与jar包的目录
4.lib 运行项目时所需要的jar包的目录
5.work 部署项目的缓存目录
6.temp 临时文件存放的目录
7.logs 记录日志的目录


2、说说E-learning的考试系统
3、从数据库51条数据中随机取50条
A: select * from (select * from T_EXAMPLE order by DBMS_RANDOM.RANDOM) where rownum <= 50

4、servlet 与jsp有什么区别
A: jsp是servlet的升级版,jsp更加重视视图层的显示,servlet更加倾向于数据处理已经页面跳转的控制

5、tomcate怎么编译jsp
A: tomcat将jsp中的java代码编译成字节码,将jsp中的EL表达式以及JSTL标签都解析完,之后只剩下HTML+JS代码

8、SQL一般如何提高速度
A: 1.查询字段使用索引字段,精确查询。
2.优化sql语句,尽量减少表的关联,尽量走索引,将大数据的表查询放在前面
3.尽量定位查询字段,不要做全表查询,查询时尽量查询自己需要的数据的字段,返回结果也同样尽量返回自己需要的返回字段
4.查询条件能过滤掉大批数据的条件放后面。
5.添加、修改、删除批量提交。

9、一段很长很长的sql语句现在速度变得越来越慢了,该从哪方面着手,怎么做?
两部分:一部分优化sql语句,另一部分是优化存储。
优化SQL语句:
A: 1.如果建立了索引,则查询的时候,尽量通过索引字段去查询;如果没有建立索引的话,则建立索引,然后通过索引字段去查询;
2.将大数据表的查询放在前面;
3.尽量定位查询字段,不要做全表查询,返回结果时,也尽量返回自己需要的数据结果
4.使用PreparedStatement做查询,不要使用Statement
优化存储:
1.建立索引
2.建立分区
3.分表存储
4.建立视图


11、在开发时用到JAVA的哪些方面?
IO流、jdbc、数据结构、反射、多线程、socket、常用类


12、什么是TOMCAT,怎样启动停止,配置文件,日志文件的存储。
A: tomcat其实是一种web容器,java编写的web项目可以部署在其上,用户在客户端请求时,都是先将请求发送到tomcat上,tomcat再将请求发送到对应的项目上;
在eclipse或者myeclipse中的servers中选中对应的tomcat,右键选择Debug Server或者Run Server

13、数据库连接技术。
A: JDBC:这是一种使用Oracle提供的库使得web项目直接跟数据库打交道,即获取数据库的访问权,对数据库进行增删改查的操作,释放数据库的访问权,这种技术在数据访问量大的时候,会因为每一次访问都需要获取数据库的访问权,访问结束后释放数据库的访问权而给数据库造成很大的压力;
JNDI:这是提供

了解决上述JDBC的问题的一种技术,JNDI中是通过Tomcat与数据库交道,Tomcat一次性从数据库中取出多个数据库连接,放在连接池中,当我们的web程序需要访问数据库时,则直接从连接池中获取数据库连接,用完后则将数据库连接的资源放回连接池中。这样可以减少数据库的压力也可以提高效率。

15、什么是数据结构,你学过哪些数据结构,并描述特性
A: 数据结构就是数据在内存中存储的一种结构。
我学过List,Set还有Map这三种数据结构,特性如下,
1.List与Set继承于Collection接口,Map不继承于Collection;
2.List底层是由数组实现的,Set是由散列表实现的,Map是由键值对实现的;
3.List中的数据是有序可重复的,Set是无序不可重复的,Map中是有序啊,但是Key值不可重复,Value可重复的;
4.List和Set可以通过Iterator遍历,而Map是通过Key值来遍历的
Java的数据结构包括以下部分:
1.List
2.Set
3.Map
4.数组
5.树
6.栈
7.向量

16、jsp 的九大内置对象
A: request, response, page, session, application, pageContext, config, exception, out

17、oracle的存储过程
A: Oracle的存储过程是一种预编译的SQL语句,它可以实现模块化设计,也就是说,只要创建了一个存储过程,以后都可以直接调用这个存储过程。存储过程是保存在数据库中的,如果一种sql语句需要多次调用的话,可以将其创建为一个存储过程,这样能够提高效率。
优点:
1、重用性高
2、执行效率快
3、减少通信
缺点:
可移植性差

19、3个string变量,赋值null,“ ”,“__”有什么区别。
A: String str1 = null;表示声明了一个String对象str1,且没有给其分配空间,
String str2 = " ";表示定义了一个String对象str2,且给其赋值为" ";
String str3 = "__";表示定义了一个String对象str3,且给其赋值为"__";

20、 归并排序
A: 归并排序是利用递归和分而治之的技术将数据序列划分为越来越小的的半子表,再对子表进行排序,再使用递归步骤将排好序的子表一步一步合并成越来越大的有序序列,归并排序总的来说包括以下两个步骤:
a. 划分子表;
b. 合并半子表;
归并排序的代码如下:
public class MergeSort {
private void merger(int[] a, int first, int mid, int last ){

List list = new ArrayList();

int i = first;
int j = mid;

while(i < mid; j < last){
if (a[i] < a[j]) {
list.add(a[i]);
i++;
} else {
list.add(a[j]);
j++;
}
}

while (i < mid) {
list.add(a[i]);
i++;
}

while (j < last) {
list.add(a[j]);
j++;
}

int

index = 0;
while (index < list.size()) {
a[first + index] = list.get(index);
index++;
}
}

public void mergeSort(int[] a, int first, int last){
if (first < last) {
int mid = (first + last) / 2;
mergeSort(a, first, mid);
mergeSort(a, mid, last);
merger(a, first, mid, last);
}
}
}


21、谈谈你了解的MVC
A: MVC是一种开发模式,是将整个项目分为三个层去开发的,分别为V(视图层),C(控制层),M(模型层),其中的视图层也就是我们平常说的客户端,也就是浏览器上看到的页面,用来显示给客户看的,和发送客户请求的;控制层是servlet,用来接收客户端发送过来的数据,同样将从数据库中查询出来的数据发送到客户端,以及控制页面的跳转;模型层包括实体类,service层,以及dao层,这一层可以根据业务的需要去调用想用的dao层,然后与数据库进行交互完成相应的数据操作。MVC的开发模式,使得软件开发更加的模块化,使得开发过程中软件的耦合度更低,这样使得软件的维护和扩展更加容易,我们只需要在相应的模块进行更改就可以了,不需要涉及到其它的模块
1、解释一下mvc
2、解决一个什么问题
3、优点与运用场景
4、缺点或不适合什么运用场景

22、 Arraylist 和linklist 的区别
A: ArrayList和Linklist都是接口List的实现类,里面的数据都是有序可重复的。
区别:
ArrayList: 采用的是数组形式保存对象的,访问速度更快,而Linklist的插入和删除元素的速度更快

23、写一个完整的JDBC
A: 以orcale为例
public final String ORACLE_DRIVER = "oracle.jdbc.driver.OracleDriver";
public final String ORACLE_URL = "jdbc:oracle:thin:@localhost:1521:orcl";
public final String ORACLE_USERNAME = "scott";
public final String ORACLE_PASSWD = "scott";

(1).注册厂商驱动
Class.forName(ORACLE_DRIVER);
(2).获取连接
Connection con = DriverManager(ORACLE_URL, ORACLE_USERNAME, ORCALE_PASSWD);
(3).使用预编译命令对象预编译SQL语句以及设置参数
String name = "测试";
int age = 20;
String sql = "INSERT INTO T_EXAMPLE VALUES(SEQ_EXAMPLE, ?,?)";
PreparedStatement pstm = con.prepareStatement(sql);
pstm.setString(name);
pstm.setInt(age);
(4).执行与数据库交换的动作
int result = pstm.excuteUpdate();
(5).关闭数据库连接,释放数据库资源
if (null != pstm) {
pstm.close();
}
if (null != con) {
con.close();
}

24、list和map 的区别?都是怎么注入值和获值的?
A: 区别:
(1).list是集成接口Collection,而Map不是;
(2).list底层是由数组去实现的,Map是由键值对去实现的;
(3).list中的数据是有序可以重复的,Map是有序的,键值不可重复,值可以重复的;
(4).list可以iterator和get(index)遍历数据,而Map是通过遍

历键值来实现值的遍历的;
注入值:
list:使用add(Object obj)方法;
map:使用put(String key, String value);的方法
获值:
list:get(i)的方法;
map:get(String key)的方法;

25、list有几种遍历方法?是怎样遍历的?
A: 使用get(index)方法:
for(int i = 0; i < list.size(); i++){
Object obj = list.get(i);
}

使用iterator
Iterator ite = list.iterator();
while (ite.hasNext()) {
Object obj = ite.next();
}

26、怎样用JQ获取一个input,并注入值?
A: 获取input:$("input")这样可以查找到所有的input,然后我们可以根据我们要使用的input的一些独有特性来选择我们需要的input,比如说我们要使用的input的class为test,我们就可以使用如下语句:
$("input[class='test']")
注入值:
$("input[class='test']")

27、hibernate如何接收值

28、JQ通过ID接受input值
A: $("input[id='idE']").val();
又由于在一个页面id是唯一的,我们还可以使用以下方法
$("#idE").val();

29:oracle事物
A:oracle的事务是指的因为要完成某个功能而绑定在一起的一组SQL语句,也就是所谓的逻辑SQL语句组。且这一组SQL语句中的任何一句执行失败,接下来都要执行回滚操作,使得这组SQL语句中所涉及到的数据库中表的数据返回到修改前的数据。因此如果需要完成如果失败都失败,要成功则需全部成功的话,可以使用事务。当然使用事务的话,需要满足事务的以下4个特性:
a.原子性:是指事务对数据库的修改要么全部执行,要么都不执行
b.隔离性:是指并发的事务需都独立执行,不能影响到其它的事务
c.一致性:是指事务执行前后,数据库的状态都必须满足所有的完整性约束
d.永久性:是指事务提交的数据永久的保存在数据库中,并不能被回滚掉

30、数据库中,两个表是通过什么连接的
A: 数据库中,两个表是通过外键进行连接的,而这个外键一般是被关联表的主键,而这就是数据库的第三范式中的一条。
两个表之间的连接方式有以下几种:
a.内连接:两个表中的数据通过外键完全匹配才显示出来;
b.自连接:自连接是指一张表自己跟自己通过外键来连接;
c.左连接:左连接是指左边的表,也就是写在左边的表的数据全部显示出来,而右边的表只显示与左边的表完全匹配的部分数据;
d.右连接:右连接时指右边的表,也就是写在右边的表的数据完全显示出来,而左边的表只显示出与右边的表完全匹配的部分数据;
e.完全连接:完全连接是指左右两边表的数据都会完全显示出来;
f.笛卡尔连接:迪卡尔连接是指会显示出两张表的数据条数之积的条数的数据出来;

31、面向对象是怎么理解?
A:面向对象是一种编程思想,是一种

更加符合这个世界人们思维的编程思想,而采用这种编程思想编写出来的代码更加的安全,更加容易维护,它具有以下特性:
抽象:抽象是指将一类具有共同特性和行为方式的东西抽象成一个模板,这里只在乎这些东西的共同的部分,而不关心其中的异处;
封装:封装是指对外界只提供实现行为方式的方法,而外界不需要知道具体是怎么实现的,同样只给外界提供访问属性的接口,这样使得数据更加的安全。所有封装分为属性封装和方法封装;
继承:继承是指子类继承父类除了构造方法之外的一切非私有的属性和方法;
多态:多态是指一种事务的多种表现,分为重载,重写,以及将父类的对象指向子类的对象这三种多态;


32、什么是逻辑删除?什么是物理删除?有什么区别?
A: 逻辑删除并非是将数据真的从数据库中删除掉,而是使用一个额外的字段来表示该数据是否被删除掉了,其实数据还在数据库中;
物理删除时将数据真的从数据库中删除掉,使用物理删除后,数据将不会在数据库中了,且无法回滚了;
区别:
逻辑删除并发真的对数据进行删除操作,只是使用一个标志量标识是否删除数据;
物理删除时将数据真的从数据库中删除掉,因此对数据进行删除操作时,推荐使用逻辑删除,而不要使用物理删除。

33.用java做一个编译器把jsp编译成servlet
使用WebLogic JSP编译器来完成,其语法如下:
java weblogic.jspc -options fileName;
所以java做一个编译器把jsp编译成servlet的代码如下,
// 导入File类
#import ....File

public class JspCompiler {
public static void main(String[] args){
String fileName = "test.jsp";
String dir = "E:" + File.separator + "test" + File.separator;
JspCompiler jspCom = new JspCompiler();
jspCom.javaCompile(dir, fileName);
}

public void javaCompile(String dir, String fileName){
if (!fileName.endsWith(".jsp")) {
System.out.println("该文件不为jsp文件");
return;
}

StringBuffer sb = new StringBuffer("");
// 普通项目的jsp文件
sb.append("java weblogic.jspc -d ");
// web项目的jsp文件
// sb.append("java weblogi.jspc -webapp ");
sb.append(dir);
sb.append(" ");
sb.append(fileName);

Runtime rt = Runtime.getRuntime();
if (null != rt) {
Process p = rt.exec(sb.toString());
}

}
}

34.strusts2的概念,WEB开发用到哪些技术?

35.项目中报错你是如何解决的
A: 根据项目中报的错误类型以及出错的地方来解决问题,首先是自己思考与解决,其次自己无法解掉的是后可以上网搜索和问老师,然后记录下来,

页面的错误,可以通过F12来查看问题及出错的函数,如果没有报错,但是得不到

自己想要的结果可以使用alert()方法来查看代码逻辑的问题;

后台java代码出错,最常用的是使用调试的方法来debug,步骤为,
a.设置断点,
b.将tomcat的运行方式改为debug server,
c.在代码中使用F6逐步调试,使用F5进入调用的方法中调试,使用F8跳到下一个断点处调试

36.使用的中间键(tomcat)开发工具是什么(myeclipse)?数据库是用的什么?
A: 使用的开发工具是myeclipse,使用的数据库是Oracle

37.你学的都是前台的东西是不是你更善于做前台开发
A: 不是的,目前我学的东西不只是前台的东西,我同样学了java开发如javaSE,javaEE,还学习了Oracle的数据开发及sql语句。学前台只是为了更好的理解前台与后台的联系,前台与后台的交互,更好的理解整个b/s程序的结构及运行;

38.C或c++与java的区别
A: c是一种更方便和使用与更底层设备打交道的软件开发语言,从c在嵌入式的广泛运用便可知道,c是一种面向过程的编程语言;
C++是一种在c语言上改良的语言,是一种面向对象的语言,更方便用来做C/S模式的编程,如网络游戏就是C++语言的一种重要的应用场景;
java同样也是一种面向对象的语言,它具有良好的移植性,java适合用来做b/s模式的编程,以及android的编程

42.项目中报错你是如何解决的
1、查看控制台报错信息,定位到代码
2、根据定位代码设置断点,开始debug调试代码
3、通过搜索引擎查询资料,解决问题,或技术网站发帖解决
4、对错误有一定了解程度后,去咨询老员工或者是其他同事




相关文档
最新文档