20151015笔试小结

1.ASCLL码、GB2312、UTF-8、Unicode

   Unicode是字符集,UTF-32/ UTF-16/ UTF-8是三种字符编码方案

ASCLL码是最早的一种字符编码方案,在计算机里,用字符表示26个字符的大小写、数字加上其他常用符号,加起来不到100个,一次使用7个bite位就可以高效的存储和处理ascll码,剩下的最高1比特用于一些通讯系统的奇偶校验。(字节代表系统能够处理的最小单位,不一定是8比特。只是现代计算机的事实标准就是用8比特来代表一个字节。

GB2312是中文字符集,涵盖了所有简体字符以及一部分其他字符;GBK(K即扩展的意思)则在GB2312的基础上加入了对繁体字符等其他非简体字符。


在Unicode出现之前,所有的字符集都是和具体编码方案绑定在一起的,都是直接将字符和最终字节流绑定死了,例如ASCII编码系统规定使用7比特来编码ASCII字符集;GB2312以及GBK字符集,限定了使用最多2个字节来编码所有字符,并且规定了字节序。这样的编码系统通常用简单的查表,也就是通过代码页就可以直接将字符映射为存储设备上的字节流了。 差,因此,可扩展性差

Unicode:希望在一份文档中显示所有字符。为了解决这个问题,我们需要一个全人类达成共识的巨大的字符集,这就是Unicode字符集。Unicode字符集和字符编码方案分离开。



2.段、堆和栈的区别和联系

  一个程序一般分为三段:text段、data段和bss段

    text存放代码,编译时确定,只读

    data存放在编译阶段,而不是运行时,就能确定的数据,可读可写,就是常说的静态存储区,赋值了大小的全局变量、静态变量以及常量存放在这个地方;

    bss段,存放没有赋值的全局变量和静态变量


以上是段,下面分析堆和栈的区别和联系,这个也是经常会考到的题目,做过好多遍,每次都记不住,这里再做总结

栈:由编译器自动分配释放,存放函数的参数值,局部的变量等,具体操作方式类似于栈;

堆:一般由程序猿分配释放,若未释放则会被OS收回。具体结构区别于数据结构中的堆;需要程序员自己申请,并指明大小,在c中malloc函数

全局变量区(静态区):存放全局变量和静态变量等,初始化和未初始化的会分开存放;

文字常量区:常量字符放在该区域。程序结束后由系统释放;

下面给出例子:

//main.cpp 
int a = 0; 全局初始化区 
char *p1; 全局未初始化区 
main() 

int b; 栈 
char s[] = "abc"; 栈 
char *p2; 栈 
char *p3 = "123456"; 123456\0在常量区,p3在栈上。 
static int c =0; 全局(静态)初始化区 
p1 = (char *)malloc(10); 
p2 = (char *)malloc(20); 
分配得来得10和20字节的区域就在堆区。 
strcpy(p1, "123456"); 123456\0放在常量区,编译器可能会将它与p3所指向的"123456"优化成一个地方。 

3.进程和线程的区别

这个题目也是必考题了,但还是会弄混,怪自己没有理解透彻了- -

本质:是否共享地址空间

进程是不共享地址空间的,而线程是共享地址空间的

进程是资源分配的基本单元,而线程是内存分配的基本单元

一个进程可以分为多个线程,而一个线程只能属于一个进程;

只由一个线程组成的进程又称单线程。一个进程里面的多个线程可以共享资源,因此可能会产生资源的竞争等


4.

已知String定义如下:

class String

{

public:

String(const char *str = NULL); // 通用构造函数

String(const String &another); // 拷贝构造函数

~ String(); // 析构函数

String & operater =(const String &rhs); // 赋值函数

private:

char *m_data; // 用于保存字符串

};

尝试写出类的成员函数的实现。

String::String(const char *str=NULL)

{

if(str==NULL)//代码中一些基本的异常输入必须先排除

{

       m_data = new char[1] ;

       m_data[0] = '\0' ;

}

else
{

  m_data=new char[strlen(str)+1];

  strcpy(m_data,str);

}

}

String::String(const String &another)//有参数

{

m_data=new char(strlen(another)+1);

strcpy(m_data,other.m_data);

 }


String ::String &operator=(const String &rhs)

{

if(this.m_data==rhs.m_data)

  return this;

delete[]m_data;//为什么要是数组形式的删除?

m_data=new char[strlen(rhs)+1];

strcpy(this.m_data,rhs.m_data);

return *this;

}

String::~String()

{

delete m_data;

}

5.类的加载过程

java程序在执行过程中,类,对象以及它们成员加载、初始化的顺序如下: 
1.首先加载要创建类以及直接与间接的父类

2.在类被加载的时候会将静态变量也加载,主要包括静态变量的初始化,静态语句的执行,在加载时按照代码的先后顺序执行

3.需要的类加载完成后,开始创建对象,首先会创建非静态成员,主要包括非静态变量的初始化,非静态语句的执行,在加载时按照代码的想顺序执行

4.最后执行构造器,构造器执行完毕,对象生成

6.java捕获异常的方式

java语言提供两种异常处理机制:捕获异常和声明抛弃异常;
1)捕获异常:在Java程序运行过程中系统得到一个异常对象是,它将会沿着方法的调用栈逐层回溯,寻找处理这一异常的代码。找到能够处理这种类型异常的方法后,运行时系统把当前异常交给这个方法处理;如果找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。捕获异常是通过try-catch-finally语句实现的。语法为:
try{
...
}catch(ExceptionName1 e){
...
}catch(ExceptionName2 e){
...
}
...
}finally{
...
}

2)声明抛弃异常:当Java程序运行时系统得到一个异常对象时,如果一个方法并不知道如何处理所出现的异常,则可在方法声明时,声明抛弃异常。声明抛弃异常是在一个方法声明中的throws子句中指明的。如:
public int read() throws IOException{
...
}
其中throws IOException就是声明抛弃异常,throws后可以跟多个异常类型。


7.iframe的缺点

*iframe会阻塞主页面的Onload事件;

*iframe和主页面共享连接池,而浏览器对相同域的连接有限制,所以会影响页面的并行加载。
使用iframe之前需要考虑这两个缺点。如果需要使用iframe,最好是通过javascript
动态给iframe添加src属性值,这样可以可以绕开以上两个问题。


8.statement与preparedstatement有什么区别,哪个性能更好?

Statement 是PreparedStatement的父类
还有就是sql放置的位置不同 。

statement用于执行静态SQL语句,执行时必须指定一个事先准备好的sql语句,preparestatement是一个预编译的SQL语句,SQL语句被预编译并保存在对象中

preparedStatement性能更好,

因为预编译语句有可能被重复调用.语句在被DB的编译器编译后的执行代码被缓存下来,那么下次调用时只要是相同的预编译语句就不需要编译,只要将参数直接传入编译过的语句执行代码中



9.线程中sleep与wait有什么区别
a.两个方法来自不同的类thread和object

b。sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法

c.wait.notifyhe notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用

d.wait.notifyhe notifyAll不需要捕获异常,而sleep需要捕获异常



10.try里面有return了,后面的finally还执行吗,如果执行,那么实在return之前还是之后执行?

后面的finally还执行,在return之前执行

在try语句中,要返回的语句已经准备好了,就在此时,程序转到执行finally,在转去之前先把要返回的值存于局部变量中,执行完finally后,再将该值取出,return。

try里面有个return 那后面的finally还执行吗

try里面有个return 那后面的finally还执行吗

try里面有个return 那后面的finally还执行吗



你可能感兴趣的:(笔试未解之题)