1、http访问百度返回头信息:
2、简述逻辑操作(&,|,^)与条件操作(&&,||)的区别。
区别主要答两点:a.条件操作只能操作布尔型的,而逻辑操作不仅可以操作布尔型,而且可以操作数值型
b.逻辑操作不会产生短路
“&&”左侧为true时,才计算右侧的逻辑表达式,否则直接输出false
“&”不管左侧输出真假,都的计算右侧的逻辑表达式
3、编程题: 写一个Singleton出来。
Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。
一般Singleton模式通常有几种种形式:
第一种形式: 定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。
public class Singleton {
private Singleton(){}
//在自己内部定义自己一个实例,是不是很奇怪?
//注意这是private 只供内部调用
private static Singleton instance = new Singleton();
//这里提供了一个供外部访问本class的静态方法,可以直接访问
public static Singleton getInstance() {
return instance;
}
}
第二种形式:
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
//这个方法比上面有所改进,不用每次都进行生成对象,只是第一次
//使用时生成实例,提高了效率!
if (instance==null)
instance=new Singleton();
return instance; }
}
其他形式:
定义一个类,它的构造函数为private的,所有方法为static的。
一般认为第一种形式要更加安全些
4、说出数据连接池的工作机制是什么?
J2EE服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。
5、forward 和redirect的区别
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。
redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。
6、同步和异步有何异同,在什么情况下分别使用他们?举例说明。
如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。
当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。
7、说出ArrayList,Vector, LinkedList的存储性能和特性
ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。
8、String 和StringBuffer的区别
JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。
java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类
9、运行时异常与一般异常有何异同?
异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。
10、abstract class和interface有什么区别?
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。
11、char型变量中能不能存贮一个中文汉字?为什么?
能够定义成为一个中文的,因为java中以unicode编码,一个char占16个字节,所以放一个中文是没问题的
12、java.io结构
13:java集合结构
14、取盘符下的所有文件名
package com.get.file;
import java.io.File;
/**
* 获取指定目录下所有文件
*
* @author
*
*/
public class getFiles {
public static void main(String[] args) {
String dir = "d:\\A\\";
File directory = new File("d:\\A\\");
File[] files = directory.listFiles();
System.out.println("文件总个数:"+files.length);
for (int i = 0; i < files.length; i++) {
/**
* outputFlage1
* 输出文件名及其绝对路径
*/
System.out.println("第 "+i + " 个文件:" + files[i].getName() + "--->"
+ files[i].getAbsolutePath());
files[i].renameTo(new File(dir + i + files[i].getName()));//修改文件名称
/**
* outputFlag2
* 这里可以看出输出的结果和outputFlag一样,renameTo方法没有改变files[i]的值(内存中数据没变),但是改变了文件名
*/
System.out.println(files[i].getName());//过的文件名字
}
}
}
15、统计单词出现的次数
//CountWord.java
package com.xie.tencent;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
/**
* 这个类用于统计某个单词在所有文件中出现的次数。
* @author centre
*
*/
public class CounterWord {
FileReader fr;
private HashMap<String, Integer> hMap=new HashMap<String, Integer>();;
public HashMap<String, Integer> gethMap() {
return hMap;
}
/**
* 这个构造方法用于持有对方引用
* @author centre
* @param f FileReader
*/
public CounterWord(FileReader f) {
fr=f;
}
/**
* 根据传入的文件路径,打开文件,同时分析其中的单词个数,
* 存放进一个HashMap
* @author centre
* @param path String 文件的绝对路径
* @return 返回值貌似没用,在需要时可以接收
*/
public boolean openFile(String path){
boolean b=true;
try {
FileInputStream fis=new FileInputStream(path);
BufferedReader br=new BufferedReader(new InputStreamReader(fis));
try {
String words=br.readLine();
while (words!=null) {
//System.out.println(words);
String[] word=words.split(",");
for (int i = 0; i < word.length; i++) {
addWordCount(word[i]);
}
words=br.readLine();
}
} catch (IOException e) {
System.out.println("文件读取异常。");
e.printStackTrace();
}
} catch (FileNotFoundException e) {
System.out.println("没有找到该文件:"+path);
b=false;
e.printStackTrace();
}
return b;
}
/**
* 将单词放进map,同时统计单词出现的次数
* @param word String 单词
*/
private void addWordCount(String word) {
if (hMap.containsKey(word)) {
hMap.put(word, hMap.get(word).intValue()+1);
}else {
hMap.put(word, 1);
}
}
1、ABC三人都喜欢说谎话,有时候也说真话。某天,A指责B说谎话,B指责C说谎话,C说AB两人都在说谎话。后来上帝通过读心术知道其中至少一个人说的是真话。请问谁在说谎话?
答案:运用假设 排除法 推理得出是B说的是真话,A和C都是说谎话。