`
pengtyao
  • 浏览: 396432 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

笔试面试题汇总

阅读更多
笔试面试题汇总

1:请问输出结果是true还是false?

String a = "abc"; 
String b = "abc"; 
System.out.println("====>"+ a==b ); 


解析:flase,+号运算符优先级高于==号。如果是a==b,则为true。


2.构造一个如下要求数组:按一定顺序从{0,0,0,0,0,0}遍历到{5,5,5,5,5,5} : 000000->000001->000002......->000005->000010......->555555?


解析:
	/**
	 * <p>
	 * 构造一个连续的N进制{@link java.lang.StringBuffer <CODE>StringBuffer</CODE>}数组
	 * </p>
	 * 如按一定顺序从{0,0,0,0,0,0}遍历到{5,5,5,5,5,5} :
	 * 000000->000001->000002......->000005->000010......->555555
	 * 
	 * @param length
	 *            : 数组元素的位数
	 * @param maxValue
	 *            : 每位表示的最大数值
	 * @author Nightjar
	 * @since 2011-06-04
	 */
	public static StringBuffer[] dataSystem(int length, int maxValue) {
		// listSize 为需构造数组的大小,(maxValue+1)^length
		int listSize = (int) Math.pow(maxValue + 1, length);
		StringBuffer[] sb = new StringBuffer[listSize];
		for (int i = 0; i < listSize; i++) {
			int element = i;
			sb[i] = new StringBuffer();
			for (int j = length; j > 0; j--) {
				int baseNumber = (int) Math.pow(maxValue + 1, j - 1);
				if (element < baseNumber) {
					sb[i].append(0);
				} else {
					int temp = element / baseNumber;
					sb[i].append(temp);
					element -= (temp * baseNumber);
				}
			}
			System.out.println(sb[i]);
		}
		return sb;
	}


***************************************************************************




1、GC是什么?常用的两种方法是什么?
答:
(1)GC是垃圾收集的意思(Garbage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供了GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。
(2)System.gc()用来强制立即回收垃圾,即释放内存。
java对内存的释放采取的垃圾自动回收机制,在编程的时候不用考虑变量不用释放内存,java虚拟机可以自动判断出并收集到垃圾,但一般不会立即释放它们的内存空间,当然也可以在程序中使用System.gc()来强制垃圾回收,但是要注意的是,系统并不保证会立即进行释放内存。

   gc首先要判断该对象是否是时候可以收集。两种常用的方法是引用计数和对象的引用遍历。
引用计数(Reference Counting):
  比较古老的回收算法。原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数。垃圾回收时,只用收集计数为0的对象。此算法最致命的是无法处理循环引用的问题。
tracing算法(Tracing Collector)

    tracing算法是为了解决引用计数法的问题而提出,它使用了根集的概念。基于tracing算法的垃圾收集器从根集开始扫描,识别出哪些对象可达,哪些对象不可达,并用某种方式标记可达对象,例如对每个可达对象设置一个或多个位。在扫描识别过程中,基于tracing算法的垃圾收集也称为标记和清除 (mark-and-sweep)垃圾收集器。

2、线程常用的方法是什么?
答:
Thread类的常用方法:
static Thread currentThread()    //静态方法,通过这个方法可以获得主线程的引用,从而达到操作主线程的目的。
static int activeCount()    //静态方法,获得当前活动线程数量
long getId()     //获得当前线程的id
String getName()    //获得当前线程的名字
int getPriority()   //获得优先级
boolean isAlive()   //当前线程是否处于活动状态。
boolean isDaemon()    //是否为守护线程
void run()     //run()方法,我们用线程,主要就是对run()方法的重写
void start()     //使该线程开始执行;Java虚拟机调用该线程run()方法。
void sleep()     //使当前线程休眠,以执行其他线程,如Thread.sleep(1000)休眠1秒
   
3、Sleep()和wait()的区别?
答:
sleep()方法是使线程停止一段时间的方法。在sleep时间间隔期满后,线程不一定立即恢复执行。因为在那个时刻,其他线程可能正在运行而且没有被调度为放弃执行,除非“醒来”的线程有更高的优先级,或者正在运行的线程因为其他原因而阻塞。
wait()是线程交互时,如果线程对一个同步对象x发出一个wait()调用,该线程会暂停执行,被调用对象进入等待状态,直到被唤醒或等待时间到。   

1,这两个方法来自不同的类分别是Thread和Object
  2,最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。
  3,wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在
    任何地方使用
   synchronized(x){
      x.notify()
     //或者wait()
   }
   4,sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常


4、EJB和JavaBean都是什么?
答:
javabean是客户端组件,EJB是服务器端组件。
其实EJB和javabean最根本的区别是分布性。

5、EJB都有哪些构成?
答:
Session Bean,Entity Bean,Message Driven Bean.

6、Servlet的生命周期,比CGI有什么优点?
答:
   web容器加载servlet,生命周期开始。通过调用servlet的init()方法进行servlet的初始化。通过调用service()方法实现,根据请求的不同调用不用的do***()方法。结束服务,web容器调用servlet的destroy()方法。
   Servlet是Java平台上的CGI技术。Servlet在服务器端运行,动态地生成Web页面,与传统的CGI和许多其他类似CGI的技术相比,JavaServlet具有更高的效率并更容易使用。对于Servlet,重复的请求不会导致同一程序的多次转载,它是依靠线程的方式来支持并访问的。

7、存储过程和函数的区别?
答:
本质上没有区别。只是函数有只能返回一个变量的限制,而存储过程可以返回多个。函数是可以嵌入在sql中使用的,可以在select中调用,而存储过程不行。执行的本质都是一样。函数限制比较多,比如不能用临时表,只能用表变量。还有一些函数都不可用等等,而存储过程的限制相对就比较少。

8、Java Server Page 和 servlet的联系与区别?
答:
JSP在本质上就是servlet,但两者的创建方式不一样。
servlet完全是Java程序代码构成的,擅长流程控制和事务处理,通过servlet来生成动态网页很不直观。
JSP是由HTML代码和JSP表情构成,可以方便地编写动态网页。
因此实际应用中采用servlet来控制业务流程,而采用JSP来生成动态网页,JSP是servlet技术的拓展,本质上就是Servlet的简易方式,JSP编译后是“类servlet”。

9、Java中Collection和Collections的区别?
答:
java.util.Collection是一个集合接口,它提供了对集合对象进行基本操作的通用接口方法,Collection接口在Java类库中有很多具体的实现,Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。
java.util.Collections是一个包装类,它包含各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架。

10、ArrayList和Vector的区别,HashMap和HashTable的区别?
答:
(1)ArrayList 和 Vector的区别主要从两方面来说
同步性:Vector是线程安全的,也就是同步的,ArrayList是线程不安全的,也就是不同步的。
数据增长:当需要增长时,Vector默认增长为原来的一杯,而ArrayList却是原来的一半。
(2)HashMap和HashTable的区别
历史原因:HashTable是基于陈旧的Dictionary类,HashMap是java1.2引进的Map接口的一个实现。
同步性:HashTable是线程安全的,也就是同步的,HashMap是线程不安全的,也就不是同步的。
值:只有HashMap可以将空值作为一个表的条目的key或value。

11、interface和abstract的区别?
答:
(1)相同点
a、两者都是抽象类,都不能实例化
b、interface实现类及abstract class的子类都必须要实现已声明的抽象方法
(2)不同点
a、interface需要实现要用implements,而abstract class需要用继承entends
b、一个类可以实现多个interface,但一个类只能继承一个abstract class
c、interface强调特定功能的实现,而abstract class强调所属关系

12、Overload和Override的区别?
答:
Overload:重载,它可以表现类的多态性,可以是函数里可以有相同的函数名,返回值,类型不能相同,或者说可以改变参数类型、返回值,但函数名字依然不变。
Override:重写,在子类继承父类的时候子类中可以定义某方法与其父类有相同的名称和参数,当子类在调用这一函数时自动调用子类的方法,而父类相当于被覆盖了。
方法Overriding和Overloading是Java多态性的不同表现,Overriding是父类与子类之间多态性的表现,重载是类中多态性的表现。



2011年5月20日亚信联创于辽宁对外经贸学院校园招聘无薪实习生笔试题

(注:笔试题为部分,因时间原因没记载重复。答案是根据提供的部分讲解自己总结,非标准答案)
第一部分:基础知识
1、找出以下程序中的错误
pubic long f(long n){
           if(n==1||n==2){
           return1;}
           else{
           return f(n-1)+f(n-2);
           }
}

答:
这是一个递归调用函数,主要的问题是性能问题,空间复杂度和时间复杂度太大。造成内存空间的浪费。
第二是命名不规范,一般命名都会以一个名字,比如Action001~Action500然后有一个专门的文档标注每一个名称的意义。

2、pulic和private有什么区别,GET和POST方式有什么区别?
答:
(1)如果把一个类或者一个方法声明为public公有的,则说明这个类或者方法对外提供功能,将会承担过多的对外维护成本。public应有完备的文档说明和健全的功能。而private私有的则无需承担过多维护和非常完备的文档说明。
(2)GET是浏览http网页的最基本请求,用于提交表单,以GET方式提交的数据少,因为收到浏览器地址栏的限制,能提交的最大数据大小约为2K左右,提交的数据显示在地址栏中
POST是浏览http网页的请求,但是提交的数据不显示在地址栏中,所以对数据的大小无过多限制,POST可以发送非文本类的数据。

3、如果设计一个ATM机控制软件,应注意什么问题?
答:
(主要运用软件思维回答该问题)
(1)性能问题,为了提高效率和相应速度,用户在输入密码后不立即验证密码是否正确,而且在用户选择完对应的服务,比如查询或者取款后一起提交到数据库服务器验证,验证密码正确后在处理用户的第二条请求。
(2)对于数据库的设置,数据库的原始性第一可读写,第二只可读。

4、什么是SQL Injection,如何避免?
答:
SQL Injection是一种SQL语句,比如在登录时,一部分是程序员编写的代码,另一部分是用户提交的参数。在用户提交后链接数据库看用户名和密码是否匹配。但是用户在密码输入中增加一个小的SQL语句。可以非法顺利进入系统。
避免方式主要是对密码增加限制。和Web项目中安全性的提高。

5、略

第二部分:逻辑思维
1、选择题 (略)

2、有一个三升的杯子和一个五升的杯子,杯子形状不规则,有足够多的水,怎样得到四升的水?(写出推断过程)
答:
(1)在五升的杯子中加满水,倒入三升杯子中到三升杯子满,五升的杯子中还剩二升的水。
(2)把三升杯子中的水倒掉,把五升杯子中剩余的二升水导入三升的杯子。
(3)在五升杯子中加满水,向已有二升水的三升杯子中倒水到三升杯子满。
(4)五升杯子中剩余水为四升。

3、一个探险者从任意一个位置向南行走一公里,又向西行走一公里,又向北行走的一公里,他发现他回到了原点,而且看到了该地特有的一种动物,这种动物最可能是什么?(写出推断过程)
答:
    这种动物最可能是北极熊
    非极点外任意位置在置向南行走一公里,又向西行走一公里,又向北行走的一公里后应在原点向北的一公里处而不是原点,所以推断探险者在北极,北极特有的动物是北极熊。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics