当前位置:文档之家› 嵌入式软件开发面试笔试题

嵌入式软件开发面试笔试题

嵌入式软件开发面试笔试题
嵌入式软件开发面试笔试题

嵌入式软件笔试

/************************

Chapter1 语法类

***********************/

1 .volatile作用?应用场合举3例

volatile修饰的变量表示这个变量可能会被意想不到的改变,对该变量的操作将不作优化,用到该变量时都从这个变量的原始地址读取,而不是用保存在寄存器里的备份。

V olatile常用在:

1). 硬件寄存器(如:状态寄存器)。

2). 中断程序中会访问到的非自动变量(Non-automatic variables)。

3). 多线程应用中几个任务共享的变量

2. 一个参数既可以是const还可以是volatile吗?解释为什么。

是的。比如只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。

3.一个指针可以是volatile 吗?解释为什么。

是的。比如一个中断服务子程序修该一个指向一个buffer的指针时。

4. 用变量a给出下面的定义 a) 一个整型数 b) 一个指向整型数的指针 c) 一个指向指针的指针,它指向的指针是指向一个整型数 d) 一个有10个整型数的数组 e) 一个有10个指针的数组,该指针是指向一个整型数的 f) 一个指向有10个整型数数组的指针 g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数 h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数

a) int a; // An integer

b) int *a; // A pointer to an integer

c) int **a; // A pointer to a pointer to an integer

d) int a[10]; // An array of 10 integers

e) int *(a[10]); // An array of 10 pointers to integers

f) int (*a)[10]; // A pointer to an array of 10 integers

g) int (*a)(int); // A pointer to a function a that takes an integer argument

and returns an integer

h) int (*a[10]) (int); // An array of 10 pointers to functions that take an in

teger argument and return an integer

5.什么是存储机制里的大、小端模式?试举例说明

大端模式(big-edian):MSB存放在最低端的地址上。举例,双字节数0x1234以big-endian的方式存在起始地址0x00002000中:

| data |<-- address

| 0x12 |<-- 0x00002000

| 0x34 |<-- 0x00002001

在Big-Endian中,对于bit序列中的序号编排方式如下(以双字节数0x8B8A为例):

bit | 0 1 2 3 4 5 6 7 | 8 9 10 11 12 13 14 15

MSB----------------------------------LSB

val | 1 0 0 0 1 0 1 1 | 1 0 0 0 1 0 1 0 |

= 0x8 B 8 A

小端模式(little-endian):LSB存放在最低端的地址上。举例,双字节数0x1234以little-endian的方式存在起始地址0x00002000中:

| data |<-- address

| 0x34 |<-- 0x00002000

| 0x12 |<-- 0x00002001

在Little-Endian中,对于bit序列中的序号编排和Big-Endian刚好相反,其方式如下(以双字节数0x8B8A为例):

bit | 15 14 13 12 11 10 9 8 | 7 6 5 4 3 2 1 0

MSB-----------------------------------LSB

val | 1 0 0 0 1 0 1 1 | 1 0 0 0 1 0 1 0 |

= 0x8 B 8 A

6.写一段用来判断内存存储方式是大端还是小段的代码。

联合体union的存放顺序是所有成员都从低地址开始存放,利用该特性就可以轻松地获得了CPU对内存采用Little-endian还是Big-endian模式读写。代码如下:

int checkCPUendian()

{

union

{

unsigned int a;

unsigned char b;

}c;

c.a = 1;

return (c.b = = 1);

}

/*return 1 : little-endian, return 0:big-endian*/

7. 定义一个返回值是指向函数的指针且有一个指向函数的指针作参数的函数。

通用形式如下:

typedef int (*P)( ); // 定义一个函数指针P类型

P function( int (*p)( ) ); // 定义一个函数返回值P类型,且定义一个指向函数的指针p作参数

8. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)

#define SECONDS_PER_YEAR (60 * 60 * 24 * 365) UL // UL怎么个用法?你暂不要加

两个作用:

1) 局部变量被声明为static 则这一函数调用结束后该变量值保持不变。

2) 外部变量被声明为static表明它是一个本地全局变量。该变量只能在该文件内被访问,不能被其它文件访问。

11.关键字const有什么含意?

声明一个变量为只读。

12. 下面的声明都是什么意思?

1)const int a; 2)int const a; 3)const int *a; 4)int * const a; 5)int const * const a ;

1,2一样a为只读整形变量;3 指向一个只读整形变量的指针;4 指向整形的只读指针;5 指向只读整形的只读指针。

13. C语言实现设置一绝对地址为0x1234的整型变量的值为0xaa55。

int *p;

p=(int *) 0x1234; // 把整型数0x1234强制转换(typecast)为一指针

*p=0xaa55;

14. 找出下面一段ISR的问题。

__interrupt double compute_area (double radius)

{

double area = PI * radius * radius;

printf("\nArea = %f", area);

return area;

}

1)ISR不能传递参数。

2)ISR不能有返回值。

3)ISR应该短且有效率,在ISR中做浮点运算不明智。

15 .下面的代码输出是什么?为什么?

void foo(void)

{

unsigned int a = 6;

int b = -20;

(a+b > 6) ? puts("> 6") : puts("<= 6");

}

输出> 6,原因是当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。-20成了一个非常大的正数。// 此题的输出确实是这样,但单纯输出a+b时结果又是-14 很怪异迷惑~~~~~~!

16. 评价下面的代码片断:

unsigned int zero = 0;

unsigned int compzero = 0xFFFF;

如果碰巧int型是16位则上述代码没有问题,否则上面的代码不正确。应写成:unsigned int compzero = ~0;

17 . 下面代码执行后a,b,c的值各是多少?

int a = 5, b = 7, c;

c = a+++b; // c = (a++)+b

a = 6,

b = 7,

c = 12. // 吾已试,结果确如此

18.Typedef和#define的区别

#define在预编译的时候处理作机械的字符替换。Typedef在编译的时候处理,并不是作简单的字符替换。而是如同定义变量一样声明一个类型。然后用它去定义这种类型的变量。比如下面的例子:

dPS p1,p2;

tPS p3,p4;

第一句扩展为struct s * p1, p2;

这条代码定义p1为指向结构的指针,p2为一个实际的结构体。第二句定义p3 和p4 为指向结构体s的指针。/************************

Chapter2 编程类

***********************/

1. 在字符串中找出所有与给定字符相同字符的位置。

#include

char s[6]="hello";

void search_char(char given)

