您的当前位置:首页正文

软件公司笔试试题-1

2020-12-23 来源:伴沃教育
1. 如何判断一段程序是由C 编译程序还是由C++编译程序编译的? #ifdef __cplusplus cout<<”c++”; #else

cout<<”c”; #endif

199711 long int

2. &&和&以及||和|的区别 C语言:

& |是位操作符

&& ||是逻辑操作符 Java:

&& & || |都是逻辑运算符

&&只要前面的不符合要求,后面的就不会执行,这点和c语言一样 &前后都要执行

||只要前面的不符合要求,后面的就不会执行,这点和c语言一样 |前后都要执行

3. (void*)ptr与(*(void**))ptr的结果是否相同?

相同。第一个是将ptr强制类型转换为指向空类型的指针;第二是首先void**强制转换为指针的指针,最前面的*再取了一次指针指向的值,即指向空值的指针,所以与第一种结果相同。不过(*(void**))ptr运行无法通过,应改为(*(void**) ptr)。 4. 用#define怎样定义一个常量来表示一年有多少秒? #define secondsinayear (60*60*24*365) 5. 宏定义:比较大小

#define MAX(x,y) ((x)>=(y)?x:y)

6.分别写出布尔型、整形、浮点型、指针型变量与零比较的句子 If (bool_var==false){//} If (bool_var){//} If (int_var==0){//}

#define Temp 0.000001

If ((float_var-Temp)){//} If(point_var==NULL){//}

7. 不使用库函数,编写函数int strcmp(char *source,char *dest),若相等返回0,否则返回-1。 int strcmp(char *source,char *dest) { char x,y; x=*source;y=*dest; while ((x!='\\0')||(y!='\\0')) { if (x-y!=0) {return -1;break;} source++; dest++; x=*source;y=*dest; } if ((x-y)==0) return 0;

else return -1; }

8. 列举java语言的几个优势和比较常用的包有哪些?

面向对象;跨平台;安全可靠,去除c中的指针,主要面向B/S架构

免费,开源,简单易用,功能完善,健壮性,多线程,结构中立,企业应用的成熟平台。 包是类的容器。Java中包的结构在文件系统中就是目录结构。把类放在特定的包中,有三大作用:

(1) 能够区别名字相同的类

比如有两个类,类名都叫Student,这在同一个包里面叫做重复定义,是一种错误。但放在不同的包里面却是合法的。那时候它们的完整名字就不同了,譬如一个叫com.softeem.demo1.Student,另一个叫com.softeem.demo2.Student。 (2) 有助于实施更细致的访问权限控制

我们知道,java中有四种访问修饰符。包(默认的)访问权限就是包内可见,公共的(public)访问权限包内包外都可见。

(3) 有助于按模块和功能划分和组织JAVA应用中的各个类 一个软件系统都应该是模块划分清晰功能明确的。 常用包主要包括 Java.lang; 基础类

java.util; 该包提供了包含集合框架、遗留的集合类、事件模型、日期和时间实施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组)

java.io; 该包通过文件系统、数据流和序列化提供系统的输入与输出。 java.sql; 该包提供了使用Java语言访问并处理存储在数据源(通常是一个关系型数据库)中的数据API。 java.awt; java.net; java.applet;

javax.swing; 这两个包提供了GUI设计与开发的类。java.awt包提供了创建界面和绘制图形图像的所有类,而javax.swing包提供了一组“轻量级”的组件,尽量让这些组件在所有平台上的工作方式相同。

java.text; 提供了与自然语言无关的方式来处理文本、日期、数字和消息的类和接口。 9. 在线程中wait和sleep的区别? 区别比较:

1、这两个方法来自不同的类分别是Thread和Object

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

3、wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用(使用范围)

4、sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常 10. 用关键字final修饰一个类或者方法时有何意义? 一、final 修饰数据

有final修饰的数据是用来告诉编译器一块数据是恒定不变的,有时数据恒定不变是很有用的,比如:

1.一个永不改变的编译时常量。

2.一个在运行时被初始化的值,但是又不希望它被改变。

编译时常量必须是基本数据类型,并且以关键字final修饰,在对这个常量进行定义的时候必须进行赋值,并且以后不能被改变。

对于基本类型,final使数值恒定不变;而对于对象引用,final使引用恒定不变,也就是说某个引用不能再指向其他对象了,但是当前指向的这个对象自身的数据是可以改变的。 二、final修饰方法

使用final修饰方法的作用是把方法锁定,以防止任何继承类修改它的含义。在继承类中,使用了与父类用final修饰的方法同名的方法时,并没有覆盖父类的该方法,而是生成了一个新的方法。也就是说final修饰的方法不能被重写。 三、final修饰类

当将某个类定义为final时,就表明了你不打算继承该类,也不允许别人继承。 11. 值传递和引用传递的区别

值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。

引用传递:(形式参数类型是引用数据类型参数):也称为传地址。方法调用时,实际参数是对象(或数组),这时实际参数与形式参数指向同一个地址,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下来,所以方法执行中形式参数的改变将会影响实际参数。

12. 嵌入式系统的特点和其开机启动流程

系统内核小、系统专用型、系统精简、高实时性、多任务操作系统、专用的开发工具和开发环境。

嵌入式系统的启动流程 1、硬件加电

2、引导加载程序:Boot代码,Bootloader等

3、操作系统内核:如Linux内核。根据特定的目标嵌入式硬件系统,定制的内核及启动参数。

4、加载文件系统:包括根文件系统以及建立与Flash内存设备上的文件系统。

5、运行用户程序:用户编写的完成特定功能的程序,一些用户程序运行在一个嵌入式图形用户界面上,常用的嵌入式GUI包括:MicroWindows和MiniGui等。

因篇幅问题不能全部显示,请点此查看更多更全内容