JAVA面试题总汇三(含答案)

JAVA面试题总汇三(含答案)
1. 以下三条输出语句分别输出什么?[C易]char str1[]        = "abc";char str2[]        = "abc";const char str3[] = "abc"; const char str4[] = "abc"; const char* str5   = "abc";const char* str6   = "abc";cout << boolalpha << ( str1==str2 ) << endl; // 输出什么?Cout << boolalpha << ( str3==str4 ) << endl; // 输出什么?Cout << boolalpha << ( str5==str6 ) << endl; // 输出什么?13. 非C++内建型别 A 和 B,在哪几种情况下B能隐式转化为A?[C++中等]答:a. class B : public A { ……} // B公有继承自A,可以是间接继承的b. class B { operator A( ); } // B实现了隐式转化为A的转化c. class A { A( const B& ); } // A实现了non-explicit的参数为B(可以有其他带默认值的参数)构造函数d. A& operator= ( const A& ); // 赋值操作,虽不是正宗的隐式类型转换,但也可以勉强算一个12. 以下代码中的两个sizeof用法有问题吗?[C易]void UpperCase( char str[] ) // 将 str 中的小写字母转换成大写字母{     for( size_t i=0; i<sizeof(str)/sizeof(str[0]); ++I )         if( 'a'<=str[i] && str[i]<='z' )             str[i] -= ('a'-'A' );}char str[] = "aBcDe";cout << "str字符长度为: " << sizeof(str)/sizeof(str[0]) << endl;UpperCase( str );cout << str << endl;7. 以下代码有什么问题?[C难]void char2Hex( char c ) // 将字符以16进制表示{     char ch = c/0x10 + '0'; if( ch > '9' ) ch += ('A'-'9'-1);     char cl = c%0x10 + '0'; if( cl > '9' ) cl += ('A'-'9'-1);     cout << ch << cl << ' ';}char str[] = "I love 中国";for( size_t i=0; i<strlen(str); ++I )     char2Hex( str[i] );cout << endl;4. 以下代码有什么问题?[C++易]struct Test{     Test( int ) {}     Test() {}     void fun() {}};void main( void ){     Test a(1);     a.fun();     Test b();     b.fun();}5. 以下代码有什么问题?[C++易]cout << (true?1:"1") << endl;8. 以下代码能够编译通过吗,为什么?[C++易]unsigned int const size1 = 2;char str1[ size1 ];unsigned int temp = 0;cin >> temp;unsigned int const size2 = temp;char str2[ size2 ];9. 以下代码中的输出语句输出0吗,为什么?[C++易]struct CLS{     int m_i;     CLS( int I ) : m_i(i) {}     CLS()     {         CLS(0);     }};CLS obj;cout << obj.m_i << endl;10. C++中的空类,默认产生哪些类成员函数?[C++易]答:class Empty{public:     Empty();                           // 缺省构造函数     Empty( const Empty& );             // 拷贝构造函数     ~Empty();                          // 析构函数     Empty& operator=( const Empty& ); // 赋值运算符     Empty* operator&();                // 取址运算符     const Empty* operator&() const;    // 取址运算符 const};3. 以下两条输出语句分别输出什么?[C++难]float a = 1.0f;cout << (int)a << endl;cout << (int&)a << endl;cout << boolalpha << ( (int)a == (int&)a ) << endl; // 输出什么?Float b = 0.0f;cout << (int)b << endl;cout << (int&)b << endl;cout << boolalpha << ( (int)b == (int&)b ) << endl; // 输出什么?2. 以下反向遍历array数组的方法有什么错误?[STL易]vector array;array.push_back( 1 );array.push_back( 2 );array.push_back( 3 );for( vector::size_type i=array.size()-1; i>=0; --I ) // 反向遍历array数组{     cout << array[i] << endl;}文章出自6. 以下代码有什么问题?[STL易]typedef vector IntArray;IntArray array;array.push_back( 1 );array.push_back( 2 );array.push_back( 2 );array.push_back( 3 );// 删除array数组中所有的2for( IntArray::iterator itor=array.begin(); itor!=array.end(); ++itor ){     if( 2 == *itor ) array.erase( itor );}11. 写一个函数,完成内存之间的拷贝。[考虑问题是否全面]答:void* mymemcpy( void *dest, const void *src, size_t count ){     char* pdest = static_cast<char*>( dest );     const char* psrc = static_cast<const char*>( src );     if( pdest>psrc && pdest<psrc+cout ) 能考虑到这种情况就行了     {         for( size_t i=count-1; i!=-1; --I )                 pdest[i] = psrc[i];     }     else     {         for( size_t i=0; i<count; ++I )             pdest[i] = psrc[i];     }     return dest;}int main( void ){     char str[] = "0123456789";     mymemcpy( str+1, str+0, 9 );     cout << str << endl;     system( "Pause" );     return 0;}Java面试基础知识:1.C++或Java中的异常处理机制的简单原理和应用。当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是JAVA类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发NullPointerException。另一种情况就是JAVA允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用throw关键字引发异常。所有的异常都是java.lang.Thowable的子类。2. Java的接口和C++的虚类的相同和不同处。由于Java不支持多继承,而有可能某个类或对象要使用分别在几个类或对象里面的方法或属性,现有的单继承机制就不能满足要求。与继承相比,接口有更高的灵活性,因为接口中没有任何实现代码。当一个类实现了接口以后,该类要实现接口里面所有的方法和属性,并且接口里面的属性在默认状态下面都是public static ,所有方法默认情况下是public.一个类可以实现多个接口。3. 垃圾回收的优点和原理。 并考虑2种回收机制。Java语言中一个显著的特点 就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制, Java中的对象不再有"作用域"的概念,只有对象的引用才有"作用域"。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清楚和回收, 程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收。4. 请说出你所知道的线程同步的方法。 Wait():使一个线程处于等待状态,并且释放所持有的对象的lock。Sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。Notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值