{

int i=0,j=0;

while(s[i]!='\0'){

if(s[i]==given){

printf("location = %d\n", i);

j++;

}

i++;

}

if(j==0)

printf("No %c found\n",given);

}

int main(void)

{

search_char('o');

return 0;

}

/*----- E ----*/

2. 将一个字符串自身逆序.

#include

#define LEN 12

int main(void)

{

int m,i;

char temp;

char s[LEN]="hello tiger";

m=(LEN-1)/2;

printf("%s\n",s);

for(i=0;i

temp=s[i];

return 0;

}

/*------- E ------*/

3. 链表的基本操作及链表自身逆序。

/*---- chain operate from Data Structure ---*/

#include

#include

#include

typedef int DataType;

typedef struct Node

{

DataType data;

struct Node *next;

}SLNode;

//---- initiate

void ListInitiate(SLNode **head)

{

if( (*head=(SLNode *)malloc(sizeof(SLNode)))==NULL ) exit(1); else printf("OK\n");

(*head)->next=NULL;

}

//---- length cal

int ListLength(SLNode *head)

{

SLNode *p=head;

int size=0;

while(p->next!=NULL){

p=p->next;

size++;

}

return size;

}

//----insert a node

int ListInsert(SLNode *head,int i,DataType x)

{

SLNode *p,*q;

int j;

p=head;

j=-1;

while( (p->next!=NULL) && (j<(i-1)) ) {

p=p->next;

j++;

}

if(j!=(i-1)) {

exit(1);

q->data=x;

q->next=p->next;

p->next=q;

return 1;

}

//----delete a node

int ListDelete(SLNode *head,int i,DataType *x)

{

SLNode *p,*s;

int j;

p=head;

j=-1;

while((p->next!=NULL) && (p->next->next!=NULL) && (jnext;

j++;

}

if(j!=i-1){

printf("Position error\n");

return 0;

}

s=p->next;

*x=s->data;

p->next=p->next->next;

free(s);

return 1;

}

//----- data get

int ListGet(SLNode *head,int i,DataType *x)

{

SLNode *p;

int j;

p=head;

j=-1;

while((p->next!=NULL)&&(j

p=p->next;

j++;

}

if(j!=i) {

printf("Position error\n");

return 0;

}

*x=p->data;

return 1;

}

//----Destroy a chain

while(p!=NULL) {

p1=p;

p=p->next;

free(p1);

}

*head=NULL;

}

//-----converse a chain

void converse(SLNode *head)

{

SLNode *p,*q;

p=head->next;

head->next=NULL;

while(p!=NULL) {

q=p;

p=p->next;

q->next=head->next;

head->next=q;

}

}

//---- composite operation

int main(void)

{

SLNode *head;

int i,x;

ListInitiate(&head);

for(i=0;i<10;i++) {

if(ListInsert(head,i,i)==0){

printf("Error\n");

return 1;

}

}

if(ListDelete(head,0,&x)==0) // chain,position,data address {

printf("Error\n");

return 1;

}

if(ListInsert(head,0,100)==0) {

printf("Error\n");

return 1;

}

converse(head);

for(i=0;i

}

else printf("%d ",x);

}

printf("\n");

Destroy(&head);

return 0;

}

/*------ E -------*/

4. 写一个二分查找算法。

#include

#define size 10

int g[size]={0,1,2,3,4,5,6,7,8,9};

int search(int x)

{

int low=0;

int high=size-1;

int mid;

while(low<=high) {

mid=(low+high)/2;

if(g[mid]==x)

return mid;

else if(g[mid]

low=mid+1;

else if(g[mid]>x)

high=mid-1;

}

return -1;

}

//----

int main(void)

{

printf("%d\n",search(7));

return 0;

}

/*--- E ---*/

5. 计算一个字节里(byte)里面有多少bit被置1. #include

int cal_bit(char a)

{

int i,j=0;

for(i=0;i<8;i++) {

if((a&0x01)==0x01)

j++;

a=a>>1;

int main(void)

{

printf("%d\n",cal_bit(255));

return 0;

}

/*---- E ----*/

6. 字符串转换为整数,比如“1234”转换成1234.

#include

char str[6]="12345";

int string_to_int(char s[])

{

int i;

int sum=0;

for(i=0;s[i]!='\0';i++)

sum=sum*10+s[i]-'0';

return sum;

}

//-----

int main(void)

{

printf("%d\n",string_to_int(str));

return 0;

}

/*------ E -----*/

7. 整数转换为字符串,比如1234转换成“1234”.

#include

#include

#define LEN 4

char str[]=" ";

char *int_to_string(int given)

{

int i;

int temp;

for(i=0;i

temp=given/pow(10,LEN-1-i); // 从最高位开始

given=given%((int) pow(10,LEN-1-i)); //int mustbe on both side of '%' str[i]=temp+'0';

}

return str;

}

//-----

int main(void)

{

printf("%s\n",int_to_string(9876));

return 0;

#define LEN 5

int a[LEN]={7,4,8,4,5};

void insertion_sort(void)

{

int i,j,key;

for(j=1;j

printf("%d,%d,%d,%d,%d\n",a[0],a[1],a[2],a[3],a[4]);

key=a[j];

i=j-1;

while( (i>=0) && (a[i]>key) ){ // a[i]>key 从小到大; a[i]

i--;

}

a[i+1]=key;

}

printf("%d,%d,%d,%d,%d\n",a[0],a[1],a[2],a[3],a[4]);

}

//-----

int main(void)

{

insertion_sort();

return 0;

}

/*------ E -------*/

9. C语言实现冒泡排序算法(从大到小,从小到大)

#include

#define LEN 5

int a[LEN]={5,4,3,2,1};

void bubble_sort(void)

{

int i,j,flag=1;

int temp;

for(i=1;(i

flag=0;

for(j=0;j

if( a[j]>a[j+1] ){ // a[j]>a[j+1]从小到大;a[j]

temp=a[j];

a[j]=a[j+1];

a[j+1]=temp;

}

}

printf("%d,%d,%d,%d,%d\n",a[0],a[1],a[2],a[3],a[4]);

}

}

return 0;

}

/*---- E ----*/

10. 在一个字符串中找一个字符串

11. 计算一个数的阶乘

递归实现:

int factorial(int n)

{

if (n == 0)

return 1;

else {

int recurse = factorial(n-1); int result = n * recurse;

return result;

}

}

循环实现:

int factorial(int n)

{

int result = 1;

while (n > 0) {

result = result * n;

n = n - 1;

}

return result;

}

12.用嵌套循环求1-100的素数

#include

int main(void)

{

int i, j;

for (i = 1; i <= 100; i++) { for (j = 2; j < i; j++)

if (i % j == 0)

break;

if (j == i)

printf("%d\n", i);

}

return 0;

}

13. 打印菱形图案

void Damond(int L, char ch)

{

int n, j, k, i;

for(n=1;n<=L/2+1;n++)

{

for(j=0;j

printf(" ");

for(k=1;k<=2*n-1;k++)

printf("%c", ch);

printf("\n");

}

for(i=L-n+1;i>=1;i--)

{

for(j=0;j

printf(" ");

for(k=1;k<=2*i-1;k++)

printf("%c", ch);

printf("\n");

}

}

/*---------- E --------*/

14.删除一个字符串中的指定字符。

#include

void del_char(char *p, char ch)

{

char *pch;

while (*p != '\0') {

if (*p == ch) {

for (pch = p; *pch != '\0'; pch++) *pch = *(pch+1);

}

else

p++;

}

}

int main(void)

{

char ch;

char a[] = "hello world";

scanf("%c", &ch);

/*-- E --*/

15.统计一个字符串中子字符串的个数

#include

#include

int main(void)

{

int i, j, k;

int num = 0;

int len1, len2;

char str1[80], str2[10];

scanf("%s", str1);

scanf("%s", str2);

len1 = strlen(str1);

len2 = strlen(str2) - 1;

for (i = 0; i < len1 - len2; i++) {

for (j = 0, k = i; str2[j] == str1[k]; k++, j++)

{

if (j == len2)

num++;

}

}

printf("%d\n", num);

}

/*----- E -----*/

/************************

Chapter3 系统类

***********************/

1.Rtx51 Tiny是如何实现任务调度,切换的?

时间片轮转,每个任务执行一定的时间退出执行下个任务如此循环。一个时间片内任务可以通过调用系统函数结束自身的执行转去执行下个任务。任务执行超过一个时间片系统强制终止该任务的执行转去执行下个任务。

2. Small Rtos51是如何实现任务调度,切换的?

完全基于有优先级的抢占式操作系统。任务切换有两种情况:1当前任务自己放弃cpu时间;2中断程序使优先级更高的任务就绪,所有中断退出后进行任务切换。

3. Uc/os是如何实现任务调度,切换的?

完全基于有优先级的抢占式操作系统。任务切换有两种情况:1当前任务自己放弃cpu时间;2中断程序使优先级更高的任务就绪,所有中断退出后进行任务切换。任务切换的过程大致是当前任务上下文入栈,最高优先级任务

4.Linux是如何实现任务调度的?

Linux既有时间片又有高优先级抢占。时间片到强制任务调度。时间片内有更高优先级任务就绪任务切换。

2. Bootloader移植过程要注意的事项,要做哪些工作

3. Emacs用过没有?

用过

平安银行软件开发笔试题

平安银行软件开发笔试题

1、做过的项目中,你认为有哪里亮点?举例说明。 2、项目中遇到冲突问题,你是怎么处理的? 3、举例说明。 4、String和StringBuffer的区别? String是final类,不能被继承,一旦创立,不能修改它的值。 StringBuffer是可变类,对字符串的操作效率比String高。 5、线程安全是怎么回事?java是怎么解决线程安全 的? 线程安全是为了解决资源冲突,防止死锁的发生,java中用synchronized解决,具体有:同步对象、同步代码块、同步方法。 6、Java中异常处理机制的关键字? Throws、throw、try、catch、finally。 7、java中有哪里基础数据类型?String是不是java基础数据类型? byte、short、int、long、float、double、char、boolean。不是。 8、javascript怎么获取一个对象的值,这个对象是个 数组,也就是有多个同名的对象。例:

Var ids=document.getElementsByName(‘report_id’); 9、sql中select语句中group by在order by之前还是 之后? 之前 10、sql中查询用了group by,对分组后的条件进行过 滤,用哪个关键字? Having 11、索引的作用?创立索引有哪些注意事项? 提高查询效率。 创立索引时应该考虑该字段修改,删除的是否频繁、不要建立重复索引等。 12、如何优化SQL? 如:SQL索引优化、调整表的使用顺序,调整查询条件的先后顺序等。 13、写一个sql语句,查询二月份工资最高的人。如:表结构: T1(id,name),T2(id,salary,month)

嵌入式软件工程师笔试题

(一) 1什么是预编译,何时需要预编译: 答案: 1、总是使用不经常改动的大型代码体。 2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。 2 char * const p char const * p const char *p 上述三个有什么区别? 答案: char * const p; //常量指针,p的值不可以修改 char const * p;//指向常量的指针,指向的常量值不可以改const char *p;//和char const *p 3 char str1[] = "abc"; char str2[] = "abc"; const char str3[] = "abc"; const char str4[] = "abc"; const char *str5 = "abc"; const char *str6 = "abc"; char *str7 = "abc"; char *str8 = "abc"; cout < < ( str1 == str2 ) < < endl; cout < < ( str3 == str4 ) < < endl; cout < < ( str5 == str6 ) < < endl; out < < ( str7 == str8 ) < < endl; 结果是:0 0 1 1 str1,str2,str3,str4是数组变量,它们有各自的存空间;而str5,str6,str7,str8是指针,它们指向相同的常量区域。 4以下代码中的两个sizeof用法有问题吗? [C易] void UpperCase( char str[] ) // 将str 中的小写字母转换成大写字母 {for( size_t i=0; i

软件开发人员面试七大有效方法

软件开发人员面试七大有效方法 现如今大多数的求职者都有自己的一套面试模式,但是成功的几率自己却很难把握。大多数的面试目的是面试官为了找到那种能一起工作的人,当然,空缺的岗位有可能是在其他团队,但是面试官还是会按照自己的评价标准来择取。如果你能够理解面试官的问题,按照他的方式回答,那么任何面试都将不是问题。本文我将给大家介绍一些面试技巧,希望能帮助面试者发挥无限的潜能,实现梦想。 任何面试都要做足准备,这样才不至于在面试过程中手忙脚乱,胡言乱语,比如你是做计算机软件开发方面的,首先面试前你得好好复习下你的专业知识,这些资料知识可能并不是你需要的什么新鲜的知识,但是能让你有效地扩大和组织已经知道的知识和内容。而有效的扩大和组织的内容,有助于面试官对你另眼相看。 一坦诚很重要 面试,其实是一个人与人交流沟通的平台。能够参加面试,尤其是大公司或者知名企业的面试,在某种程度上来说,已经代表了你并不简单。北大青鸟丰台刘老师认为,自信地回答问题,不要让自己太紧张,如果你不知道,那就坦诚地说“我不知道,但是我认为……”。知之为知之,不知为不知,不要理直气壮地讲述一个错误的答案,这会让面试官怀疑你前面那些正确的答案搞不好也是胡诌的,功亏一篑。虽然这句话也不一定是金钥匙,但是却能显示你的思考能力和扩展能力。对面试官提出的所有问题都要做一番努力,不要一句“我不知道”就轻易打发。 二做好写代码的准备 软件开发人员参加面试的时候,一般情况下是要测验代码的,如果要你写代码,那就要注意了,千万别忘记遵循基本规则。我常听那些应聘人员一脸茫然地说“完了,大脑一片空白,我忘记语法了……”,有哪些基本规则,原来都是一些基本的像循环、if条件、主方法、异常,这些要是忘记了,太不应该了。甚至一些粗心造成的如标点符号忘写、写错造成失误都有。(关注微信公众号:bdqnft 领取学习礼包)看到这里,如果你一时间也没法想起这些,不妨复习一下。 三做好项目解释的准备 软件工程师在写代码之前就应该对业务需求了如指掌。所以,你得能解释项目中一一对应的流程分别是什么。写个三四行代码就深层次解释一下,然后听听非团队人员的意见和建议。当局者迷,旁观者清。看看和客户交流的内部营销记录,找找线索。可以先找个朋友练

软件开发工程师招聘试题

专业技术资料 附录一 附录一【软件开发工程师招聘试题一】 考试时间:60分钟姓名:______成绩:______ 一、单选题(共9题,每题2分) 1.对象b 最早在以下哪个选项前被垃圾回收?() public class Test5 { static String f(){ String a="hello"; String b="bye"; String c=b+"!"; //lineA String d=b; b=a; //lineB d=a; //lineC return c; //lineD } public static void main(String[] args) { String msg=f(); System.out.println(msg); } } A.lineA B.lineB C.lineC D.lineD 2.2.运行下列代码,结果如何?() class Example { int milesPerGallon; int index; Example(){} Example(int mpg){ milesPerGallon=mpg;

index=0; } public static void main(String[] args) { int index; Example e = new Example(25); if(args.length>0){ if(args[index].equals("Hiway")){ https://www.doczj.com/doc/9f6773481.html,esPerGallon=2; } System.out.println("mpg:"+https://www.doczj.com/doc/9f6773481.html,esPerGallon); } } } 这段代码通过编译,并且如果命令行输入”Hiway”则显示”mpg:50” ,如果输入不是”Hiway”则显示”mpg:25”; 这段代码通过编译,并且如果命令行输入”Hiway”则显示”mpg:50” ,如果输入不是”Hiway”则抛出ArrayIndexOutputBoundsException异常。 这段代码不能通过编译,因为自动变量index没有被初始化。 这段代码不能通过编译,因为milesPerGallon没有被初始化。 见例子Example.java 3.3.当编译如下代码时,会显示什么?() int i=1; switch(i){ case 0: System.out.println("zero"); case 1: System.out.println("one"); case 2: System.out.println("two"); default: System.out.println("default"); } One B. one,default C. one,two,default D.default 见例子:Test3.java 4.4.当编译运行如下代码时会发生什么现象?() public class MyClass { public static void main(String arguments[] ) { amethod(arguments); } public void amethod(String []arguments){

嵌入式软件开发人员笔试题

四川九洲电器集团有限责任公司成都技术中心 嵌入式软件开发人员笔试试题 本笔试试题分为C语言基础、算法、思维能力三部份。总分100分,描述思路和最后结果都很重要。 一、C语言基础 1. 语句实现x是否为2的若干次幂的判断。(5分) 2. 宏定义写出swap(x,y)。(5分) 3. 用变量a给出下面的定义。(16分,各两分) a) 一个整型数(An integer) b) 一个指向整型数的指针(A pointer to an integer) c) 一个指向指针的的指针,它指向的指针是指向一个整型数(A pointer to a pointer to an integer) d) 一个有10个整型数的数组(An array of 10 integers) e) 一个有10个指针的数组,该指针是指向一个整型数的(An array of 10 pointers to integers) f) 一个指向有10个整型数数组的指针(A pointer to an array of 10 integers) g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function that takes an integer as an argument and returns an integer) h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数(An array of ten pointers to functions that take an integer argument and return an integer )

软件开发面试自我介绍的范文6篇

软件开发面试自我介绍的范文6篇Self introduction of software development interview 编订:JinTai College

软件开发面试自我介绍的范文6篇 前言:自我介绍是向别人展示你自己,直接关系到你给别人的第一印象的好坏及以后交往的顺利与否,也是认识自我的手段。自我介绍是每个人都必然要经历的一件事情,日常学习、工作、生活中与陌生人建立关系、打开局面的一种非常重要的手段,通过自我介绍获得到对方的认识甚至认可,是一种非常重要的技巧。本文档根据自我介绍内容要求和特点展开说明,具有实践指导意义,便于学习和使用,本文下载后内容可随意调整修改及打印。 本文简要目录如下:【下载该文档后使用Word打开,按住键盘Ctrl键且鼠标单击目录内容即可跳转到对应篇章】 1、篇章1:软件开发面试自我介绍的范文 2、篇章2:软件开发面试自我介绍的范文 3、篇章3:软件开发面试自我介绍的范文 4、篇章4:软件开发面试自我介绍范文 5、篇章5:软件开发面试自我介绍范文 6、篇章6:软件开发面试自我介绍范文 软件编程是现在it行业很火的的职业,尽管这样的工作比较伤脑力,但报酬却还是非常不错的,那么你知道软件开发

的面试要怎么自我介绍吗?今天小泰和你分享软件开发面试自 我介绍的范文,欢迎阅读。 篇章1:软件开发面试自我介绍的范文 尊敬的领导: 您好! 我是xxx大学(原xxx大学)冶金科学与工程学院20xx 年轻金属冶金专业应届毕业生。在此临近毕业之际,我希望能得到贵单位的赏识与栽培。为了发挥自己的才能,特向贵单位自荐。自我介绍 xxx大学师生中一直流传着这样一句话“今天你以母校为荣,明天母校以你为荣”,从入学以来,我一直把它铭记在心,立志要在大学四年里全面发展自己,从适应社会发展的角度提高个人素质。将来真正能在本职工作上做出成绩,为母校争光。 我以“严”字当头,在学习上勤奋严谨,对课堂知识不 懂就问,力求深刻理解。在掌握了本专业知识的基础上,不忘拓展自己的知识面,特别是在计算机应用方面,及时阅读相关书籍,并购置了个人电脑,掌握了Visual Basic 程序设计方 法和 PHP

软件工程师面试中常见的问题

面试中常见的问题 1、请你自我介绍一下你自己, 回答提示:一般人回答这个问题过于平常,只说姓名、年龄、爱好、工作经验,这些在简历上都有,其实,企业最希望知道的是求职者能否胜任工作,包括:最强的技能、最深入研究的知识领域、个性中最积极的部分、做过的最成功的事,主要的成就等,这些都可以和学习无关,也可以和学习有关,但要突出积极的个性和做事的能力,说得合情合理企业才会相信。企业很重视一个人的礼貌,求职者要尊重考官,在回答每个问题之后都说一句“谢谢”。企业喜欢有礼貌的求职者。 2、你觉得你个性上最大的优点是什么? 回答提示:沉着冷静、条理清楚、立场坚定、顽强向上。 乐于助人和关心他人、适应能力和幽默感、乐观和友爱。 3、说说你最大的缺点? 回答提示:这个问题企业问的概率很大,通常不希望听到直接回答的缺点是什么等,如果求职者说自己小心眼、爱忌妒人、非常懒、脾气大、工作效率低,企业肯定不会录用你。绝对不要自作聪明地回答“我最大的缺点是过于追求完美”,有的人以为这样回答会显得自己比较出色,但事实上,他已经岌芨可危了。企业喜欢求职者从自己的优点说起,中间加一些小缺点,最后再把问题转回到优点上,突出优点的部分。企业喜欢聪明的求职者。 4、你对加班的看法?

愿意为公司奉献。 回答样本:如果是工作需要我会义不容辞加班。我现在单身,没有任何家庭负担,可以全身心的投入工作。但同时,我也会提高工作效率,减少不必要的加班 5、你对薪资的要求? 回答提示:如果你对薪酬的要求太低,那显然贬低自己的能力;如果你对薪酬的要求太高,那又会显得你分量过重,公司受用不起。一些雇主通常都事先对求聘的职位定下开支预算,因而他们第一次提出的价钱往往是他们所能给予的最高价钱。他们问你只不过想证实一下这笔钱是否足以引起你对该工作的兴趣。 回答样本一:“我对工资没有硬性要求。我相信贵公司在处理我的问题上会友善合理。我注重的是找对工作机会,所以只要条件公平,我则不会计较太多 回答样本二:我受过系统的软件编程的训练,不需要进行大量的培训。而且我本人也对编程特别感兴趣。因此,我希望公司能根据我的情况和市场标准的水平,给我合理的薪水。 回答样本三:如果你必须自己说出具体数目,请不要说一个宽泛的范围,那样你将只能得到最低限度的数字。最好给出一个具体的数字,这样表明你已经对当今的人才市场作了调查,知道像自己这样学历的雇员有什么样的价值 6、在五年的时间内,你的职业规划? 回答提示:这是每一个应聘者都不希望被问到的问题,但是几乎每个人都会被问到。比较多的答案是“管理者”。但是近几年来,许多公司都已经建立了专门的技术途径。这些工作地位往往被称作“顾问”、“参议技师”或“高级软件工程师”等等。当然,说出其他一些你感兴趣的职位也是可以的,比如产品销售部经理,生产部经理等一些与

嵌入式软件工程师笔试题

笔试题 1: 设 float a=2, b=4, c=3; ,以下 C 语言表达式与代数式 (a+b)+c 计算结果不一致的是 A.(a+b)*c/2 B.(1/2)*(a+b)*c C.(a+b)*c*1/2 D.c/2*(a+b) 参考答案: B,因为 a,b,c 三个变量都是浮点数,所以在 B 答案中其结果是 0,因为在计算 1/2 是就是 0,如果改成 1/2.0 就正确了。 2: 为了向二进制文件尾部增加数据,打开文件的方式应采用 A.″ab″ B.″rb+″ C.″wb″ D.″wb+″ 参考答案: D 3: 下述程序执行后的输出结果是 #include main() { int x= 'f'; printf( “%c n”, 'a'+(x - ‘a'+1)); } A.g B.h C.i D.j 参考答案: A 4:C 语言中,下列运算符优先级高的是 A.! B.% C.>> D.= = 参考答案: A 5:数组定义为“ int a [ 4 ] ; ”,表达式 ( ) 是错误的。 A.*a B. a [ 0 ] C. a D.a++ 参考答案: D

6: 执行语句“ k=7>>1; ”后,变量 k 的当前值是 A.15 B.31 C. 3 D. 1 参考答案: C 7: 定义函数时,缺省函数的类型声明,则函数类型取缺省类型 A.void B.char C.float D.int 参考答案: D 8: 若 main() 函数带参数,参数个数多是 A.0 B. 1 C. 2 D. 3 参考答案: C 只知道有定义形式 main(int argc,char* argv[])) 9: 若有宏定义: #define MOD(x , y) x%y 则执行以下语句后的输出结果是 int a=13 ,b=94; printf( ″%d n″, MOD(b, a+4)); A. 5 B.7 C.9 D.11 参考答案: B 10: 下列各个错误中,哪一个不属于编译错误 A.改变 x 原值 3 为 5 ,写作“ x==5 ; ” B.花括号不配对 C.复合语句中的后一条语句后未加分号 D.变量有引用、无定义参考答案: A 11: 下列程序段运行后, x 的值是 ( ) a=1;b=2;x=0; if(!( — a))x — ; if(!b)x=7;else ++x; A.0 B. 3 C. 6 D.7 参考答案: A

软件工程师面试题含答案

、你对MVC的理解,MVC有什么优缺点?结合Struts,说明在一个Web应用如何去使用? 答: MVC设计模式(应用观察者模式的框架模式) M: Model(Business process layer) ,模型,操作数据的业务处理层, 并独立于表现层(Independent of presentation) 。 V: View(Presentation layer) ,视图,通过客户端数据类型显示数据, 并回显模型层的执行结果。 C: Controller(Control layer) ,控制器,也就是视图层和模型层桥梁,控制数据的流向,接受视图层发出的事件,并重绘视图 MVC框架的一种实现模型 模型二(Servlet-centric) : JSP+Servlet+JavaBean ,以控制为核心,JSP 只负责显示和收集数据,Sevlet ,连接视图和 模型,将视图层数据,发送给模型层,JavaBea n,分为业务类和数据实体,业务类处理业 务数据,数据实体,承载数据,基本上大多数的项目都是使用这种MVC的实现模式。StrutsMVC 框架(Web application frameworks) Struts是使用MVC勺实现模式二来实现的,也就是以控制器为核心。 Struts提供了一些组件使用MVC开发应用程序: Model: Struts没有提供model类。这个商业逻辑必须由Web应用程序的幵发者以JavaBean 或EJB的形式提供 View:Struts 提供了action form 创建form bean, 用于在controller 和view 间传输数据。此外,Struts 提供了自定义JSP标签库,辅助幵发者用JSP创建交互式的以表单为基础的应用程序,应用程序资源文件保留了一些文本常量和错误消息,可转变为其它语言,可用于JSP中Controller :Struts 提供了一个核心的控制器ActionServlet ,通过这个核心的控制器来

Java软件开发工程师笔试题(答案).

Java工程师笔试题 一、填空题(本大题10小题,每空1分,共20分)。 1.Java语言的三大特性即是: 继承、封装、多态。 2.在Java中,char 型采用____unicode_______编码方案,这样,无论是中文字符还是英文字符,都是占用__2___个字节的内存空间。 3. 形式参数指的是方法被__定义____ 时的参数行,实际参数是方法被__调用__ _ 时所传递进去的变量或值。 4.JSP内置对象中,application对象是代表应用程序上下文,它允许JSP页面与包括在同一应用程序中的任何Web组件共享信息,而session 对象则是每个客户专用的。 5.如果想把一个对象写入一个流,那么这个类就必须实现Seralizable 接口。 6.程序中实现多线程的方法有两种:继承Thread类和实现___Runable _ 接口。 7.多线程中,可以通过调用相应的setPriority() 方法来修改一个线程的相对优先级。 8.面向对象编程的五大设计原则,分别是单一职责、开放封闭、 里氏替换、依赖倒置、接口分离 9.通过Ajax,客户端获取的数据主要有两种类型:文本型和xml 10.Socket通常也称为套接字,用于描述__ ip 和_ _接口 二、选择题(本大题20 小题,每小题2分.共40分)。 1.在JA V A中,如果父类中某些方法不包含任何逻辑,并且需要由子类重写.应该使用( )关键字来声明父类的这些方法: A) final B) static C) abstract D) void 2.在JA V A中,已定义两个接口B和C,要定义一个实现这两个接口的类,以下语句正确的是()。 A) interface A extend B,C B) interface A implements B,C C) class A implements B,C D) class A implements B, implements C

