Java-最近面试笔试总结
1. WebLogic和Tomcat的区别?
相同点:WebLogic和Tomcat都是基于java的基础架构来满足实时处理需求.
不同的版本与jdk版本兼容和有所不同;因为都是要和前台交互,所以他们都基于sun公司的servlet来实现的。
不同点:① WebLogic是j2ee的应用服务器(application server),包括ejb ,jsp,servlet,jms等等
Tomcat只能算Web Container,是官方指定的JSP&Servlet容器
② WebLogic Server既实现了网页群集,也实现了EJB组件 群集,而且不需要任何专门的硬件或操作系统支持。
网页群集可以实现透明的复制、负载平衡以及表示内容容错,在扩展性方面WebLogic远远超越了Tomcat
③ Tomcat开源免费,WebLogic不开源不免费
2. GB2312、GBK、GB18030 这几种字符集的主要区别是什么?
① GB2312
GB 2312 或 GB 2312-80 是简体中文字符集,共收录 6763个汉字,对于人名、古汉语等方面出现的罕用字,
GB 2312不能处理,这导致了后来GBK及GB 18030汉字字符集的出现。
② GBK:即汉字内码扩展规范
GBK共收入21886个汉字和图形符号,GBK 采用双字节表示。
③ GB18030
是现在使用的最新内码子集,共收录汉字70244个。
3. 说说你知道的几种数据库,以及它们之间的区别。
MySQL:体积小、速度快、免费开源;支持多种操作系统。
MySQL最大的缺点是其安全系统,主要是复杂而不标准;没有一种存储过程(Stored Procedure)语言
Oracle:能在所有主流操作系统上运行(包括 windows);获得最高认证级别的ISO标准认证
对硬件的要求很高;价格比较昂贵;管理维护麻烦一些;操作比较复杂,需要技术含量较高;
SQL Server: 易用性、适合分布式组织的可伸缩性;与许多其他服务器软件紧密关联的集成性
SQL Server只能在Windows上运行;没有获得任何安全证书
4. 前台与后台的数据交换方式以及优缺点。
5. 小球落地再次弹起一半的问题:第n次跳多高,总共经过多少米。
6. 二叉搜索树的遍历以及算法实现;二叉树的层数和节点问题。
7. 什么是视图,视图的作用?
视图是一种虚表,视图建立在已有表的基础上。
作用:控制数据访问;简化查询;避免重复访问相同的数据
1、视图能够简化用户的操作
2、视图使用户能以多钟角度看待同一数据
3、视图对重构数据库提供了一定程度的逻辑独立性
4、视图能够对机密数据提供安全保护
5、适当的利用视图可以更清晰的表达查询,
视图的优点:
提高数据安全性,可以不让用户看到表中的某个字段.比如password,你只给他们执行视图的权限,不给执行表的权限,他们就无法查看全部数据.
还有可以建立一个视图,内容包括两个表,更新的时候只需要指定ID,而不用管它来自哪个表,对应表中的数据就会自动更新.
8. 对事务的理解,事务的特性。
事务是为了保证对同一数据表操作的一致性。
即多条语句放在事务中执行的时候,要么一起成功,要么全不成功
具备 4大特性: 原子性 一致性 隔离性 和持久性
A是原子性(atomic):事务中包含的各项操作必须全部成功执行或者全部不执行。任何一项操作失败,将导致整个事务失败,其他已经执行的任务所作的数据操作都将被撤销,只有所有的操作全部成功,整个事务才算是成功完成。
B是一致性(consistent):保证了当事务结束后,系统状态是一致的。那么什么是一致的系统状态?例如,如果银行始终遵循着"银行账号必须保持正态平衡"的原则,那么银行系统的状态就是一致的。上面的转账例子中,在取钱的过程中,账户会出现负态平衡,在事务结束之后,系统又回到一致的状态。这样,系统的状态对于客户来说,始终是一致的。
c是隔离性(isolated):使得并发执行的事务,彼此无法看到对方的中间状态。保证了并发执行的事务顺序执行,而不会导致系统状态不一致。
D是持久性(durable):保证了事务完成后所作的改动都会被持久化,即使是发生灾难性的失败。可恢复性资源保存了一份事务日志,如果资源发生故障,可以通过日志来将数据重建起来
9. 请说出三种数据结构和查询算法,并各挑出两种说明其优缺点。
10. SQL多表查询问题(手写即选择给出的SQL的查询结果)
11. 编程题
① 给出一种定义的语言,求1--1000(包括1000)之间偶数之和----考察快速学习的能力
② 给出三边,如何判断是等腰/等边/一般的三角形?
③ 编写一个方法,传入一个1-100的数组,这个数组存储班上100个人的成绩,对成绩进行排序,并返回数组。
④ 给出n,打印出一个给定的图形
12 .Java8新特性
昨天技术面我只记得这么多了
1、数据库中是怎么获取时间
select now();//输出当前数据库时间
select sysdate();//输出系统时间
select curdate();//输出 2011-11-08
select curtime();//输出17:18:49
2、springmvc有哪些注解
1. @Controller
2. @RequestMapping
3. @PathVariable
4. @RequestParam
5. @RequestBody
6. @ResponseBody
3、spring的工作原理,springmvc与spring的关系
spring 是是一个开源框架,是为了解决企业应用程序开发,功能如下
◆目的:解决企业应用开发的复杂性
◆功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能
◆范围:任何Java应用
简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
◆轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。
◆控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。
◆面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。
◆容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。
◆框架——Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。
所有Spring的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码。它们也为Spring中的各种模块提供了基础支持。
Spring的两大核心AOP与IOC,可以单独用于任何应用,包括与Struts等MVC框架与Hibernate等ORM框架的集成,目前很多公司所谓的轻量级开发就是用 Spring + Struts(2)+Hibernate。
Spring MVC就是一个MVC框架,个人觉得Spring
MVC annotation式的开发比Struts2方便,可以直接代替上面的Struts(当然Struts的做为一个非常成熟的MVC,功能上感觉还是比Spring强一点,不过Spring
MVC已经足够用了)。当然spring mvc的执行效率比struts高,是因为struts的值栈影响效率
spring mvc类似于struts的一个MVC开框架,其实都是属于spring,spring
mvc需要有spring的架包作为支撑才能跑起来
如果有人问你什么事控制反转(spring的核心面试常问道):你就回答,本来程序是由我们new
出来的嘛,后来交给程序控制进行new出来了嘛,这就是控制反转嘛
5、for与foreach的区别
1.如果只是遍历集合或者数组,用foreach好些,快些。
2.如果对集合中的值进行修改,就要用for循环了。其实foreach的内部原理其实也是Iterator,但它不能像Iterator一样可以人为的控制,而且也不能调用iterator.remove();更不能使用下标来访问每个元素,所以不能用于增加,删除等复杂的操作。举个例子:
for(String aid:list){
if(aid.equals("aa")){
list.remove(aid); //这行会报错,不能修改list的长度
}
}
所以foreach语句是for语句的特殊简化版本,但是foreach语句并不能完全取代for语句
6、webService的理解
webservice 只就是POST类型的
HTTP请求;以往的HTTP请求都是 浏览器从FORM
里发出的
用于提交 表单,比如
浏览器提交 username=tom&password="123456"
给服务器,服务器验证完 用户名和密码正确后 再返回字符串 "success".
后来 发现
可以把提交的内容做的更复杂, 因为服务器可以接受更多东西以计算。
比如:提交给服务器 <username>tom</username>
<password>123456</password>
<bothdata>19800305</bothdate>
........ 还有很长就不写了
然后服务器返回<result>success</result>
但是这种新的提交方法 再叫作POST表单请求就不合适了,起个新的名子吧,就叫WEBSERVICE,这种提交的格式就叫做 XML 。因为这东西 比 原来那个
username=tom&password="123456" 更容易被人读懂,而且可以存储表达更多东西。
至于于那个WDSL 就是一种格式规范,他就像是小学语文规定“每个新段落开头要空两个字” 没什么区别它规定了 提交WEBSERVICE 时 应该
把 开头写什么标示,结尾写什么标示
7、EasyUI的下拉框是传的是什么数据
8、ajax的原理与怎么判断是同步还是异步
异步
9、同步与异步
Java中交互方式分为同步和异步两种:
同步交互:指发送一个请求,需要等待返回,然后才能够发送下一个请求,有个等待过程;
异步交互:指发送一个请求,不需要等待返回,随时可以再发送下一个请求,即不需要等待。
区别:一个需要等待,一个不需要等待,在部分情况下,我们的项目开发中都会优先选择不需要等待的异步交互方式。
哪些情况建议使用同步交互呢?比如银行的转账系统,对数据库的保存操作等等,都会使用同步交互操作,其余情况都优先使用异步交互。
10、数据的持久化
数据持久化就是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称. 数据模型可以是任何数据结构或对象模型,存储模型可以是关系模型、XML、二进制流等。
使用数据持久化有以下好处:
1、程序代码重用性强,即使更换数据库,只需要更改配置文件,不必重写程序代码。
2、业务逻辑代码可读性强,在代码中不会有大量的SQL语言,提高程序的可读性。
3、持久化技术可以自动优化,以减少对数据库的访问量,提高程序运行效率。
数据持久化对象的基本操作有:保存、更新、删除、查询等。
11、存储过程的理解
存储过程是一组预先编译好的sql代码,由于是已经编译好的代码,所以执行的时候不必再次进行编译,从而提高了程序的运行效率
12、数据结构和算法了解多少
13、linux环境下,你怎么搭建Web环境
安装JDK
先安装JDK1.6
敲入以下命令
cd /home/liuyan/javaee tar –zxvf jdk-6u22-linux-i586-rpm.bin |
即可解压缩JDK包。
解压缩成功后还不算完,我们还要手工设定一下环境变量!
用VI编辑器编辑一下环境变量文件
vi /etc/profile |
在文件的末尾加上以下几句话
JAVA_HOME=/home/liuyan/javaee/ jdk-6u22-linux-i586 PATH=$PATH: /home/liuyan/javaee/ jdk-6u22-linux-i586/bin CLASSPATH=.:/home/liuyan/javaee/ jdk-6u22-linux-i586/jre/lib/rt.jar export JAVA_HOME PATH CLASSPATH |
保存退出
注意:其中jdk-6u22-linux-i586是解压缩jdk后的包名。
按此配置,重新登录linux后,jdk命令即生效。
在控制台输入
java –version |
即可验证是否安装成功
安装Tomcat6
运行一下命令
cd /home/liuyan/javaee tar –zxvf apache-tomcat-6.0.29.tar.gz |
直接解压缩tomcat就行,tomcat在这3个文件的安装中算是最简单的。
解压缩后的文件夹应该是apache-tomcat-6.0.29
安装MySql数据库
运行一下命令
tar –zxvf mysql-5.2.0-falcon-alpha-linux-i686-glibc23.tar.gz |
先将MySql的包解压缩,因为安装rpm的文件会涉及到很多依赖包,所以笔者这里偷懒了,用了一个linux解压缩文件。
解压缩完成后,先修改一下解压缩后的包名
cd /home/liuyan/javaee/ mv mysql-5.2.0-falcon-alpha-linux-i686-glibc23 mysql5 |
将解压缩后的文件夹重命名为mysql5
将MySql自带的配置文件拷贝到系统环境变量中,运行以下命令
cp /home/liuyan/javaee/mysql5/support-files/my-medium.cnf /etc/my.cnf |
下面我们修改一下Mysql的编码格式
vi /etc/my.cnf |
修改内容如下
添加 |
这样mysql编码都为utf-8
下面我们运行以下命令初始化mysql的数据
cd /home/liuyan/javaee/mysql5 scripts/mysql_install_db –user=root |
初始化数据,设定mysql的使用用户为root,注意这个root用户和linux的root用户是两码事。
数据安装成功后运行以下命令即可以后台进程的方式启动mysql服务
cd /home/liuyan/javaee/mysql5 bin/mysqld_safe –user=root |
输入以下命令
netstat –anp | more |
看看是否有3306的端口被占用了?
当然,我们也可以修改/etc/profile文件增加mysql的环境变量,方法和jdk差不多。
PATH=$PATH: /home/liuyan/javaee/mysql5/bin |
千万别忘记
要想运行你的Java EE项目,还差一点点,将mysql的jar包拷贝到jdk/jre/lib/ext下面,这样jre才能找得到mysql数据库的驱动程序。
运行以下命令
cd /home/liuyan/javaee/apache-tomcat-6.0.29/bin ./startup.sh |
即可运行您的项目了。
UML是什么,你用它来做什么?
统一建模语言
工程中各个模块、类之间的将架构图,可以清晰地分析出各个模块间的关系!
15、物联网是干什么的?