厦门亿联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("数据库数据成功获取!!");
        }
    }

}

数据库连接方法比较多这里是最基础的。

posted @ 2017-09-21 14:44  杨洛平  阅读(988)  评论(0编辑  收藏  举报