(招聘面试)软件开发人员招聘笔试试题

(招聘面试)软件开发人员招聘笔试试题

2002年度软件开发人员招聘笔试试题应聘者资料:

试题壹:基础知识 1、从供选择的答案中,选出应填入下面叙述中_?_内的最确切的解答,把相应编号写于答卷的对应栏内。 假设某计算机具有1M字节的内存(目前使用的计算机往往具有64M字节之上的内存),且按字节编址,为了能存取该内存各地址的内容,其地址寄存器至少需要二进制_A_位。为使4字节组成的字能从存储器中壹次读出,要求存放于存储器中的字边界对齐,壹个字的地址码应_B_。若存储周期为200NS,且每个周期可访问4个字节,则该存储器带宽为_C_BIT/S。假如程序员可用的存储空间为4M字节,则程序员所用的地址为_D_,而真正访问内存的地址称为_E_。 供选择的答案: A:①10②16③20④32 B:①最低俩位为00②最低俩位为10③最高俩位为00④最高俩位为10 C:①20M②40M③80M④160M D:①有效地址②程序地址③逻辑地址④物理地址 E:①指令②物理地址③内存地址④数据地址 2、从供选择的答案中。选出应填入下面叙述中_?_内的最确切的解答,把相应编号写于答卷的对应栏内。 给定结点的关键字序列(F、B、J、G、E、A、I、D、C、H),对它按字母的字典顺序进行排列,采用不同方法,其最终结果相同。但中间结果是不同的。 Shell排序的第壹趟扫描(步长为5)结果应为_A_。 冒泡排序(大数下沉)的第壹趟起泡的效果是_B_3. 快速排序的第壹趟结果是_C_。

