`

面试题(通信行业公司)

 
阅读更多
一、unix:
1.ps -ef|grep tomcat
2.mkdir dir
3.打tar包:tar -cvf XXX.tar XXX
4.解压tar包:tar -xvf XXX.tar
二、java
1.HashMap和HashTable的区别:
HashMap不是线程安全的,
HashTable是线程安全的
HashTable不允许null值(key和value都不可以),HashMap允许null值(key和value都可以)。
HashTable使用Enumeration,HashMap使用Iterator。
HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。
Hashtable是基于陈旧的Dictionary类,完成了Map接口;HashMap是Java 1.2引进的Map接口的一个实现(HashMap继承于AbstractMap,AbstractMap完成了Map接口)。
HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。
哈希值的使用不同,HashTable直接使用对象的hashCode。
2.什么是java的序列化?如何实现java的序列化:

序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。

序列化的实现:将需要被序列化的类实现Serializable接口,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。

3.什么是java的单例模式?写一个单例模式;
单例模式:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。

  代码清单1:饿汉式单例类

public class EagerSingleton 

    private static final EagerSingleton m_instance = new EagerSingleton(); 

   /** 
   * 私有的默认构造方法 
   */ 
   private EagerSingleton() { } 

   /** 
   * 静态方法获得单例 
   */ 
   public static EagerSingleton getInstance() 
   {
      return m_instance; 
   }
}

代码清单2:懒汉式单例类

package com.javapatterns.singleton.demos;
public class LazySingleton
{
    private static LazySingleton m_instance = null;


    /**
    * 私有的默认构造方法,保证外界无法直接实例化
    */
    private LazySingleton() { }


    /**
    * 静态方法,返还此类的惟一实例
    */
    public synchronized static LazySingleton getInstance()
    {
        if (m_instance == null)
        {
            m_instance = new LazySingleton();
        }
        return m_instance;
    }
}

4.静态块与构造器在继承中的执行顺序:

public class TestExeuteOrder {

public static void main(String[] args) {
Parent p = new ChildTest();
p = new ChildTest();

}

}
class ChildTest extends Parent{
static{
System.out.println("in child static");
}
public ChildTest(){
System.out.println("in child construtor");
}
}

class Parent{
static{
System.out.println("in parent static");
}
public Parent(){
System.out.println("in parent construtor");
}
}
运行结果:
in parent static
in child static
in parent construtor
in child construtor
in parent construtor
in child construtor
5.成员内部类:
public class TestExeuteOrder{
class Inner{
void test(){
if(TestExeuteOrder.this.flag){
System.out.println("what a funny");
}
}
}
private boolean flag = true;
public TestExeuteOrder(){
new Inner().test();
}
public static void main(String[] args){
new TestExeuteOrder();
}
}
运行结果:
what a funny
6.参数传递:
public class TestExeuteOrder{

public static void main(String[] args){
String a = "ello";
TestExeuteOrder t = new TestExeuteOrder();
t.change(a);
System.out.println(a);
}
public void change(String str){
str += "H";
}
}
结果:
ello
7.参数传递2:
public class TestExeuteOrder{

public static void main(String[] args){
StringBuffer x = new StringBuffer("A");
StringBuffer y = new StringBuffer("B");
change(x,y);
System.out.println(x+" "+y);
}
public static void change(StringBuffer a,StringBuffer b){
a.append(b);
b = a;
}
}
结果为:
AB B
8.

public class TestExeuteOrder{
public static void main(String[] args){
String a = "good";
char[] b = new char[]{'a','b','c'};
method(a,b);
System.out.println("a="+a+"------>b="+new String(b));
}
public static void method(String a,char[] b){
a = "Test ok";
b[0] = 'g';
}
}
结果:
a=good------>b=gbc
三、SQL:

 

1.存储过程与函数的区别:
1)前者,程序头部声明用的是procedure;后者,程序头部声明用的是function;
2)前者,不需要描述返回类型,后者需要;
3)前者可以作为一个独立的pl/sql语句来执行;后者不能独立运行,必须作为表达式的一部分条用;
4)sql语句中不可调用procedure,但可以调用function;
2.查询student表中name重复的记录:

select * from student where name in(select name from student group by sname having count(*) >1);

3.table表中有两列A,B,如果A>B选择A,如果A<B,选择B:

select( case when s1.A>s1.B then s1.A  when s1.A<s1.B then s1.B end) re from student s1;

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics