0
点赞
收藏
分享

微信扫一扫

java面试题题库全181-200

腾讯优测 2022-01-15 阅读 20

在这里插入图片描述
181、常用UNIX 命令(Linux 的常用命令)(至少10 个)【基础】

答:ls pwd mkdir rm cp mv cd ps ftp telnet ping env more echo

182、后序遍历下列二叉树,访问结点的顺序是?【基础】

A

/ \

B C

/ \ \

D E F

/ / \

G N I

/ \

J K

答:顺序为:DJGEBKNIFCA 。

183、排序都有哪几种方法?请列举。用JAVA 实现一个快速排序。【基础】

答:排序的方法有:插入排序(直接插入排序、希尔排序),交换排序(冒泡排序、快速排序),选择排序(直接选择排序、堆排序),归并排序,分配排序(箱排序、基数排序);快速排序的伪代码:

//使用快速排序方法对a[ 0 :n- 1 ]排序

从a[ 0 :n- 1 ]中选择一个元素作为middle,该元素为支点;

把余下的元素分割为两段left 和right,使得left 中的元素都小于等于支点,

而right 中的元素都大于等于支点;

递归地使用快速排序方法对left 进行排序;

递归地使用快速排序方法对right 进行排序;

所得结果为left + middle + right。

184、写一种常见排序。【基础】

答:C++中冒泡排序:

void swap( int& a, int& b ){

int c=a; a = b; b = c;

}

void bubble( int* p, int len ){

bool bSwapped;

do {

bSwapped = false;

for( int i=1; i<len; i++ ){

if( p[i-1]>p[i] ){

swap( p[i-1], p[i] );

bSwapped = true;

}

}

}while( bSwapped );

}

185、写一个一小段程序检查数字是否为质数;以上的程序你采用的哪种语言写的?采用该种语言的理由是什么?【基础】

答:代码如下:

#include <math.h>

bool prime( int n ){

if(n<=0) exit(0);

for( int i=2; i<=n; i++ )

for( int j=2; j<=sqrt(i); j++)

if((n%j==0) && (j!=n))

return false;

return true;

}

采用C++,因为其运行效率高。

186、编程题:设有n个人依围成一圈,从第1个人开始报数,数到第m个人出列,然后从出列的下一个人开始报数,数到第m个人又出列,…,如此反复到所有的人全部出列为止。设n个人的编号分别为1,2,…,n,打印出出列的顺序;要求用java 实现。【中等难度】

答:代码如下:

package test;

public class CountGame {

private static boolean same(int[] p,int l,int n){

for(int i=0;i<l;i++){

if(p[i]==n){

return true;

}

}

return false;

}

public static void play(int playerNum, int step){

int[] p=new int[playerNum];

int counter = 1;

while(true){

if(counter > playerNum*step){

break;

}

for(int i=1;i<playerNum+1;i++){

while(true){

if(same(p,playerNum,i)==false) break;

else i=i+1;

}

if(i > playerNum)break;

if(counter%step==0){

System.out.print(i + " ");

p[counter/step-1]=i;

}

counter+=1;

}

}

System.out.println();

}

public static void main(String[] args) {

play(10, 7);

}

}

187、写一个方法1000 的阶乘。【较难】

答:C++的代码实现如下:

#include

#include

#include

using namespace std;

class longint {

private:

vector iv;

public:

longint(void) { iv.push_back(1); }

longint& multiply(const int &);

friend ostream& operator<<(ostream &, const longint &);

};

ostream& operator<<(ostream &os, const longint &v) {

vector::const_reverse_iterator iv_iter = v.iv.rbegin();

os << *iv_iter++;

for ( ; iv_iter < v.iv.rend(); ++iv_iter) {

os << setfill(‘0’) << setw(4) << *iv_iter;

}

return os;

}

longint& longint::multiply(const int &rv) {

vector::iterator iv_iter = iv.begin();

int overflow = 0, product = 0;

for ( ; iv_iter < iv.end(); ++iv_iter) {

product = (*iv_iter) * rv;

product += overflow;

overflow = 0;

if (product > 10000) {

overflow = product / 10000;

product -= overflow * 10000;

}

iv_iter = product;

}

if (0 != overflow) {

iv.push_back(overflow);

}

return *this;

}

int main(int argc, char **argv) {

longint result;

int l = 0;

if(argc==1){

cout << “like: multiply 1000” << endl;

exit(0);

}

sscanf(argv[1], “%d”, &l);

for (int i = 2; i <= l; ++i) {

result.multiply(i);

}

cout << result << endl;

return 0;

}

九、C++部分:(共14 题:基础10 道,中等1 道,较难3 道)

188、以下三条输出语句分别输出什么?【基础】

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; //输出什么?

答:输出为:false、false、true。

189、以下反向遍历array 数组的方法有什么错误?【基础】

vector array;

array.push_back(1);

array.push_back(2);

array.push_back(3);

//反向遍历array 数组:

for(vector::size_type i=array.size()-1; i>=0; --i){

cout << array[i] << endl;

}

答:for 循环中的变量i 的类型不应定义为vector::size_type,

因为该类型为无符号数值类型,故循环条件将恒成立,为死循环,应将其类型定义为有符号的int 类型。

190、以下代码有什么问题?【基础】

cout << (true ? 1 : “1”) << endl;

答:运算符中两个可选值的类型不同。

191、以下代码有什么问题?【基础】

typedef vector IntArray;

IntArray array;

array.push_back(1);

array.push_back(2);

array.push_back(2);

array.push_back(3);

//删除array 数组中所有的2

for(IntArray::iterator itor=array.begin(); itor!=array.end();

++itor){

if(2==*itor) {

array.erase(itor);

}

}

答:for 循环中的if 语句后的array.erase(itor)语句,它将迭代器itor 所指向的元素删除后会自动下移一位,故应在其后加上语句:itor–;

192、以下代码中的两个sizeof 用法有问题吗?【基础】

void upperCase(char str[]){ //将str 中的小写字母转换成大写字母

for(int i=0; i<sizeof(str)/sizeof(str[0]); ++i){

if(‘a’<=str[i] && str[i]<=‘z’)

str[i] -= (‘a’-‘A’);

}

}

int main(){

char str[] = “aBcDe”;

cout << “str 字符串长度为:” << sizeof(str)/sizeof(str[0]);

cout << endl;

upperCase(str);

cout << str << endl;

return 0;

}

答:在upperCase 方法中,for 循环的sizeof(str)的值将总是4,所以该方法

只能将参数中的字符串的前四个字符转换成大写字母。

193、以下代码能够编译通过吗?为什么?【基础】

unsigned int const size1 = 2;

char str1[size1];

unsigned int temp = 0;

cin >> temp;

unsigned int const size2 = temp;

char str2[size2];

答:能;

194、以下代码有什么问题?【基础】

struct Test{

Test(int){}

Test(){}

void fun(){}

};

void main(void){

Test a(1);

a.fun();

Test b();

b.fun();

}

答:main 函数的返回类型应为int;不能对b 调用fun()方法。

195、以下代码中的输出语句输出0 吗?为什么?【基础】

struct CLS{

int m_i;

CLS(int i):m_i(i){ }

CLS(){ CLS(0);}

};

int main(){

CLS obj;

cout <<obj.m_i << endl;

}

答:输出不是0;

196、C++中的空类,默认产生哪些类成员函数?【基础】

答:空类中默认包含的成员函数如下:

class Empty{

public:

Empty(); //缺省构造函数

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

~Empty(); //析构函数

Empty& operator=( const Empty& ); //赋值运算符

Empty* operator&(); //取址运算符

const Empty* operator&() const; //取址运算符const

};

197、统计一篇文章中单词个数。【基础】

答:代码如下:

include

#include

using namespace std;

int main(){

ifstream fin(“t.txt”);

if(!fin){

cout<<“can’t open file”<<endl;

return -1;

}

int count = 0;

char buf[256];

memset(buf, 0, 256);

while(1){

fin2>>buf;

if(fin2.eof())

break;

count++;

}

cout<<"The number of the words is : "<<count<<endl;

fin2.close();

return 0;

}

198、写一个函数,完成内存之间的拷贝。【中等难度】

答:代码如下:

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+count){ //能考虑到这种情况就行了

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(){

char str[] = “0123456789”;

mymemcpy(str+1, str+0, 9);

cout << str << endl; //将输出"0012345678"

return 0;

}

199、非C++内建类型A 和B,在哪几种情况下B 能隐式转化为A?【较难】

答: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&);//赋值操作,虽不是正宗的隐式类型转换,但也可以勉强算一个

200、以下代码有什么问题?【较难】

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 << ’ ';

}

int main(){

char str[] = “I love 中国”;

for(size_t i=0; i<strlen(str); ++i)

char2Hex(str[i]);

cout << endl;

return 0;

}

答:

201、以下两条输出语句分别输出什么?【较难】

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;//输出什么

答:第一处输出false,第二处输出true。

十、WebLogic 及其它:(共13 题:附加部分,超出授课范围)

1、如何给weblogic 指定大小的内存?

答:在启动Weblogic 的脚本中(位于所在Domian 对应服务器目录下的startServerName),增加set MEM_ARGS=-Xms32m -Xmx200m,可以调整最小内存为32M,最大200M。

2、如何设定的weblogic 的热启动模式(开发模式)与产品发布模式?

答:可以在管理控制台中修改对应服务器的启动模式为开发或产品模式之一,或者修改服务的启动文件或者commenv 文件,增加set PRODUCTION_MODE=true。

3、如何启动时不需输入用户名与密码?

答:修改服务启动文件,增加WLS_USER 和WLS_PW 项;也可以在boot.properties文件中增加加密过的用户名和密码。