二路归且排序的第壹趟结局是_D_。 供选择的答案 A:①(B、F、G、J、A、D、I、E、H、C) ②(B、F、G、J、A、E、D、I、C、H) ③(A、B、D、C、E、F、I、J、G、H) ④(C、B、D、A、E、F、I、G、J、H) B:①(A、B、D、C、F、E、I、J、H、G) ②(A、B、D、C、E、F、I、H、G、J) ③(B、F、G、E、A、I、D、C、H、J) ④(B、F、G、J、A、E、D、I、C、H) C:①(C、B、D、A、F、E、I、J、G、H) ②(C、B、D、A、E、F、I、G、J、H) ③(B、A、D、E、F、G、I、J、H、C) ④(B、C、D、A、E、F、I、J、G、H) D:①(B、F、G、J、A、E、D、I、G、H) ②(B、A、D、E、F、G、I、J、H、C) ③(A、B、D、C、E、F、I、J、G、H) ④(A、B、D、C、F、E、J、I、H、C) 3、从供选择的答案中,选出应填入下面叙述中_?_内的最确切的解答.把相应编号写于答卷的对应栏内。 进程是操作系统中的壹个重要概念。进程是壹个具有壹定独立功能的程序于某个数据集合上的壹次_A2_。

软件开发笔试题

2002年度软件开发人员招聘笔试试题 试题一:基础知识 1、从供选择的答案中,选出应填入下面叙述中_?_内的最确切的解答,把相应编号写在答卷的对应栏内。 假设某计算机具有1M 字节的内存(目前使用的计算机往往具有64M字节以上的内存),并按字节编址,为了能存取该内存各地址的内容,其地址寄存器至少需要二进制_A_位。为使4字节组成的字能从存储器中一次读出,要求存放在存储器中的字边界对齐,一个字的地址码应_B_。若存储周期为200NS,且每个周期可访问4个字节,则该存储器带宽为_C_BIT/S。假如程序员可用的存储空间为4M字节,则程序员所用的地址为_D_,而真正访问内存的地址称为_E_。 供选择的答案: A:①10 ②16 ③20 ④32 B:①最低两位为00 ②最低两位为10 ③最高两位为00 ④最高两位为10 C:①20M ②40M ③80M ④160M D:①有效地址②程序地址③逻辑地址④物理地址 E:①指令②物理地址③内存地址④数据地址 2、从供选择的答案中。选出应填入下面叙述中_?_内的最确切的解答,把相应编号写在答卷的对应栏内。 给定结点的关键字序列(F、B、J、G、E、A、I、D、C、H),对它按字母的字典顺序进行排列,采用不同方法,其最终结果相同。但中间结果是不同的。 Shell排序的第一趟扫描(步长为5)结果应为_A_。 冒泡排序(大数下沉)的第一趟起泡的效果是_B_3. 快速排序的第一趟结果是_C_。 二路归并排序的第一趟结局是_D_。 供选择的答案 A:①(B、F、G、J、A、D、I、E、H、C) ②(B、F、G、J、A、E、D、I、C、H) ③(A、B、D、C、E、F、I、J、G、H) ④(C、B、D、A、E、F、I、G、J、H) B:①(A、B、D、C、F、E、I、J、H、G) ②(A、B、D、C、E、F、I、H、G、J) ③(B、F、G、E、A、I、D、C、H、J) ④(B、F、G、J、A、E、D、I、C、H) C:①(C、B、D、A、F、E、I、J、G、H) ②(C、B、D、A、E、F、I、G、J、H) ③(B、A、D、E、F、G、I、J、H、C) ④(B、C、D、A、E、F、I、J、G、H) D:①(B、F、G、J、A、E、D、I、G、H) ②(B、A、D、E、F、G、I、J、H、C) ③(A、B、D、C、E、F、I、J、G、H) ④(A、B、D、C、F、E、J、I、H、C)

软件工程师面试问题总结归纳及答案

面试中常见的问题 1、请您自我介绍一下您自己, 回答提示:一般人回答这个问题过于平常,只说姓名、年龄、爱好、工作经验,这些在简历上都有,其实,企业最希望知道的就是求职者能否胜任工作,包括:最强的技能、最深入研究的知识领域、个性中最积极的部分、做过的最成功的事,主要的成就等,这些都可以与学习无关,也可以与学习有关,但要突出积极的个性与做事的能力,说得合情合理企业才会相信。企业很重视一个人的礼貌,求职者要尊重考官,在回答每个问题之后都说一句“谢谢”。企业喜欢有礼貌的求职者。 2、您觉得您个性上最大的优点就是什么? 回答提示:沉着冷静、条理清楚、立场坚定、顽强向上。 乐于助人与关心她人、适应能力与幽默感、乐观与友爱。 3、说说您最大的缺点? 回答提示:这个问题企业问的概率很大,通常不希望听到直接回答的缺点就是什么等,如果求职者说自己小心眼、爱忌妒人、非常懒、脾气大、工作效率低,企业肯定不会录用您。绝对不要自作聪明地回答“我最大的缺点就是过于追求完美”,有的人以为这样回答会显得自己比较出色,但事实上,她已经岌芨可危了。企业喜欢求职者从自己的优点说起,中间加一些小缺点,最后再把问题转回到优点上,突出优点的部分。企业喜欢聪明的求职者。 4、您对加班的瞧法? 回答提示:实际上好多公司问这个问题,并不证明一定要加班。只就是想测试您就是

否愿意为公司奉献。 回答样本:如果就是工作需要我会义不容辞加班。我现在单身,没有任何家庭负担,可以全身心的投入工作。但同时,我也会提高工作效率,减少不必要的加班 5、您对薪资的要求? 回答提示:如果您对薪酬的要求太低,那显然贬低自己的能力;如果您对薪酬的要求 太高,那又会显得您分量过重,公司受用不起。一些雇主通常都事先对求聘的职位定下开支预算,因而她们第一次提出的价钱往往就是她们所能给予的最高价钱。她们问您只不过想证实一下这笔钱就是否足以引起您对该工作的兴趣。 回答样本一:“我对工资没有硬性要求。我相信贵公司在处理我的问题上会友善合理。我注重的就是找对工作机会,所以只要条件公平,我则不会计较太多 回答样本二:我受过系统的软件编程的训练,不需要进行大量的培训。而且我本人也对编程特别感兴趣。因此,我希望公司能根据我的情况与市场标准的水平,给我合理的薪水。 回答样本三:如果您必须自己说出具体数目,请不要说一个宽泛的范围,那样您将只能得到最低限度的数字。最好给出一个具体的数字,这样表明您已经对当今的人才市场作了调查,知道像自己这样学历的雇员有什么样的价值 6、在五年的时间内,您的职业规划? 回答提示:这就是每一个应聘者都不希望被问到的问题,但就是几乎每个人都会被问到。比较多的答案就是“管理者”。但就是近几年来,许多公司都已经建立了专门的技术途径。这些工作地位往往被称作“顾问”、“参议技师”或“高级软件工程师”等等。当然,说出其她一些您感兴趣的职位也就是可以的,比如产品销售部经理,生产部经理等一些与您的专业有相关背景的工作。要知道,考官总就是喜欢有进取心的应聘者,此时

嵌入式软件工程师笔试题华为优选稿

