嵌入式培训就业感言:我的未来不是梦-- 培训对我的启发  

来源:华清远见嵌入式培训武汉分中心      

    
  学员姓名:李*
  所在班级:武汉14051期班
  就业单位:威盛电子股份有限公司
  工作职位:嵌入式软件工程师

 

 


转眼间,四个月的培训稍纵即逝,突然发现时间过的好快,在忙碌的学习节奏中几乎忘记了时间是如何度过的,在华清的四个月,对我来说,收获甚多,这离不开华清的每一位老师对每一位学员负责的授课态度和华清良好的学习氛围,在培训学习过程中,非常感谢各位老师对我的帮助,在此万分感谢!

通过华清的培训和自己的不懈努力,我自己找了一份满意的工作,以下就培训学习方法和有关找工作的一些经验分享给大家,希望我能够给大家带来学习上和工作上的帮助。

对于培训期间的学习,华清十分注重动手练习,也就是说,对于每一个程序,力求每个同学都能够亲自动手自己把代码敲出来,并且能够正常运行,我觉得这一点是非常重要的,也是华清培训和大学上课的本质不同。我也听过有人说过这样一句话:学编程就像学游泳,纸上谈兵永远是不行的!我觉得这句话说的非常有道理,而华清刚好践行了这样一个准则,因此,我觉得,培训几个月以来大的收获就是能够独立编写程序了,可能有人觉得这其实很简单,但是,大家也会发现大学里面,即使是学计算机的同学,大学几年上完之后能够独立编写一个50行左右的代码,并且能够考虑到各种bug和性能方面的同学寥寥无几,大家不相信的话,在找工作的时候第一道“工序”就是笔试,笔试中有很多编程题,这些题目其实都是非常“简单”的,但是,能够把这些“简单”的程序能够写出来,并且能够考虑到各种边界条件和bug就不容易了,另外,还有部分企业会安排机考,考试题目也很基础,但是能够编写出程序,能够正常运行我觉得也不是一件容易的事情,尤其对于没有进行过实际编程的同学来说,难度更大,通过华清的培训,这些能力我都具备了。

以下谈谈整个培训过程中课程学习的一些体会。

对于C语言,我相信大家一定会在大学阶段就已经学习过了,所以,问题不是特别大,但是,想要学好C语言就需要从深层次上去理解,我觉得学习任何一门语言,都必须理解这语言的设计初衷是怎么样的,其目的是解决什么问题,面向的对象是什么?因为C语言是整个嵌入式学习的重点,因此一定要把C语言基础打好。

学习C语言我们需要明白C语言的发展史、优缺点、特点、特色以及一些新特性,当然这些东西都是从概念上和宏观上去理解,记住:理解非常重要!然后,就需要认真学习C语言的语法,每个语言都有自己独特的语法体系,这其实就像我们一种玩游戏之前,必须要先搞明白游戏规则和每一种武器的特性一样,规则不懂那肯定游戏都玩不了,不懂武器的特性显然也不算一个“合格”的游戏玩家,这个道理大家肯定都明白,C语言的语法比较丰富,有数据类型、关键字、文件操作、丰富的运算符、语法结构、条件编译、模块化编程思想、书写规则以及一些典型的错误等语法,你对这些语法了解的足够透彻,你就能够玩好C语言这场“游戏”,然后,就是要不停的“玩游戏”,你才对“玩游戏”比较熟悉,当别人要求你去玩这个“游戏”的时候,你才能够轻松掌控整个场面。

在C语言阶段,华清的老师会给我们把C语言的各种“游戏规则”和“武器特性”讲解的非常透彻,我们要做的就是记住这些规则和特性,然后不断的练习,记住,编程不练习结果就等于零。在这里我也有个建议,就是要养成一个良好的记笔记的习惯,因为,四个月的学习,知识量真的非常非常大,我觉得大家基本上和我一样是一个普通人,很多东西当时就听明白了,可是过了一段时间就会忘记,因此,记笔记就非常重要,忘记了你可以回过头去看,这一点我做的非常好,这也是一个非常好的方法,假如别人问你:小学5年级的某一天你都干了些啥?我想,要是对于一个在小学写了5年日记的同学来说,他翻翻自己的日记就能够回忆自己当时干了什么,但是对于一个从来没过日记的同学来说,你的童年就真的永远变成童年了!另外,自己能够把自己所学的知识讲解给班级别的同学听,并且能够讲明白这样是好的,这也就是讲着讲着你就真的明白了,不信的同学可以试试,我就是这么学过来的。

C语言总结:深刻理解C语言的每一个详细语法+记笔记的好习惯+不断的练习编程+踏实勤奋的努力+乐于给别人讲解你所理解的C语言 = 一个合格的C程序员。

