应聘嵌入式软件开发流程职位自我介绍应该怎么说

君,已阅读到文档的结尾了呢~~
软件工程师面试自我介绍(中英文版),软件工程师面试问题,软件工程师面试题,高级软件工程师面试,面试中英文自我介绍,软件工程师自我介绍,软件工程师,高级软件工程师,嵌入式软件工程师,java软件工程师
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
软件工程师面试自我介绍(中英文版)
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口【申明:本文仅限于自我归纳总结和相互交流,有纰漏还望各位指出。 联系邮箱:Mr_】
最近也没有时间写博客,原因简单,忙着找工作,一天面试2-3家,早出晚归一天累的死去活来,混口饭吃真TM的不容易啊!在上一家公司日子比较清闲也没什么大项目,在空闲和业余时间我先后熟读了《Unix环境高级编程》、《Unix进程间通信》、《大话数据结构》、《Unix网络编程》最后一本还没来得急看完,个人理解做应用开发就这四方面的知识就够了。其次你想练练C语言功底得读读《c陷阱》、《c专家编程》、《c和指针》、还有一本功能书《c
primer plus中文版》还有很多好书不一一列举。我换工作的目的很简单,作为北漂一族为别人打工无非两点:第一、为钱,工资待遇好,干什么并不重要。第二、能学到本事。我可能属于第三种,既没有好的待遇,也学不到东西,所以我毅然决然的辞掉了工作,苦逼的屌丝生活不是我想要的。找工作其实挺简单,但是要想找个好工作难,没有学历,没有能力就难上加难了。在北京这PM2.5天天爆表的城市里,牛人太多太多,你不出去走走永远不知道自己有多么的渺小(不是自卑),随处可见拿着5位数工资的人。在北京这种人人都像被打了鸡血一样的城市,你不努力迟早被淘汰,现实就是这样,打住..........有时候你必须得把心态放宽些,走好脚下的路,世界上多数人都是普普通通的,只有极少数人能成功。我们不能人云亦云,大多数人认为是对的不一定对,大多数人认为是错的它不一定错。有句古话叫“机会掌握在少数人手中!”,我们在社会的大潮中做人做事必须时时刻刻过过自己的脑子。
最后说说面试经验:对程序员来说无非两点:第一、笔试,第二、面试。
笔试,笔试这东西就靠硬功夫了,靠自己平时的编程积累,和临场的随机应变(有时候面试官会临时出个题目给你)。可以在网上下载些相关的资料做做,一般公司的笔试题都是十分简单的,对于有工作经验的是人来说就是一个简单的参考。
面试,面试这玩意真不好说,有时候还的看人品。每个面试官都有自己的性格,他们通常会根据自己的性格喜好和公司的团队氛围来估量面试者是否合适,过了初试那关,这面试就显得十分重要。对于程序员面试的时候通常面试官会根据你的简历问一些相关的项目,他会根据公司岗位要求技能对你进行考察,你得事先做好充分的准备:第一、查看HR给的发的岗位要求,因为这些要求是面试的时候肯定会被问到的。第二、了解公司行业所从事的方向,自己估量会用到哪些技术。第三、结合岗位要求重点想想自己有没有做过这方面的项目,到时候任由你发挥。第四、面试的时候一定要从容自信(我做的还不够),最好面带笑容这样不但能缓解气氛,也能给面试官留下好影响。
以上内容纯属个人见解,下面贴上号-号中面试所遇到的题目,很简单这里拿来与大家分享。下周一就要上班了,面试我的是个大美女,心理暗喜,最后希望自己在新公司能尽快的融入团队、能快速的定位自己、不断的成长和提高,好好工作,幸福生活每一天!
一、什么叫可重入?
可重入函数主要用于多任务环境中,一个可重入的函数简单来说就是
可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断
它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么
错误;而不可重入的函数由于使用了一些系统资源,比如全局变量区,
中断向量表等,所以它如果被中断的话,可能会出现问题,这类函数是
不能运行在多任务环境下的。
二、tcp/IP三次握手?
1.首先客户端通过向服务器端发送一个SYN来建立一个主动打开,作为三
路握手的一部分。(同步位为1)
2. 然后服务器端应当为一个合法的SYN回送一个SYN/ACK。(同步位和确
认位都为1)
3. 最后,客户端再发送一个ACK。这样就完成了三路握手,并进入了连接
建立状态。(确认位位1)
三、TCP/IP通信阻塞和非阻塞?
阻塞:当socket的接收缓冲区中没有数据时,read调用会一直阻
塞住,直到有数据到来才返回。当socket缓冲区中的数据量小于期望读取
的数据量时,返回实际读取的字节数。当socket的接收缓冲区中的数据大于
期望读取的字节数时,读取期望读取的字节数,返回实际读取的长度。
非阻塞:socket的接收缓冲区中有没有数据,read调用都会立刻返回。接收
缓冲区中有数据时,与阻塞socket有数据的情况是一样的,如果接收缓冲区
中没有数据,则返回错误号为EWOULDBLOCK,表示该操作本来应该阻塞的,但
是由于本socket为非阻塞的socket,因此立刻返回,遇到这样的情况,可
以在下次接着去尝试读取。如果返回值是其它负值,则表明读取错误。
因此,非阻塞的rea调用一般这样写:
if ((nread = read(sock_fd, buffer, len)) & 0)
if (errno == EWOULDBLOCK)
return 0; //表示没有读到数据
return -1; //表示读取失败
} &//读到数据长度
四、TCP/UDP区别?
TCP---传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器
彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP
提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端
传到另一端。
UDP---用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠
性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达
目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有
超时重发等机制,故而传输速度很快
五、林锐内存思考?
void GetMemory(char *p)&
p = (char *)malloc(100);
void Test(void)
char *str = NULL;
GetMemory(str);
strcpy(str, &hello world&);
printf(str);
答:程序崩溃因为GetMemory并不能
传递动态内存,Test函数中的 str一
直都是NULL
strcpy(str, &hello world&);
将使程序崩溃&
char *GetMemory(void)&
char p[] = &hello world&;
void Test(void)
char *str = NULL;
str = GetMemory();
printf(str);
答:可能是乱码 因为GetMemory返回的
是指向栈内存的指针,该指针的地址
不是 NULL,但其原现的内容已经被清
除,新内容不可知
void GetMemory2(char **p, int num)&
*p = (char *)malloc(num);
void Test(void)
char *str = NULL;
GetMemory(&str, 100);
strcpy(str, &hello&);
printf(str);
答: (1)能够输出hello (2)内存泄漏没有free
void Test(void)&
char *str = (char *) malloc(100);
strcpy(str, hello);
free(str);
if(str != NULL)
strcpy(str, world);
printf(str);
答:篡改动态内存区的内容,后果难以
预料,非常危险 因为free(str);之后
str成为野指针,if(str != NULL)语句
六、编写各种str函数?
strcpy函数
char *my_strcpy(char *dest, const char *src)
assert(dest!=NULL && str != NULL);
while((*dest++ = *src++) != '\0');
char *my_strcat(char *dest, const char *stc)
assert(dest!=NULL && str != NULL);
while(*dest)
dest++;
while((*dest++ = *stc++) != '\0');
char my_strstr(const char *str, char c)
for(; *str != str++)
if(*str == '\0')
return NULL;
int my_strlen(const char *str)
char *temp =
for(; *temp != '\0'; temp++);
return (int)(temp - str);
void *my_memcpy(void * dest, const void *src, size_t count)
char *temp_dest = (char *)
char *temp_src = (char *)
assert(dest != NULL && src != NULL);
while(count--)
*temp_dest++ = *temp_src++;
int my_strcmp(char *str1, char *str2)
int ret = 0;
while((ret = *(unsigned char*)str1 - *(unsigned char*)str2)&&*str1&&*str2)
str1++;
str2++;
if(ret & 0)
else if(ret & 0)
七、链表操作
(1)逆序?
node *reverse_node(node *head)
node *record, *
if(head == NULL || head-&next == NULL)
current = head-&
head-&next = NULL;
while(current != NULL)
record = current-&
current-&next = head-&
head-&next =
node *add_node(node *head, node *data)
node *current =
while(current-&next != NULL)
current = current-&
current-&next =
data-&next = NULL;
node *del_node(node *head, node *data)
node *pf,*
pf = head-&
while(pf != NULL && pf-&data != data-&data)
if(pf-&data == data-&data)
pb-&next = pf-&
printf(&NO node!\n&);
(4)单链表(非循环)倒数第4个元素?
思路:让第一个元素先走四步,然后两个游标指针一起走。
node *Get_Node(node *head)
node *first =
node *back &=
for(i=0; i&4; i++)
if(first-&next == NULL)
printf(&Node less than four!\n&);
first = first-&
while(first != NULL)
first = first-&
back = back-&
(5)如何找出链表中间元素?
思路:让前一个指针每次走两步,后一个指针每次走一步。
node *Get_middle_node(node *head)
node *first =
node *back =
while(first != NULL)
first = first-&next-&
back = back-&
(6)删除一个无头单链表的一个节点(链表很长10万以上)?
思路:把当前节点的下个节点数据拷贝到当前节点,然后删除下一个节点。
void del_node(node *del_node)
node *record = del_node-&
node *current = del_
current-&data = record-& &//数据拷贝,假设结构体数据为data
current-&next = record-& &//指针跳转
free(record);
(7)如何判断一个单链表是否有环?
思路:我们用一个步长1和一个步长2的游标指针遍历链表,观察是否有两个游标相遇的时刻。
int judge_list_circle(node *head)
node *first =
node *back =
while(first-&next != NULL && back-&next-&next != NULL)
first = first-&
back = back-&next-&
if(first == back)
八、两种排序法(冒泡排序、选择排序)
void bubble(int a[], int n)
for(i=0; i&n-1; i++)
for(j=i+1; j&n; j++)
if(a[i] & a[j])
temp = a[i];
a[i] = a[j];
void choise(int a[], int n)
int i, j, temp,
for(i=0; i&n-1; i++)
if(j=i+1; j&n; j++)
if(a[i] & a[j])
if(min != i)
temp = a[i];
a[i] = a[min];
九、字符串反转?
char str_rev(char *str, size_t len)
char *start =
char *end = str+len-1;
if(str != NULL)
while(start & end)
*start++ = *
十、关键字volatile有什么含意 并给出三个不同的例子。
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会
去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重
新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:
1) 并行设备的硬件寄存器(如:状态寄存器);
2) 一个中断服务子程序中会访问到的非自动变量;
3) 多线程应用中被几个任务共享的变量;
1) 一个参数既可以是const还可以是volatile吗?解释为什么。
2) 一个指针可以是volatile 吗?解释为什么。
3) 下面的函数有什么错误:
int square(volatile int *ptr)
& return *ptr &* &*
1) 是的。一个例子是只读的状态寄存器。它是volatile因为它可能被意想
不到地改变。它是const因为程序不应该试图去修改它。
2) 是的。尽管这并不很常见。一个例子是当一个中断服务子程序修该一个指向一个buffer的指针时。
3)这段代码的目的是用来返指针*ptr指向值的平方,但是,由于*ptr指向
一个volatile型参数,编译器将产生类似下面的代码:
int square(volatile int *ptr)
return a *
由于*ptr的值可能被意想不到地该变,因此a和b可能是不同的。结果,这段代码可能返不是你所期望的平方值!正确的代码如下:
long square(volatile int *ptr)
return a *
十一、内存分配应该注意什么问题?
1、检查内存分配是否成功。
2、内存生命周期,程序结束时记得free,避免内存泄露。
3、使用过程中避免指针越界访问,会导致不必要的错误。
十二、字符串回文判断?
int str_is_resv(char *str)
int &len = strlen(str);
char *start =
char *end & = str+len-1;
for(i=0; i&len/2; i++)
if(*(start+i) != *(end-i))
return -1;
十三、字符串循环左移?
//循环左移,库函数实现&
char *str_rev1(char *str, int bit)
int len = strlen(str);
int n = bit%
char temp[128] = &&;
strcpy(temp, str);
strncpy(str, str+n, len-n);
str[len-n] = '\0';
strncat(str, temp, n);
//循环左移,不用库函数
char *str_rev2(char *str, int bit)
char temp_str[128];
int str_len = strlen(str);
bit = bit%str_
for(i=0; i& i++)
*(temp_str+i) = *(str+i);
for(i=0; i&str_len- i++)
*(str+i) = *(str+bit+i);
for(j=0; j& j++)
*(str+i+j) = *(temp_str+j);
十四、如何编程判断大小端?
/*返回1表示小端,返回0表示大端*/
int check_cpu_endian()
s.a = 1; & & &//0x01&
return (s.b == 1);
十五、如何判断一个字节(char)里面多少bit被置1?
int count_bit(int value)
int i, count=0;
for(i=0; i&8; i++)
if(value&0x01 == 0x01)
count++;
value &= value && 0x01;
十六、判断一个整数里面有多少个1?
int count_bit(int value)
int count=0;&
while(value)
count++;
value &= value-1;
十七、二分法查找?
int mid_serach(int arry[], int key, int size)
int low, high,
high = size-1;
while(low & high)
mid = (low+high)/2;
if(key == arry[mid])
else if(key & arry[mid])
high = mid-1;
else if(key & arry[mid])
low = mid+1;
return -1;
十八、字符串转成十进制数?
int str_to_int(char *str)
int temp = 0;
while(*str != '\0')
temp = temp*10 + *str - '0';
str++;
//temp = atol(str); & &//库函数一步完成
十九、OSI模型分哪几层?
物理层、数据链路层、网络层、传输层、应用层、表示层、会话层
集线器hub工作在OSI参考模型的(物理)层;
网卡工作在OSI参考模型的(物理)层;
路由器router工作在OSI参考模型的(网络)层;
交换机Switch工作在OSI参考模型的(数据链路)层。
二十、给定某个整数n(0-10000),求小于等于n的整数中与7有关的整数
(被7整除或者数字中含有7,只要求求出个数,不用列觉出每一个数字)
int fun(int data)
int count=0;
int first,second,third,
for(i=1; i&= i++)
first &= i%10;
second = i/10%10;
third &= i/100%10;
four & = i/1000;
if ((i%7 == 0) || (first == 7) || (second == 7) || (third == 7) || (four == 7))&
//printf(&qian bai shi ge is:%d %d %d %d\n&, four, third, second, first);
count++;
二十一、将字符串中每个单词的第一个字符变为大写?
char *fun(char *str)
int flag = -1;
int len = strlen(str);
if(islower(str[0]))
str[0] = toupper(str[0]);
for(i=1; i& i++)
if(str[i]==' ' && islower(str[i+1]))
str[i+1] = toupper(str[i+1]);
二十二、统计出具有n个元素的一维整数数组中大于等于
所有元素平均值的元素个数。验证该函数?
int fun(int a[], int size)
float sum=0, aver=0;
int count=0;&
for(i=0; i& i++)
sum +=a[i];
aver = sum/
for(i=0; i& i++)
if(a[i] & aver)
count++;
printf(&The aver is %f\n&, aver);
本文已收录于以下专栏:
相关文章推荐
(1)什么是预编译,何时需要预编译:
1、总是使用不经常改动的大型代码体。
2、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一...
这篇文章主要针对毕业不久需要找嵌入式工作的人群,如果你是大牛,麻烦你路过,我就不敢在这班门弄斧,文章主要   对面试和笔试中遇到的一些问题做了一些分析,有些只代表个人见解。
1、sizeo...
& 预处理器(Preprocessor) 
1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) 
#define SECONDS_PER_YEAR (60 * ...
数据结构中,在单链表的开始结点之前附设一个类型相同的结点,称之为头结点。头结点的数据域可以不存储任何信息,头结点的指针域存储指向开始结点的指针(即第一个元素结点的存储位置)。
图1为线性表(ZHAO, QIAN, SUN, LI, ZHOU, WU, ZHENG, WANG)的逻辑状态。头指针 指示链表中第一个结点(即第一个数据元素的存储映像)的存储位置。同时,由于最后一个...
第一题求 子序列中为K的倍数的最长子序列长度,具体描述如下:
代码如下,100%通过率#include
#include using namespace s...
线性表使用顺序(数组)存储时有个弊端,那就是在插入和删除时需要大量的移动数据,这显示是非常消耗时间的,所以可以采用链式存储,即有一个指针域(单链表),来记录下个结点的存储位置(地址),这样在插入和删除...
what is the difference between mutex and spin_lock&两者在调度机制上略有不同。对于互斥锁,如果资源已经被占用,资源申请者只能进入睡眠状态。但是自旋锁不...
1、FIQ比IRQ快的原因:
A、FIQ模式的R8--R14寄存器是独有的,FIQ处理程序可以不必执行保存和恢复中断现场的指令。
B、FIQ可以将ISR直接放在FIQ后面的地址空间,不...
预处理器(Preprocessor)
1 . 用预处理指令 #define 声明一个常数,用以表明 1年中有多少秒(忽略闰年问题)
#define SECONDS_PER_YEAR (60 * 60 ...
他的最新文章
讲师:汪剑
讲师:刘道宽
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)您当前的位置:&&&&&2012年嵌入式系统设计师精编讲义:嵌入式软件开发正文
2012年嵌入式系统设计师精编讲义:嵌入式软件开发
2012年嵌入式系统设计师精编讲义:嵌入式软件开发,2012年嵌入式系统设计师精编讲义:嵌入式软件开发网站简介信息
本网考试频道小编应广大考生的需要,特为参加考试的考生策划了&2012年嵌入式系统设计师精编讲义:嵌入式软件开发&专题等有关资料,供考生参考!
嵌入式软件开发
1、嵌入式平台选型
嵌入式设计分三个阶段:分析、设计和实现。
分析阶段:是确定要解决的问题及需要完成的目标,也称需求阶段;
设计阶段:主要是解决如何在给定的约束条件下完成用户的需求;
实现阶段:主要是解决如何在所选择的硬件和软件的基础上进行整个软硬件系统的协调和实现。
硬件的选择包括:处理器、硬件部件
软件的选择包括:操作系统、编程语言、软件开发工具、硬件调试工具和软件组件。
2、软件设计
⑴、软件设计任务:准备一个工作计划;确定软件的结构;设计评审;维护工作计划;与硬件部门密切合作、相互协调;控制工作的结果、把工作记录存档。
⑵、模块结构设计
模块结构设计的任务:将系统划分为模块,确定软件的结构,模块的功能和模块间的接口,以及全局数据结构设。
模块:是组成系统的基本单位,它的特点是可以组合、分解和更换。
模块的四要素:输入和输出;处理功能;内部数据;程序代码。
模块结构设计应遵守的原则:所划分的模块其内部凝聚性要强,模块之间的联系要少,即要有很强的独立性;模块之间的连接只能存在上下级之间的调用关系,不能有同级之间的横向关系;整个结构呈树状结构,不允许网状结构或交叉调用关系;所有模块必须严格地分类编码并建立归档文件。
⑶、结构化设计的方法
结构化设计的方法是一种面向数据流的设计方法,基本思想是将系统设计成由相对独立、功能单一的模块组成的结构。
信息流的类型:变换流和事务流。
结构化设计方法的步骤:复查并精化数据流图;确定DFD的信息流类型(变换型或事务型);根据流类型分别实施变换分析或事务分析;根据系统设计的原则,对程序结构图进行优化。
3、嵌入式程序设计
⑴、bootloader的设计
步骤;stage1和stage2两大部
Stage1步骤:硬件设备初始化;为加载bootloader的stage1准备内存空间;复制bootloader的stage1到内存;设置好堆栈;跳转到stage1的C入口点。
Stage2步骤:初始化本阶段要使用的硬件设备;检测系统内存映射;将内核映像和根文件系统映像到flash上读入到内存中;为内核设置启动参数,并调用内核。
⑵、设备驱动程序设计
⑶、网络应用程序设计
四个步骤:确定源程序的标准格式、制定编程规范;准备编程环境;编写代码;进行代码审查,提高编码质量。
软件测试:是从经济和效率的角度出发,对软件代码进行质量和正确性保证的一个过程。
系统测试的目的:是为了发现至今尚未发现的错误。
规范化的测试过程:拟定测试计划;编制测试大纲;根据测试大纲设计和生产测试用例;实施测试;生成测试报告。
⑵、测试方法
分类:人工测试和机器测试
人工测试的三种方法:个人复查、抽查、会审
机器测试分成:黑盒测试和白盒测试
黑盒测试:也称功能测试,将软件看成黑盒子,在完成不考虑软件内部结构和特性的情况下,测试软件的外部特性。包括:极限情况测试;边界测试;异常测试;随机测试;性能测试。
白盒测试:也称结构测试,将软件看成透明的的盒,根据程序的内部结构和逻辑来设计测试用例。原则:程序模块中的所有独立路径至少执行一次;在所有的逻辑判断中,取&真&&假&的两种情况至少都要执行一次;每个循环都应在边界条件和一般条件下各执行一次;测试程序内部的数据结构的有效性。
⑶、测试步骤:
①、系统平台测试:包括硬件电路测试、操作系统及底层驱动程序测试;
②、单元测试:也称模块测试。一般采用白盒测试法。主要测试模拟块接口、局部数据结构、重要的执行路径、出错处理、边界条件。
测试时需要开的模块包括:驱动模块(相当于一个程序,负责接收测试用例的数据,将这些数据送到测试模块,并输出结果)和桩模块(也称为存根模块,用来代替测试模块中所调用的子模块,其内可进行少量的数据处理,目的是为了检验入口,并输出调用和返回的信息)
③、集成测试:也称组装测,就是把各个模块按照系统设计说明书的要求组合起来进行测试。
两种方法:一种是分别测试各个模块,再把这些模块组合起来进行整体测试,即非增量式集成;另一种是把下一个要测试的模块组合到已测试好的模块中,测试完成再将下一个模块组合进来,进行测试,这样逐步把所有的模块组合在一起,并完成测试,即增量式集成。
④、系统测试:将嵌入式软件、硬件,外设和网络等各种因素结全在一起,进行整个系统的组装测试和确认测试。一般采用黑盒测试法。
主要测试内容:恢复测试、强度测试、性能测试、可靠性测试。
⑤、测试结果分析
对测试结果分析和比较帮助错误的定位,指导程序员修改代码。
⑷、覆盖测试:是一种白盒测试法,测试人员必须拥有程序的规格说明书和程序清单。其基本思路是以程序的内部结构为基础来设计测试用例,以覆盖尽可能多的程序内部逻辑结构,发现其中的错误和问题,一般用在单元测试阶段。
主要策略:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖。
5、下载运行
更多内容进入:
本网IT教育频道
链接地址:
2012年嵌入式系统设计师精编讲义:嵌入式软件开发由网友原创或转发,若2012年嵌入式系统设计师精编讲义:嵌入式软件开发侵犯了您的权益,请与本站联系,谢谢!--博才网
下页更精彩:
点击排行榜
微信查看最新信息微信扫一扫或用微信搜索微信号:hbrc-com
安卓手机客户端更省流量手机扫描下载或者直接
更多关于2012年嵌入式系统设计师精编讲义:嵌入式软件开发的文章
热点文章排行榜
• 版权所有 Copyright 2011 All rights reserved.}

我要回帖

更多关于 嵌入式软件开发薪资 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信