嵌入式软件工程师笔试 题华为 集团公司文件内部编码:(TTT-UUTT-MMYB-URTTY-ITTLTY-

(一)1什么是预编译,何时需要预编译: 答案: 1、总是使用不经常改动的大型代码体。 2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。 2char*constpcharconst*pconstchar*p上述三个有什么区别 答案: char*constp;//常量指针,p的值不可以修改 charconst*p;//指向常量的指针,指向的常量值不可以改 constchar*p;//和charconst*p 3 charstr1[]="abc"; charstr2[]="abc"; constcharstr3[]="abc"; constcharstr4[]="abc"; constchar*str5="abc"; constchar*str6="abc"; char*str7="abc"; char*str8="abc";

cout<<(str1==str2)<

软件开发经典100面试题+解答

程序员需要具备的基本素质 阅读代码这个技能需要程序员能够具备读懂已经存在的代码的能力,这样的能力可以让程序员分析程序的行为,了解程序,这样才能和开发团队一起工作,继承维护或是改进现有的程序。 编写程序编写程序并不包括程序设计。不要以为编程是一件很简单的事情,很多程序员都认为编程只需要懂得程序语言的语法,并把设计实现就可以了。但是这离编写程序还远远不够,使用什么样的编码风格成为编写程序员最需要具备的基本技能。能否使用非常良好的编程风格直接决写了程序员的级别。 软件设计这一能力直接决定了需要吏用什么样的代码技术达到怎么样的功能,而系统架构设计直接决定了软件的质量、性能和可维护性。并不是所有的程序在这一方面都非常优秀,但每个程序员都需要或多或少的明白和掌握这一基本技能。熟悉软件工程每个程序员都应该明白软件工程是什么东西,都应该知道,需求分析,设计,编码,测试,Release和维护这几个阶段。当然,几乎所有的人都知道这些东西,但并不是每个人都很清楚这些东西。现在很多高级程序员都会混淆“需求规格说明书FS”和“概要设计HLD”。另外,程序员还需要知道一些软件开发的方法论,比如:敏捷开发或瀑布模型。 使用程序库或框架一个程序员需要学会使用已有的代码,无论是标论的程序库,或是第三方的,还是自己公司内部的,都需要学会做。比如:C++中,需要学会使用STL,MFC,ATL,BOOST,ACE,CPPUNIT等等。使用这些东西,可以让你的工作事半功倍。 程序调试程序调试是分析BUG和解决问题最直接的能力。没有人能够保证程序写出来不用调试就可以运行正常,也没有人可以保证程序永远不会出BUG。所以,熟练使用调试器是一个程序员需要具备的基本技能。 使用IDE学会使用IDE工具也会让你的工作事半功倍。比如,VC++,Emacs,Eclipse等等,并要知道这些IDE的长处和短处。 使用版本控制一定要学会使用版本控制工具,什么叫mainline/trunk,什么叫tag,什么叫branch,怎么做patch,怎么merge代码,怎么reverse,怎么利 用版本控制工具维护不同版本的软件。这是程序员需要明白的软件配置管理中最重要的一块。 单元测试单元测试是每个程序都需要做的。很多单元测试也是需要编码的。一定要学会在xUnit框架下进行单元测试。比如JUnit, NUnit, CppUnit等等。 重构代码每个程序员都需要有最基本的能力去重构目前已有的代码,使代码达到最优但却不能影响任何的已有的功能。有一本书叫《软件的重构》,每个程序员都应该读一下。 自动化编译程序员需要使用一个脚本,其能自动化编程所有的工程和代码,这样,整个开发团队可以不停地集成代码,自动化测试,自动化部署,以及使用一些工具进行静态代码分析或是自动化测试。

完整word版嵌入式软件工程师笔试题 华为

(一)1什么是预编译,何时需要预编译:答案:1、总是使用不经常改动的大型代码体。在这种所有模块都使用一组标准的包含文件和相同的编译选项。2、程序由多个模块 组成,情况下,可以将所有包含文件预编译为一个预编译头。 const char *p 上述三个有什么区别?2 char * const p char const * p 答案:p的值不可以修改char * const p; //常量指针,和char const *p const char *p ;//char const * p;//指向常量的指针,指向的常量值不可以改 3 char str1[] = abc; char str2[] = abc; const char str3[] = abc; const char str4[] = abc; const char *str5 = abc; const char *str6 = abc; char *str7 = abc; char *str8 = abc; cout < < ( str1 == str2 ) < < endl; cout < < ( str3 == str4 ) < < endl; cout < < ( str5 == str6 ) < < endl; out < < ( str7 == str8 ) < < endl; 0 0 1 1 结果是:是指针,它们指str5,str6,str7,str8str1,str2,str3,str4是数组变量,它们有各自的内 存空间;而向相同的常量区域。 以下代码中的两个sizeof用法有问题吗?4 ] [C易中的小写字母转换成大写字母// 将str void UpperCase( char str[] ) { for( size_t i=0; i

软件工程师面试题含答案

一、你对MVC的理解,MVC有什么优缺点?结合Struts,说明在一个Web应用如何去使用? 答: MVC设计模式(应用观察者模式的框架模式) M:Model(Businessprocesslayer),模型,操作数据的业务处理层,并独立于表现层(Independentofpresentation)。 V:View(Presentationlayer),视图,通过客户端数据类型显示数据,并回显模型层的执行结果。C:Controller(Controllayer),控制器,也就是视图层和模型层桥梁,控制数据的流向,接受视图层发出的事件,并重绘视图 MVC框架的一种实现模型 模型二(Servlet-centric): JSP+Servlet+JavaBean,以控制为核心,JSP只负责显示和收集数据,Sevlet,连接视图和模型,将视图层数据,发送给模型层,JavaBean,分为业务类和数据实体,业务类处理业务数据,数据实体,承载数据,基本上大多数的项目都是使用这种MVC的实现模式。 StrutsMVC框架(Webapplicationframeworks) Struts是使用MVC的实现模式二来实现的,也就是以控制器为核心。 Struts提供了一些组件使用MVC开发应用程序: Model:Struts没有提供model类。这个商业逻辑必须由Web应用程序的开发者以JavaBean或EJB 的形式提供 View:Struts提供了actionform创建formbean,用于在controller和view间传输数据。此外,Struts提供了自定义JSP标签库,辅助开发者用JSP创建交互式的以表单为基础的应用程序,应用程序资源文件保留了一些文本常量和错误消息,可转变为其它语言,可用于JSP中。 Controller:Struts提供了一个核心的控制器ActionServlet,通过这个核心的控制器来调用其他用户注册了的自定义的控制器Action,自定义Action需要符合Struts的自定义Action规范,还需要在的特定配置文件中进行配置,接收JSP输入字段形成Actionform,然后调用一个Action控制器。Action控制器中提供了model的逻辑接口。 二、什么是WebService? 答: WebService是一个SOA(面向服务的编程)的架构,它是不依赖于语言,不依赖于平台,可以实现不同的语言间的相互调用,通过Internet进行基于Http协议的网络应用间的交互。 WebService实现不同语言间的调用,是依托于一个标准,webservice是需要遵守WSDL(web 服务定义语言)/SOAP(简单请求协议)规范的。 WebService=WSDL+SOAP+UDDI(webservice的注册) Soap是由Soap的part和0个或多个附件组成,一般只有part,在part中有Envelope和Body。WebService是通过提供标准的协议和接口,可以让不同的程序集成的一种SOA架构。 WebService的优点 (1)可以让异构的程序相互访问(跨平台) (2)松耦合 (3)基于标准协议(通用语言,允许其他程序访问) WebService的基本原理 (1)ServiceProvider采用WSDL描述服务 (2)ServiceProvider采用UDDI将服务的描述文件发布到UDDI服务器(Registerserver) (3)ServiceRequestor在UDDI服务器上查询并获取WSDL文件 (4)Servicerequestor将请求绑定到SOAP,并访问相应的服务。

相关主题
文本预览
相关文档 最新文档