基本信息:男,河北人氏。现在珠三角一个无名二本读大四,专业通信工程。英语水平CET4,仅仅掌握好了两种语言C和asm。
大学IT经历:
从大一下学期买了电脑,正好学校也开了C语言课程,这一学期努力学编程把同年级人甩在后面。大一暑假又自学了汇编语言,大二开始了在Widows下编程,在看雪黑防潜水学了钩子技术,软件破解,PE结构体加壳脱壳等信息安全技术。这一年阅读并编写了不少汇编项目,熟练的掌握了x86系列汇编语言。大二寒假又自学了数据结构。
从大三开始转向嵌入式方向,先从单片机入手看郭天祥的书感觉郭编程实在不咋的,而且看到需要延时还得用那种for循环的笨办法。于是萌生了一个念头:在51芯片上跑一跑操作系统,让它也可以像windows下编程一样需要延时的时候调用sleep睡眠一会,时间到了之后系统自动唤醒睡眠进程。于是就买了ucos-II开始研读,读完之后发现在不扩展片外RAM的情况下根本无法移植,于是自己就动手写了一个专门针对51芯片的实时内核,由于针对51芯片做过优化所以可移植性不大但还是尽量把与硬件无关的代码抽取了出来。前后一共20天完成。之后又基于那个内核写了好多应用来测试51周边硬件。一段时间后感觉51芯片没什么好学的了(因为主要是做软件部分,硬件没深入学习)于是就开始读于渊的《自己动手写操作系统》,学习期间又复习了一下intel386体系构架包括段页内存管理,中断门,陷阱门,调用门,TSS等等。同时我们又开了微机原理课程因此又顺便学了一下8086周边的硬件编程操作。读完之后发现那个系统雏形并不是真正实现了多任务调度,虽然比单片机上高明了一点但本质上没有多大改进。于是就修改了时钟中断服务函数,实现了时间片轮调度,且加入了任务动态创建与删除功能,任务间通信机制,以及堆内存管理功能。算下来连修改和增添估计有3K行代码了,虽不多但都是在bochs调试器下弄出来的没有符号表只能反汇编调试。难度也不低,因此花了不少时间,后来感到这样一个人开发下去在x86体系上不可能开发出什么好的东西出来,于是就停止了。
最好的就是基于现有的系统搞一些开发,于是就选择了linux,首先阅读它的代码,按照网上高手指示选择了最早的0.11版本内核,在大三寒假阅读并调试了部分代码,由于有以前的x86汇编和386构架基础再加上赵炯博士的注释因此阅读起来没遇到什么困难。大三下学期就开始了解linux2.6.xx版本内核的驱动构架。学了内核态api包括进程调度内存管理等一套东西。并把网上的教程代码下载下来阅读,修改并编译通过。后来又阅读了USB协议并且将协议中提到的各个数据结构与数据传输过程与内核代码的USBdeviceDriver和gadgetDriver对比着阅读。并搭建了linux驱动的调试环境,单步调试分析USB驱动工作流程。
这样就到了大三暑假,去一家电子公司实习,负责一个电源测试模块基于WinCE的人机界面开发,开发工具是VS2005感觉跟在PC上没什么都是调用一些MFC类库。由于很多api以前没见过,并且WinCE平台与PC上毕竟有一些区别。只能便测试边开发,5周时间打好了框架并完成了一些具体能,至少有3K行代码。临走时老板跟我谈很久很希望我毕业后继续留在那里并说“如果你进不了跨国公司或者大型国企,在大四下学期还没能找到工作不如就来我们这里吧。”当时老板还希望我能留下来做独当一面的人。由于那家公司主要不是做软件的感觉没什么发展前景就敷衍了一下老板不准备再过去了。
大四开了嵌入式的课程,学习arm体系结构(其实大三下学期也接触过一点)个人感觉arm比起x86无论是内存管理还是指令集都要简单很多,毕竟是RISC构架,功率能做到那么小肯定有其设计简洁的地方。边学arn边来广州找工作参加了联发科宣讲会,笔试通过了,可面试时候发挥超差被刷了。那是小弟的第一次面试面的一塌糊涂;刚开始的自我介绍都没说好结结巴巴的不到10句话结束了。然后面试官看了一眼简历问我为什么只获得了三等奖学金,当时也太直了居然一急把我经常逃课的事直说了,接着问为什么逃课--作为一个学生连最基本都不去做(这时候面试官都有些生气了)。我只得支支吾吾的说逃到实验室写程序去了,显然当时面试官对我的回答极不满意。(其实逃课是因为有些课实在无聊比如线性代数课每次课老师都让几个学生上去做几个计算题,15分钟过去了只做了1个题,而且每次解题用的都是一个套路。记得貌似叫xxx迭代来着,当时发现不管是行列式,几个向量,线性方程组,非线性方程组都可以抽象出矩阵来处理,于是就设计了一个数据结构再加上几个算法大概2K代码把整个线性代数书上6章节中5章节的计算题都囊括了。当时如果把这个说上就好了可是居然给忘了。。。。)还有另外一个面试官再问有没有参加电子竞赛获奖的经历,又直接答曰“没有”。我了个去我怎么当时就那么笨呢,其实那些参加电子竞赛的人水平也没什么,都是C的初学者让他们移植一个ucos都办不到,而自己的水平早就到内核开发的水平了。到这里基本上就可以被刷了,人家象征性的又问了几个问题,我答。我象征性的又问了一个问题,对方又象征性的回答。于是那句委婉的“请回去等我们通知吧”送给了小弟。后来。。。就没后来了。。。
之后又去了一家广州的公司面试,本来以为是搞windows内核的,后来发现原来主要是搞PC桌面开发,由于觉得方向不对就没有选择那家公司。还有绿盟科技的逆向分析工程师也没来得及参加,收到通知时再赶到广州已经来不及了。。
总结一下小弟的各种能力:
1)只懂两种语言C和asm(或许后者不应算一种语言)。曾用这两种语言弄过病毒,操作系统,驱动,bootloader。也玩过机器码,曾经用十六进制编辑器加上0~F这16个字符在windows下鼓捣出一个helloworld出来。其它的java啦php啦都一窍不通。
2)对C理解深刻可以做到从编译器角度理解一些C的机制。关于栈,堆。可执行文件节之类的都研究过。以前去实习前面试时做过一份C语言试卷,项目经理后来不止一次问我我的同学有没有给我泄漏题目(因为有一个同学先去面试)。我对他说”没有,他只告诉我考C基础知识,很简单”。”那套试题可不简单,一般重点大学的学生只能答对20~30%”。可能是我的项目经理觉得我的答题结果超乎他的想象了。(因为我们项目经理曾在华为工作过,去全国的重点大学负责过好多次招聘工作)。
3)有很好的逻辑思维能力,调适能力强,必要时可以使用反汇编调试定位程序代码。
4)编程功地扎实,风格良好。大三时开发的51芯片内核,上传到网上值得被一些工作了的企业员工与研究生学习与使用。曾有多人阅读后还误以为是工作了的某个牛人写的。
5)做事认真,实习的时候项目经理把部分关键模块交给小弟来做,而不是外包给我们学校的老师。我问为什么答曰不放心怕他们做不好,觉得我做事可靠。
6)做事有耐心可以坚持下去,实习的时候公司一个一会儿做软件一会儿做硬件什么都做不稳的家伙,水平在小弟之下的人老板都给他开了月薪4.5K。
7)熟悉Linux字符,USB驱动框架,开发过一些字符驱动,但感觉这也太简单了有些C基础的人培训几天就能写出来。USB驱动只是分析过代码,并读过USB协议集,(中断,批量,控制,等时传输)但并没有什么成功的项目。由于小弟要从事这方面工作,所以还需要找个有大牛的公司可以指点一二。
8)英语能力,CET-4考前没当回事直接去裸考了居然过了。现在做arm开发熟练阅读英文文档。以前搞桌面以及WinCE开发都可以熟练阅读MSDN。
目前正在移植一个u-boot,顺便也留心一下合适的工作。。。。各位路过大大麻烦评估一下这种水平,如果是在深圳或者北京工作能值几个钱。。。
------解决方案--------------------------------------------------------
我们公司毕业生3500.当然优秀的4000,如果想要更高,1年后看水平了。
------解决方案--------------------------------------------------------
楼主N啊,如果大公司年薪15w+肯定没问题,只是浪费了青春,当然换一些银子罢了。不如干2年公司主力,然后创业?
------解决方案--------------------------------------------------------
如果谈的好的话 3500~4000,不好的话2000~3000(因为是应届毕业生),不过楼主的学习能力非常高,如果在工作的时候还能这样学习,楼主的前途是无量的……!像楼主学习!
------解决方案--------------------------------------------------------