对于学习数据结构,首先我们要搞明白数据结构到底是干什么的?数据结构是计算机存储、组织数据的方式。然后就有一些典型的组织数据的方式需要我们去研究,数据结构是非常重要的,在找工作笔试环节会有很多的考点,尤其对于链表、队列、栈、二叉树等各种数据结构必须要多花时间写程序实现,对一些典型的操作一定要熟练掌握,找工作笔试必考。

数据结构总结:理解+大量的练习

对于Linux系统编程,首先是要对整个Linux系统要有所了解,必须能够正确熟练地应用Linux操作系统,因为大家在平时可能用的Windows系统更多一些,很少有人去用Linux,所以能够熟练应用Linux系统时基本的,当然在华清上课期间的整个四个月都是基于Linux系统的,所以基本的操作不成大问题,接下来的问题就是要深刻理解Linux操作系统管理整个系统的方式,能够进行shell编程等,以及后续的多进程和多线程等知识,这一部分的知识,我个人觉得理解的知识是非常多的,比如Linux的系统文件目录组织方式,大家就要思考为什么这个目录是这个名字?有什么用?然后还有后面的多进程、多线程等知识点,就必须明白进程和线程的概念,它们之间本质的却别等等,多进程和多线程的编程模型是固定不变的,因此,重要的深刻理解进程和线程的运行原理,操作系统是如何进行调度的、进程的状态、进程间的7种通信方式以及它们之间的区别、进程间的同步、线程间的通信、同步等问题,这些问题,华清的老师讲的很明白,我们要做的就是上课认真把这些问题听明白,并且把重点记录下来,以便后续复习。

系统编程总结:深刻理解+练习

对于ARM硬件、系统移植课程,这部分的编程不是特别多,大部分的工作量就是修改代码,所以学习方法相应也会 有一些不同,对于ARM硬件,理解为先,比如ARM核的设计思想、流水线的原理、指令集、ARM的工作模式、异常类型等知识点,要深刻理解裸机情况下程序的运行原理,尤其当异常发生时要弄明白程序的具体运行过程,这些知识点都是理解性的,另外,还需要学会datasheet的阅读方法。

对于系统移植,首先还是深刻理解开发板的启动方式、具体的启动过程,这一部分的工作,同学们在学习的过程中可能大部分时间都是按照实验手册上的步骤去做,但是要真正掌握系统移植的精华,就必须知道移植手册的每一个步骤是实现什么功能、具体的原理是什么?我感觉在系统移植的阶段大家必须要知道:我要干什么?我该怎么做?首先明白,经过这一个实验步骤之后我们要实现一个什么样的效果,这是我们要达到的目的;其次,我们为了达到这个目的需要去修改哪些文件的哪些内容,具体的步骤是什么?

系统移植面对的是整个bootloader、kernel源码,因此代码量会非常大,但是我们并不需要去研究每一个文件,而是有针对性的修改,这就需要大家对整个bootloader和kernel的源码的目录框架进行学习,做到宏观上把控、围观上研究,首先从宏观上去理解整个系统的框架是什么样的,然后定位到具体的文件的某一行去修改,给个小建议,修改系统的某一个文件之前,记得备份,不然,修改错了,你的bootloader或者kernel直接挂了,你都不知道哪里错了,要进行对比分析,对比学习。

在系统移植的过程中,我们经常要用到交叉开发工具,尤其对NFS、TFTP的使用多,因此对两个服务一定要熟练应用,很多时候出现问题之后只需要重启下服务就可以解决问题。另外,必须深刻理解FLASH的几个分区都是存放了哪些代码,这些代码什么时候被加载到内存的,什么地方去运行等都是需要理解的地方,其次,就是我们的开发模型是交叉开发环境,我们自己移植好的bootloader和kernenl以及根文件系统有时候是通过TFTP和NFS等网络的方式让开发板运行,而有些时候又是通过从FLASH中读取到内存中去执行等等,这些不同的方式的区别在哪里?其实代码都是有一样的,只不过把这些代码终加载到内存中运行的方式不同,那这个时候就需要理解不同的方式启动的时候区别在哪里?如何设置不同的启动参数,以及在每一种启动方式下,可能会出现哪些问题,出现了这些问题之后如何处理等等,这些问题只有深刻理解了整个系统移植的开发模型和系统的整个启动过程之后你才能够定位问题的原因,否则,学习系统移植大家会感觉比较茫然。

总结:深刻理解ARM核的设计思想 + 深刻理解交叉开发模型 + 深刻理解bootloader的作用以及启动过程 + 深刻理解Kernel的启动过程 + 深刻理解 + ……

