您的位置:首页 > 职场人生

笔试面试题总结(四)--- 软件开发

2015-12-24 21:29 411 查看
1.  面向对象的五大基本原则

五个基本原则:
单一职责原则(Single-ResposibilityPrinciple):一个类,最好只做一件事,只有一个引起它的变化。单一职责原则可以看做是低耦合、高内聚在面向对象原则上的引申,将职责定义为引起变化的原因,以提高内聚性来减少引起变化的原因。
开放封闭原则(Open-Closedprinciple):软件实体应该是可扩展的,而不可修改的。也就是,对扩展开放,对修改封闭的。
Liskov替换原则(Liskov-SubstituionPrinciple):子类必须能够替换其基类。这一思想体现为对继承机制的约束规范,只有子类能够替换基类时,才能保证系统在运行期内识别子类,这是保证继承复用的基础。
依赖倒置原则(Dependecy-InversionPrinciple):依赖于抽象。具体而言就是高层模块不依赖于底层模块,二者都同依赖于抽象;抽象不依赖于具体,具体依赖于抽象。

接口隔离原则(Interface-SegregationPrinciple):使用多个小的专门的接口,而不要使用一个大的总接口
 
2.String转化为Char[].Char[] 转化为String
(1)String转化为Char[],public char[] toCharArray(),该方法的作用是返回一个字符数组,该字符数组中存放了当前字符串中的所有字符。
(2)char[] 数组转换成String可使用new String(char[]);  或  String.valueOf(char[]); ,在使用swing的JPasswordField组件时,getPassword()得到的就时char数组。
若第一反应调用toString()方法,则会得到让人意外的结果,那是因为char数组调用toString()时,是调用的Object类的toString()方法。如下:
public String toString() {
return getClass().getName() + "@" +Integer.toHexString(hashCode());
}
如下实例可供参考:
public class CharToString {
public static void main(String[] args) {
char[] c = {'a', 'b', 'c', 'd'};

String s1 = new String(c);
String s2 = String.valueOf(c);

if(s1.equals("abcd"))
System.out.println("char[] to String , success!");
if(s2.equals("abcd"))
System.out.println("char[] to String , success!");
System.out.println(c.toString());
System.out.println(s1.toString());
System.out.print(s1);
System.out.println();
System.out.print(s2);
}
}
输出结果:
char[] to String , success!
char[] to String , success!
[C@c17164
abcd
abcd
abcd

3. BIG-ENDIAN、LITTLE-ENDIAN、
跟CPU有关的,每一种CPU不是BIG-ENDIAN就是LITTLE-ENDIAN、。IA架构的CPU中是Little-Endian,而PowerPC 、SPARC和Motorola处理器。这其实就是所谓的主机字节序。而网络字节序是指数据在网络上传输时是大头还是小头的,在Internet的网络字节序是BIG-ENDIAN。所谓的JAVA字节序指的是在JAVA虚拟机中多字节类型数据的存放顺序,JAVA字节序也是BIG-ENDIAN。 

所以在用C/C++写通信程序时,在发送数据前务必用htonl和htons去把整型和短整型的数据进行从主机字节序到网络字节序的转换,而接收数据后对于整型和短整型数据则必须调用ntohl和ntohs实现从网络字节序到主机字节序的转换。如果通信的一方是JAVA程序、一方是C/C++程序时,则需要在C/C++一侧使用以上几个方法进行字节序的转换,而JAVA一侧,则不需要做任何处理,因为JAVA字节序与网络字节序都是BIG-ENDIAN,只要C/C++一侧能正确进行转换即可(发送前从主机序到网络序,接收时反变换)。如果通信的双方都是JAVA,则根本不用考虑字节序的问题了。
在BIG-ENDIAN的情况下存放为: 

  字节号 0 1 2 3 

  数据 05 06 07 08 

  在LITTLE-ENDIAN的情况下存放为: 

  字节号 0 1 2 3 

  数据 08 07 06 05 

4.创建Thread实例的应用必须提供将在那个线程中执行的代码,有两种实现方式:
(1).【提供可运行的对象】通过实现Runnable接口,实例化Thread类
Runable接口定义单个方法,run,意味着其包含了那个线程中所执行的代码,将可运行对象传给Thread的构造函数,如下实例:
public classHelloRunable implements Runnable{

public void run()
{
System.out.println("Hello from a Thread!");
}

public static void main(String[] args)
{
(new Thread(newHelloRunable())).start();
}

}
(2).【子类线程】通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中
 此类线程本身已经实现Runable,尽管其run方法什么事都不能完成。应用可以是Thread的子类,自己提供自己的run方法实现,如下实例所示:
public classHelloThread extends Thread{

public void run()
{
System.out.println("Hello from a thread!");
}

public static void main(String[] args)
{
(new HelloThread()).start();
}

}
5. 
重载:只有在 同一类定义中的同名成员函数才存在重载关系,主要特点是 函数的参数类型和数目有所不同 ,但 不能出现函数参数的个数和类型均相同 ,仅仅依靠返回值类型不同来区分的函数,这和普通函数的重载是完全一致的。另外,重载和成员函数是否是虚函数无关 
覆盖:在派生类中覆盖基类中的同名函数,要求两个函数的参数个数、参数类型、返回类型都相同,且基类函数必须是虚函数。
隐藏: 派生类中的函数屏蔽了基类中的同名函数,2个函数参数相同,但基类函数不是虚函数(和覆盖的区别在于基类函数是否是虚函数)。2个函数参数不同,无论基类函数是否是虚函数,基类函数都会被屏蔽(和重载的区别在于两个函数不在同一类中)。

6.
.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 面试题