4、在weblogic 管理控制台中对一个应用域(或者说是一个网站,Domain)进行jms及ejb 或连接池等相关信息进行配置后,实际保存在什么文件中?

答:保存在此Domain 的config.xml 文件中,它是服务器的核心配置文件。

5、说说weblogic 中一个Domain 的缺省目录结构?比如要将一个简单的helloWorld.jsp 放入何目录下,然后在浏览器上打入http://主机:端口号//helloword.jsp 就可以看到运行结果了? 又比如这其中用到了一个自己写的javaBean 该如何办?

答:Domain 目录\服务器目录\applications,将应用目录放在此目录下将可以作为应用访问,如果是Web 应用,应用目录需要满足Web 应用目录要求,jsp 文件可以直接放在应用目录中,Javabean 需要放在应用目录的WEB-INF 目录的classes 目录中,设置服务器的缺省应用将可以实现在浏览器上无需输入应用名。

6、在weblogic 中发布ejb 需涉及到哪些配置文件?

答:不同类型的EJB 涉及的配置文件不同,都涉及到的配置文件包括ejbjar.xml,weblogic-ejb-jar.xml,CMP 实体Bean 一般还需要weblogic-cmprdbms-jar.xml

7、如何在weblogic 中进行ssl 配置与客户端的认证配置或说说j2ee(标准)进行ssl 的配置?

答:缺省安装中使用DemoIdentity.jks 和DemoTrust.jks KeyStore 实现SSL,需要配置服务器使用Enable SSL,配置其端口,在产品模式下需要从CA 获取私有密钥和数字证书,创建identity 和trust keystore,装载获得的密钥和数字证书。可以配置此SSL 连接是单向还是双向的。

8、如何查看在weblogic 中已经发布的EJB?

答:可以使用管理控制台,在它的Deployment 中可以查看所有已发布的EJB。

9、CORBA 是什么?用途是什么?

答:CORBA 标准是公共对象请求代理结构(Common Object Request BrokerArchitecture),由对象管理组织(Object Management Group,缩写为OMG)标准化。它的组成是接口定义语言(IDL), 语言绑定(binding:也译为联编)和允许应用程序间互操作的协议。其目的为:用不同的程序设计语言书写在不同的进程中运行,为不同的操作系统开发。

10、在weblogic 中开发消息Bean 时的persistent 与non-persisten 的差别?

答:persistent 方式的MDB 可以保证消息传递的可靠性,也就是如果EJB 容器出现问题而JMS 服务器依然会将消息在此MDB 可用的时候发送过来,而nonpersistent方式的消息将被丢弃。

11、LINUX 下线程,GDI 类的解释?

答:LINUX 实现的就是基于核心轻量级进程的"一对一"线程模型,一个线程实体对应一个核心轻量级进程,而线程之间的管理在核外函数库中实现;GDI 类为图像设备编程接口类库。

12、Jdo 是什么?

答:JDO 是Java 对象持久化的新的规范,为java data object 的简称,也是一个用于存取某种数据仓库中的对象的标准化API。JDO 提供了透明的对象存储,因此对开发人员来说,存储数据对象完全不需要额外的代码(如JDBC API 的使用)。这些繁琐的例行工作已经转移到JDO 产品提供商身上,使开发人员解脱出来,从而集中时间和精力在业务逻辑上。另外,JDO 很灵活,因为它可以在任何数据底层上运行。JDBC 只是面向关系数据库(RDBMS)JDO 更通用,提供到任何数据底层的存储功能,比如关系数据库、文件、XML 以及对象数据库(ODBMS)等等,使得应用可移植性更强。

13、WEB SERVICE 名词解释;JAXP、JAXM 的解释;SOAP、UDDI,WSDL 解释?

答:Web Service 是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的技术规范,这些规范使得Web Service 能与其他兼容的组件进行互操作;JAXP(Java API for XML Parsing)定义了在Java 中使用DOM, SAX, XSLT的通用的接口,这样在你的程序中你只要使用这些通用的接口,当你需要改变具体的实现时候也不需要修改代码;JAXM(Java API for XML Messaging)是为SOAP 通信提供访问方法和传输机制的API;WSDL 是一种XML 格式,用于将网络服务描述为一组端点,这些端点对包含面向文档信息或面向过程信息的消息进行操作。这种格式首先对操作和消息进行抽象描述,然后将其绑定到具体的网络协议和消息格式上以定义端点。相关的具体端点即组合成为抽象端点(服务);SOAP 即简单对象访问协议(Simple Object Access Protocol),它是用于交换XML 编码信息的轻量级协议;UDDI 的目的是为电子商务建立标准;UDDI 是一套基于Web 的、分布式的、为Web Service 提供的、信息注册中心的实现标准规范,同时也包含一组使企业能将自身提供的Web Service 注册,以使别的企业能够发现的访问协议的实现标准。

举报

相关推荐

0 条评论