大家也注意到了,以上都是深刻理解,如果不深刻理解,底层的东西是学不好的,因为底层的东西有时候你没法验证,你只能理解,在华清上课的过程中,老师会结合实际的情况把握以上说到的问题分析的非常透彻,大家要做的就是:

第一:认真听讲,深刻理解,跟上老师的思维,多思考,多提出问题;

第二:一定要做好笔记;

关于Linux驱动,大家可能会觉得驱动是难的,的确驱动相比前面的课程,是有一些难度,但是,总是有一些学习方法供大家参考。

Linux驱动的学习,大家必须要深刻理解Linux操作系统2.6内核的目录结构、内核的编译过程、系统调用原理、操作系统的用户态和内核态的区别、Linux系统中文件的打开原理等核心知识点,然后需要学习Linux内核模块、Linux文件系统与设备文件系统的一些关系,以及设备文件时如何反应到Linux的文件系统当中的,它们的组织方式是什么原理,这些知识点都是理解性质的,理解不清楚,后面的驱动都是没法学习的,驱动的学习更加注重的是一种框架、一种模式,因此,对框架的理解一定要深刻,比如Linux系统是如何把每一个硬件都模拟成文件进行操作的,这个具体的模拟过程是怎样实现的等等。

另外,一定要深刻理解内核中面向对象的具体应用,大家知道,操作系统是由C语言写的,而C语言是面向过程的一种程序设计语言,这一点大家肯定已经体会到了,但是在操作系统中,利用C语言把面向对象的三大特性(封装、继承、多态)表现的淋漓尽致,现象对象的设计思想首先是描述对象,然后创建对象,后是调用对象,C++/Java的精华就是玩对象调方法,也是遵循以上的三个步骤,那么在驱动的学习过程中,我们会发现,对于一个需要能够让Linux识别的任何一个设备,这里的设备不仅仅是针对一个具体的设备,比如led、按键、触摸屏、lm75温度传感器等才算是一个设备,其实我们的总线在Linux系统中也是被看成一个对象的,这也就是面向对象中的“一切皆对象”也对于我们Linux操作系统中的“一切皆文件”的说法。写Linux平台的设备驱动,其实就是按照操作系统规定的规则进行以上实现面向对象的三大过程:

1.描述设备(分为静态描述:设备的静态特性 动态特性:跟设备相关的操作)

2.创建设备(为设备分配内存,并且进行初始化)

3.添加设备(把设备添加到操作系统中,让操作系统能够识别这个设备)

以上工作做完了,设备就已经添加到系统当中,然后应用程序就可以通过我们自己写的设备驱动访问我实际的硬件设备了。这就是Linux环境下写驱动的基本原理,当然这只是一个基本的思想,具体的很多细节性的东西还需要自己去仔细琢磨。

同时还需掌握Linux模块编程方法,然后按照以上的大概步骤就可以写一些简单的驱动了,我们学习的字符设备驱动比较多,因此要对字符设备驱动框架有一定的理解,知道去哪里添加删除代码等。然后还理解设备驱动中的并发产生原因以及如何实现对并发的控制、Linux设备驱动中的阻塞与非阻塞方式、Linux设备驱动中的异步通知、中断的上半部和下半部、内存与I/O访问等,这些知识点都是需要理解,然后把自己理解的知识添加到自己的驱动模块中进行验证。

总之,Linux驱动的学习,框架占70%左右,真正的硬件操作只占大概30%左右,因此,掌握Linux内核的框架对于学习驱动是非常重要的。

在华清的培训当中,老师会把这些框架的东西讲的非常透彻,对我们的理解具有非常大的帮助,因此上课一定要认真听讲,多思考,多理解。

总结:深刻理解内核框架 + 深刻理解系统调用原理 + 深刻理解sysfs文件系统 + 深刻理解模块框架 + 深刻理解字符设备框架 + 深刻理解并发 + 深刻理解设备驱动的异步通知 + 深刻理解中断上下半部

以上是我对整个培训课程的一个大概总结,因为我个人比较偏向底层,所以对java和Android应用方面的学习没有给出一些建议。

以下再谈谈找工作方面的一些感受:

找工作目前来说有两种情况,一种是通过社招,这一类针对往届毕业生;另外一种是通过校招,这只针对于应届毕业生。相对来说,社招的要求会更加高一些,对工作经验的要求比较高,而校招更加看重的是学生的基础,对经验要求并不是很高,因此,扎实的专业基础对于校招来说是具有很大的优势。那么结合自己跑招聘会的经验,给大家以下几点建议:

首先,要认真的写一份自己的简历,有很多同学只用了大概几个小时就写了一份简历,完全不重视简历,这是极其错误的做法,简历就是人家企业在没见到你的真人时去“透视”你的唯一途径,所以必须得引起重视,简历的写法大家可以在网上看到一大堆的建议,但是我个人的建议就是一定要写的大方得体,字迹不要太密集,让别人看的轻松,基本信息应该清楚,专业技能一定要写详细,项目应该要根据自己的情况写4-5个左右,而且一定要对自己的项目非常的了解,做到面试官随便问,你能对答如流的境界。

一般企业在经过简历筛选之后,都会通知你去参加企业的笔试,笔试成绩对应届毕业生来说是非常重要的,因为笔试题相对来说考的都是非常基本的题目,企业会通过对这些基本题目的考察,以区分学生的基本功是否扎实,很难相信一个人笔试成绩很差,但是能力很强,嵌入式是一个理论性和实践性都非常强的技术,两者缺一不可,因此笔试一定要考好。假如100分的试卷,你已经考了85分以上,这说明你已经被该企业录取的可能性已经达到了95%,所以,在跑招聘会之前进行有针对性的笔试复习是非常关键的,笔试成绩考的好首先会给企业留下一个非常好的印象。

关于如何准备笔试,市面上也有一些类似《程序员面试笔试宝典》之类的书籍,里面总结的比较全面,把一些比较坑的知识点都总结了,把这个看完,基本上就没啥问题了,我之前就是这么准备的,后来发现,所有企业的笔试题就那么几个考点,甚至原题都一大堆,有时候我感觉不是在做笔试题,而是在默写答案,想想这是多么爽的一件事情。

如果你的笔试成绩很好,你肯定会进入面试环节,面试环节的灵活性就比较大了,问的问题也因人而异,但是八九不离十,基本都是你简历上写的东西,尤其是你做过的项目,因此对于自己写上去的项目,自己一定要反复总结,把硬件原理和软件架构甚至是大部分的代码模块都必须非常清楚,当别人面试官问你的时候,基本上你不需要思考就可以应答自如,这样面试官会觉得你的思维比较敏捷,会觉得你真正的把这个项目搞明白了,因此,简历上写的东西,要么精通,要么不写,如果被问到之后你回答得模棱两可,这样影响反而不好,因此简历的书写非常重要。

另外,对于整个面试环节,差不多我去过的企业都是1个小时多一点点,因此整个过程是比较长的,但是,实际上你会感觉时间过的非常快,那么在这一个小时的交流中,首先你要对简历上写的项目完全明白,在回答这些问题的时候,给大家一个建议:那就是你的回答要让面试官觉得你很厉害,另外你要对面试官表现出你对这个行业的热衷和钻研,要让面试官觉得你是真真的想实现自己的技术梦想,而不是简单的去他们企业混口饭吃,同时,在整个交流过程中应该坚持谦虚谨慎的交流态度,而且表现出毫不紧张的精神风貌。

如果技术面试通过了,就会进入HR面试,一般这个时候已经没啥大的问题了,但是仍然要注意几点:

第一:你要想HR表现出你非常想去他们企业工作,而且表现出要干一辈子的决心,当然这是扯淡的话,尺度自己把握。

第二:HR会问一些家庭的情况,这时候你要介绍你的家庭对你技术的支持,和谐的家庭环境,并且表现出家人非常支持你去该企业所在的城市去发展。

第三:关于薪资的话,我觉得你要跟你面试的情况来说,要是面试的非常成功,你可以多要一点,要是感觉面试比价悬,那么这时候可能就要要低一点了,其实,很多企业对应届毕业生的薪资是规定死了的,所以你可以说没啥具体的要求也行,你在乎的是企业的这个岗位刚好是你非常喜欢的,也是你特别擅长的等等之类的话。

以上是我对自己在华清培训和找工作方面的总结,通过华清的培训,我找了一份自己非常满意的工作,我想,这离不开华清远见每一位老师对我的关心和帮助,在整个培训过程中,老师们对我的学习启发很大,对于很多理解性的知识点,我感觉你自己看几十遍都体会不到它本身的精华,但是在华清,老师们会把自己总结和学习了多少年的精华全部讲解给你听,这大大的缩短了我们原始积累知识的周期,使得我在短期之内积累了大量的知识,使得我对整个嵌入式开发有了更深层次的认识和理解。

后,感谢我身边每一位同学对我学习的支持和帮助,再次衷心感谢华清的每一位老师对我的启发和教育,也希望我的一些体会能够对后来的学员在学习上提供一个参考,谢谢大家!

华清远见教育科技集团学员新就业风云榜 >>