厦门亿联2018面试题
一、选择器
public class EqTest {
public static void main(String[] args) {
EqTest e = new EqTest();
}
public EqTest() {
String s = "Java";
String s2 = "java";
// if (s.equalsIgnoreCase(s2))
{
System.out.println("相等");
} else {
System.out.println("不相等");
}
}
}
在上面的java代码的注释行位置,放置(C)测试代码能输出“相等”的结果(单选)
C:if (s.equalsIgnoreCase(s2))
2.研究下马的java代码:
public class TestException {
public static void main(String[] args) {
int n[] = {
0, 1, 2, 3, 4
};
int sum = 0;
try {
for (int i = 1; i < 6; i++) {
sum = sum + n[i];
}
System.out.println("sum+" + sum);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("数组越界");
} finally {
System.out.println("程序结束");
}
}
}
输出结果是(C);
结果:数组越界 程序结束
3.考虑下列java代码:
public class A {
public static void main(String[] args) {
try {
System.out.println("HelloWorld!");
}
}
}
程序报的错为:Syntax error, insert "Finally" to complete BlockStatements
其中错误的是(A)。(单选)
A:没有catch和finally块 B:没有抛出异常的代码不能出现在try代码块内
C:如果没有catch块而使用try,main()会总是抛职异常 D:class A 没有throws IOException
try要一个catch或者finally
4.研究下面的java代码:
switch (x) {
case 1:
System.out.println(1);
case 2:
case 3:
System.out.println(3);
case 4:
System.out.println(4);
}
当x=2;时,运行结果是(C)。(单选)
C:单选结果是3和4
5.在java中,关键字(A)使类不能派生出子类(单选)
A:final
我的博客关于关键字http://www.cnblogs.com/yangliguo/p/7477296.html
6.下面关于servlet的陈述正确的是:(B C)
A:我们在浏览器的地址栏直接输入要请求的Servlet,该servlet默认会使用doPost方法处理请求
B:servlet运行在服务端
C:servlet的生命周期包括:实例化,初始化,服务,破坏,不可以用
D:servlet不能向浏览器发送Html标签
注:Servlet生命周期分为三个阶段:
1、初始化阶段 , 调用init()方法;
2、响应客户请求阶段, 调用service()方法;
3、终止阶段, 调用destroy()方法。
7.在JAVA编程中,以下(B)命令能将java源文件转换为类文件。(单选)
A:appletviewer(小程序浏览器) B:javac
C:java D:以上所有选项都不正确
javac是JDK的标准编译工具,常见的形式为:javac <选项<源文件>。它可能的选项包括:
-g:生成所有调试信息。
-g:none:生成无调试信息。
-g:{lines,vars,source}:生成只有部分调试信息。
-nowarn:生成无警告。
-verbose:输出关于编译器正在做的信息。
-deprecation:输出使用了不鼓励使用的API的源程序位置。
-classpath <路径>:指定用户类文件的位置。
-sourcepath <路径>:指定输入源文件的位置。
-bootclasspath <路径>:覆盖自举类文件的位置。
-extdirs <目录(多个)>:覆盖安装的扩展类的位置。
-d <目录>:指定输出类文件的位置。
-encoding <编码>:指定源文件中所用的字符集编码。
-target <版本>:生成指定虚拟机版本的类文件。
java命令是JDK默认的java执行程序,在这里值得注意的是在执行带包的.class文件时,需要使用标准的Java包形式。
Windows下文件名为jar.exe,Linux下文件名为jar。它的运行需要用到JDK安装目录下lib目录中的tools.jar文件。jar命令行格式为:
jar {ctxu}[vfm0M] [jar-文件] [manifest-文件] [-C 目录] 文件名
其中{ctxu}是jar命令的子命令,每次jar命令只能包含一个子命令,这些子命令含义如下。
-c:创建新的JAR文件包。
-t:列出JAR文件包的内容列表。
-x:展开JAR文件包的指定文件或者所有文件。
-u:更新已存在的JAR文件包(添加文件到JAR文件包中)。
[vfm0M]中的选项可以任选,也可以不选,它们是jar命令的选项参数。
-v:生成具体报告并打印到标准输出。
-f:指定JAR文件名,通常这个参数是必须的。
-m:指定需要包含的MANIFEST清单文件。
-0:只存储,不压缩,这样产生的JAR文件包会比不用该参数产生的体积大,但速度更快。
-M:不产生所有项的清单(MANIFEST〕文件,此参数会忽略-m参数。
8.下面对http请求消息使用Get和Post方法陈述正确的是:(B C)
A:post方法提交信息可以保存为书签,而get则不行
B:可以使用GET方法提交敏感数据
C:使用POST提交数据量没有限制
D:使用post方法提交数据比get方法快
注:
- A错,说的刚好相反
- 可以使用GET方法提交敏感数据,但不安全,所以不建议
- GET方式提交的数据最多只能是1024字节,理论上POST没有限制,可传较大量的数据
- post方法提交数据比get方法慢
GET的优点:
1.执行效率比POST高。
2.可以通过url传递数据,查找数据的时候就会体现到它的好处。
GET的缺点:
1.安全性很低,因为上传的数据都会显示在url上,所以一般用在上传无关紧要的数据上。
2.上传的数据量较小,一般不能超过4K.这也是因为url的长度而被限制的。POST优点:
1.安全性高,但是也不是很高,如果想要高安全性的话就用https传输协议。
2.上传的数据量比GET大得多。“理论上讲,POST是没有大小限制的,HTTP协议规范也没有进行大小限制,说“POST数据量存在 80K/100K的大小限制”是不准确的,POST数据是没有限制的,起限制作用的是服务器的处理程序的处理能力。”POST缺点:
1.执行效率比GET低,但是现在的计算机都很强大,这些几乎可以忽略不计,所以建议一般都使用POST方式。
2.不可以通过url传递数据,有时候可能会不方便.
9.在web应用程序中web.xml配置类Servlet的信息,如果你的项目为LoginDemo,那么最可能位于哪个目录下(D)
A:LoginDemo/ B:LoginDemo/src
C:LoginDemo/WEB-INF/bin/ D:LoginDemo/WEB-INF/
注:web.xml文件是用来初始化配置信息,web.xml是放置在WEB-INF目录中
(1)/WEB-INF/web.xml 是部署描述文件
(2)/WEB-INF/classes 用来放置应用程序用到的自定义类(.class),必须包括包(package)结构。
(3)/WEB-INF/lib 用来放置应用程序用到的JAR文件。
10.jsp在转移阶段生成文件的扩张名是(A,B)
A:class B:java
C:exe C:bin
注:web容器处理JSP文件请求的三个阶段
翻译阶段:这一个阶段,编写好的jsp文件首先被web容器中的jp引擎转换成java源代码
编译阶段:jsp文件所翻译的java源代码会被编译成可执行的字节码
请求阶段:当容器接受了客户端请求之后,就执行jsp编译的字节码文件,处理完成请求之后,容器再把生成的页面反馈给客户端显示。
简答题
1.String和StringBuder,stringbuff的区别?
对字符串操作三者在执行速度方面的比较
StringBuilder StringBuffer String
String <(StringBuffer,StringBuilder)的原因
String:字符串常量
StringBuffer:字符创变量
StringBuilder:字符创变量
从上面的名字可以看到,String是“字符创常量”,也就是不可改变的对象。
String s = "abcd";
s = s+1;
System.out.print(s);// result : abcd1
JVM是这样解析这段代码的:首先创建对象s,赋予一个abcd,然后再创建一个新的对象s用来;执行第二行代码,也就是说我们之前对象s并没有变化,所以我们说String类型是不可改变的对象了,由于这种机制,每当用String操作字符串时,实际上是在不断的创建新的对象,而原来的对象就会变为垃圾被GC回收掉,可想而知这样执行效率会有多底。
而StringBuffer与StringBuilder就不一样了,他们是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一个对象上操作的,这样就不会像String一样创建一些而外的对象进行操作了,当然速度就快了。
StringBuilder:线程非安全的
StringBuffer:线程安全的
当我们在字符串缓冲去被多个线程使用是,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的。当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用StringBuilder而不用StringBuffer的,就是速度的原因。
我的博客里有关于字符串的详解http://www.cnblogs.com/yangliguo/p/7496431.html
2、描述下HsahMap、hashtable、hashset的共同点与不同点
我的博客里有关于HsahMap、hashtable、hashset的详解http://www.cnblogs.com/yangliguo/p/7476788.html
编程题
编写一个工具类CollectionTools,为其编写一个方法insertSect,功能是计算连个集合(Collection)的交集:传入参数是两个集合,返回结果是计算出来的交集。
import java.util.HashSet;
import java.util.Set;
public class CollectionTools {
public static Set<Integer> insertSet(Set<Integer> C1, Set<Integer> C2) {
C1.retainAll(C2);
System.out.println(C1);
return C1;
}
public static void main(String[] args) {
Set<Integer> c1 = new HashSet<Integer>();
c1.add(3);
c1.add(2);
Set<Integer> c2 = new HashSet<Integer>();
c2.add(2);
c2.add(4);
System.out.println(CollectionTools.insertSet(c1, c2));
}
}
也可以用依次读出数据进行比较简单然后把相同的写到一个集合中。或者把两个集合的数据放到set集合中利用set的不含重复元素得到一个并集,然后求得他们的交集。
2.编写一个对数据库表t_user进行update操作的完整java代码,请参考链接数据库和异常等的处理
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class main {
public static void main(String[] args) {
//声明Connection对象
Connection con;
//驱动程序名
String driver = "com.mysql.jdbc.Driver";
//URL指向要访问的数据库名mydata
String url = "jdbc:mysql://localhost:3306/sqltestdb";
//MySQL配置时的用户名
String user = "root";
//MySQL配置时的密码
String password = "123456";
//遍历查询结果集
try {
//加载驱动程序
Class.forName(driver);
//1.getConnection()方法,连接MySQL数据库!!
con = DriverManager.getConnection(url,user,password);
//2.创建statement类对象,用来执行SQL语句!!
Statement statement = con.createStatement();
//要执行的SQL语句
String sql = "update t_user set id="+user.getId+"name"=user.getName+"login_name"+user.getLogin_name+"role_id"+user.getRole_id+"password"+user.getPsssword+"mobile"+user.getMobile;
//3.ResultSet类,用来存放获取的结果集!!
int rs = statement.execute(sql);
con.close();
} catch(ClassNotFoundException e) {
//数据库驱动类异常处理
System.out.println("Sorry,can`t find the Driver!");
e.printStackTrace();
} catch(SQLException e) {
//数据库连接失败异常处理
e.printStackTrace();
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
System.out.println("数据库数据成功获取!!");
}
}
}
数据库连接方法比较多这里是最基础的。