图像工程师的六脉神剑——“选扫掌仿习练”
——不是每个人都能成为一代宗师,因为在一个时代宗师只有少数人,成不了宗师,可以选择成为门派高手,立足武林的六合一之路无外乎秘密武器、江湖规矩、内功心法、武术动作、内功修炼及实战经验。修炼六脉神剑,成为高手,行走江湖,行侠仗义,斩奸除恶,开启江湖人生!
0.引言——高手没有天赋,只有初心、选择、努力和毅力


图1 工业视觉处理(图片来源:自电子元件技术)
图像处理是通过对图像进行增强、复原、重建、分析及特征识别等处理以得到目标结果,在工业、消费电子、安防等领域具有广泛的应用。FPAG支持实时流水线运算(跟工厂流水线作业一样、不同的工序可以同时开展),具有高实时性特点(通过并行作业、可以在极短的时间内完成任务),是图像处理应用的主要平台,在一些高并发性、实时性要求较高的应用领域,只能通过FPGA实现。
FPGA图像工程师的薪资水平普遍较高,但综合能力要求极高,又是算法、又是编程,又是硬件,不是迫不得已或者兴趣,很多人一开始就选择放弃,实际入门真的是这样子吗?跟很多技术一样,
难不在技术本身,在学习的初心、态度、流程及方法
,下面是本人基于多年的经验整理FPGA图像工程师晋级之路。
1.选武器——倚天QUARTUS、屠龙VIVADO,掌控优先
FPGA开发的工具平台包括
综合编译工具、仿真工具、代码编写工具及入门开发板
,选好用好工具平台不仅可以降低入门难度,还利于快速提升设计开发能力。工具平台选择以易于入门,便于熟练掌控,利于升级为基本原则,下面是有关工具平台选择、使用方法及相关资料的分享:
(1)选开发工具
①综合编译工具——优选QUARTUS,升级VIVADO
主流的FPGA厂商主要有:国际Intel、Xinlinx、Lattice等,国内的紫光同创、京微齐力、高云半导体等,每家厂商都有自己的开发工具,解决新建工程、仿真综合,配置管脚、下载和在线调试等问题,功能大同小异,差异主要存在于操作习惯、性能及操作方法等方面。
主流的开发工具主要有来自Intel的QUARTUS和Xilinx的ISE、VIVADO
,其中ISE是XILINX较早开发的版本,适用中低端芯片的开发,VIVADO是XILINX近期推出的开发平台,适用于XILINX的中高端芯片的开发(不支持低端芯片的开发)。
表1 QUARTUS与VIVADO比较
QUARTUS
VIVADO
安装包大小
电脑配置要求
快(分钟计算)
慢(小时计算)
操作便捷性
约束严谨性
多(尤其中文)
少(英文为主)
相比而言,QUARTUS无论是对资源的要求,还是使用简单性都要优于VIVADO,但功能的齐全性低于VIVADO,综合市面上Intel的FPGA开发板相对比较便宜,
建议初学者先选择QUARTUS入门学习,掌握熟悉之后,根据个人情况及开展具体项目的要求,再学习使用VIVADO
备注——综合编译工具下载地址:
1) QUARTUS软件安装包,建议安装18.1精简版本的,不需要破解。
下载地址:
http://www.
fpgabbs.cn/forum.php?
mod=viewthread&tid=429&extra=page%3D1
2) VIVADO软件安装包,建议安装2018.2版本的,在XILINX官网可注册LICENSE。
下载地址:
http://www.
fpgabbs.cn/forum.php?
mod=viewthread&tid=435&highlight=vivado
②仿真工具——业界主流MODELSIM
QUARTUS与VIVADO都自带仿真器,但是不好使用,目前业界基本都是使用MODELSIM作为FPGA仿真工具,基本是标配。
备注——仿真工具下载地址:
下载及安装教程地址:
http://www.
fpgabbs.cn/forum.php?
mod=viewthread&tid=430&extra=page%3D1
③代码编写工具——优选GVIM,可选NOTEPAD++
QUARTUS、VIVADO、MODELSIM都自带有代码编写器,但交互性不好,强烈建议选用GVIM、NOTEPAD++等代码编写工具。
在Windows系统环境下,可以采用NOTEPAD++,特别是从软件转行过来,已经习惯NOTEPAD++使用的开发者。但
如果想在IC设计、IC验证或者FPGA上走得更远,强烈建议选择GVIM
,一方面IC行业基本都在使用GVIM,另一方面来自于工具本身功能足够强大,不仅支持常规的编辑、复制、删除、查找、替换等功能,而且支持“命令行”输入。
备注——Windows版本GVIM工具下载地址:
下载及安装教程地址
http://www.
fpgabbs.cn/forum.php?
mod=viewthread&tid=431&extra=page%3D1
(2)开发工具使用
①VIVADO和QUARTUS使用方法
VIVADO和QUARTUS的功能,最常用的功能包括:
新建工程、选好芯片型号、配置好管脚、综合编译和上板调试等功能
。各个工具都是大同小异,但要注意学习FPGA不是学工具,而是学习如何设计、学习如何定位问题和解决问题。
——VIVADO和QUARTUS使用资料推荐
VIVADO使用教程链接
http://www.
fpgabbs.cn/forum.php?
mod=viewthread&tid=1023&extra=page%3D1
QUARTUS使用教程链接
https://
pan.baidu.com/s/1Zf-bjX
F4v72tXx2NnEfCsw
:yknc
②Modelsim使用方法
掌握Modelsim工具的基本使用,主要包括:
新建工程,添加文件,编译,VSIM仿真及查看仿真波形
(3)选开发平台
学习FPGA编程,开发板是标配平台,市面上FPGA的开发板非常多:100~200元的入门级产品,500~1000元的进阶产品,数千上万元的高级产品。对于初学者可以选择点拨FPGA之入门开发板、MP801、新起点FPGA开发板、AC620 FPGA开发板等。
2.扫规矩——Verilog江湖明规矩讲武德,走马观花留印象
选好工具、开发板,接下来就是学习FPGA的编程语言——Verilog和VHDL,其中VHDL在教学科研中较为常见,实际的应用中基本都是以Verilog为主,风格与C语言类似,强烈建议学习Verilog。传统的学习模式都是选一两本教材反复研读理解每一个语法的细节,翻了一遍没感觉,再翻一遍,也没记住多少,一两个月下来还是不知道如何编写。其实对于大多数初学者而言,这样的学习模式是无效率的,因为短期内无法理清语法规则,如何使用。因此,
强烈建议找一两本经典教材,花两三天时间走马观花过一遍,不需要追求掌握细节,有印象大概明白即可,使用的时候再回过头来查,使用多了自然就会明白,这跟小孩走路一样,一开始总是别扭,找到感觉了自然就灵活了
。重点理解:
表2 重点理解Verilog知识点
always
①了解时序逻辑和组合逻辑的always: ②了解它们的区别,了解D触发器的原理、波形、建立时间和保持时间这些概念;
if else和case语句
理解选择条件,理解case用法
理解时钟、复位及使能的作用,重点培养根据代码理解波形,这点非常重要
算术运算符、逻辑运行符和比较符等
Verilog里的加减乘除等用法、与或非门的用法、大于等于小于等的用法,这些实现功能的基本元素
写时钟、复位和使用initial产生激励
掌握基本的仿真文件编写技巧,掌握时钟、复位等信号产生,例化设计对象,产生激励源
推荐的书:
夏老师的《verilog HDL数字系统设计教程》
,这是一本经典的verilog书籍,已出版十几年,一直很受欢迎;
《FPGA至简原理与应用》
,该书还没有出版,只有电子版,
配套视频讲解帮助学习
3.掌心法——FPGA软硬心法核心在至简,避免走火入魔
FPGA的设计
(1)FPGA软硬件设计思维风格
FPGA需要编程实现,但实际是硬件设计,这与软件设计有本质的区别:
① 软件设计思维风格


图2 软件思维设计风格
软件设计思维即指熟悉的C、C++、Java等软件编程的思维,可以边写代码,边看处理看结果,风格如图2所示。图3是基于软件设计思维实现Y=a+b*c+d/e计算的过程。








a+b*c+d/e的软件设思维计实现过程(GIF)
② 硬件设计思维风格
硬件设计思维与软件设计思维有较大的区别,软件设计思维只需要考虑逻辑,基本不用考虑时序的问题,但是硬件设计思维处理模块功能,还需要考虑模块之间的耦合时序问题,具体设计风格如图4所示。图5是基于硬件设计思维实现Y=a+b*c+d/e计算的过程。


图4 硬件设计思维风格


a+b*c+d/e的硬件设计思维实现过程
相比成熟的软件设计思维风格,硬件设计的思维风格被提及得不多,很多初学者尤其是有一定软件基础的码农朋友,一时半会无法转过弯,因此感觉到很难,那难在哪里?特别是在定位查找问题的时候


图7 软硬件设计思维查找问题的区别
就像图7所示一样,软件是按顺序执行,哪里有错很容易找出出错的地方;而FPGA只有在结果不对的时候,再回去找出问题的点,但那么多模块,到底是哪个出错了,是比较难定位的,这就是FPGA的难点之一。
(2)设计思维风格选择——4大建议2个推荐
软件设计思维和硬件设计的思维风格区别明显,在选择之前先通过表3了解两种风格的优缺点。
表3 软硬件设计思维风格优缺点
硬件思维风格
软件思维风格
清楚信号变化的需求、原因及时间,即什么信号变,什么时候变,为什么变
仅需清楚信号变化需求,忽略信号变化的时间及原因,即什么时候变
入门难度大
1、刚学习容易碰壁,甚至放弃; 2、上手之后,面对复杂问题也能迎刃而解
1、小项目,简单容易; 2、随着项目工程变大,信号越多,时序越来越复杂,无从下手
如何选择合适的设计思维风格?建议两种风格都学习,结合起来用,在学的过程中先易后难,对于硬件设计思维,碰到困难问题,先放下,重效果实现暂时忽略细节,等知识经验积累丰富了,很多问题就会迎刃而解。具体6个建议如下:
软件入门,硬件进阶
:采用软件设计思维入门,同时注意硬件设计思维的存在,当设计水平遇到瓶颈时,学习硬件设计思维;
软件硬件同步学习
:两种设计思维相互补充,互相促进;
小项目软件思维入门,大项目硬件升级
:入门以后,随着大项目工作或者学习的开展,强烈建议采用硬件设计思维,这是一个优秀FPGA工程师必须具备的基本素质,很多企业也会有类似的要求,比如华为要求“一个always只能设计一个信号”,其根本上就是要求工程师要用硬件的思维来设计。
硬件设计思维避免牛角尖
:学习硬件设计思维,一定要避免钻牛角尖,切记不要以为是一定要想明白才去写代码、才去仿真验证,想不明白或者不能通过查资料,讨论等途径解决,就无法开展工作。FPGA设计思维尤其是硬件设计思维只是一个过程,正常的学习动作是写一点代码仿真一下,在设计过程中理解,在理解中改动设计,这才是正途。
推荐学习资源:
专业的、标准的硬件设计思维学习资源科选择——《FPGA高手修炼》
,该学习资源可以很好训练FPGA代码设计;
FPGA的模块设计技巧,可参考《FPGA架构设计》
(3)编译出错定位
使用开发工具过程经常会碰到很多问题,出来根据提示信息查找定位问题之外,也可以通过网络寻找同类问题解决方案。
备注——QUARTUS问题【汇总贴】推荐
常见QUARTUS问题汇总网址
http://www.
fpgabbs.cn/forum.php?
mod=viewthread&tid=901
(4)学会习仿真调试
仿真测试是FPGA工程师必须掌握的技能,FPGA工程师的基本工作状态是一个循环胎,即设计——仿真——调试——设计,因此,
需要掌握相关的仿真调试方法,边设计边仿真调试,不断修正错误,直至完成设计目标
。具体的要掌握的技能如下:
①测试文件的写法
熟悉测试文件的格式
:明确一个测试文件的基本组成要素,如模块名、信号定义、例化和产生测试激励等。
掌握时钟和复位信号的产生方法
:了解时钟、复位等信号的产生;
掌握信号激励的产生方法
:激励怎么产生,就是用那个initial语句,延时xx时间,给就一个1,再延时xx时钟,就给一个0。掌握这种基本的语法逻辑,在实际中基本够用了,具体参考如图8所示。


图8 信号激励产生示例
掌握以上测试文件的编写方法,在实际中基本已经够用了,相比而言更重要的是看仿真波形。
②MODELSIM编译错误的处理方法
在MODELSIM编译过程中,如果代码有错误时,软件会提示报错,并且会提示哪一行出错,例如图3所示。


图3 编译报错示意图
图3提示:在pkt_check_tb.v这个文件,第34行,信号“din”有错误,可以去34行查看问题,关于问题查看与定位梳理以下6点建议:
务必查看错误提示
,不管愿不愿意看英文,这是必须要掌握的基本技能;
强烈建议少用翻译软件理解错误提示
,依赖翻译信息容易失去重点,在查找问题时,很多时候不需要全部理解,抓住关键词即可。如图3所示,文件名叫
pkt_check_tb.v
信号din
有错,这些信息已经足够了,然后根据提示打开pkt_check_tb.v文件,去34行,找到din信号,去看这代码跟标准的代码比,有哪些不同,就可以把问题查找出来;
错误位置上下文也要看
,在处理编译错误时,不要只看提示错误的行,上下的行业好看。有时候上行的错,会在下行中提示;
不要害怕出现错误
,在FPGA开发过程中,遇到错误时正常现象,而且很多时候,错误并没有那么多,常见的错误基本都是:信号定义错误,例如reg信号定义成wire,wire信号定义成reg;信号位宽有错,信号没定义等等;
可以借助网络寻找解决问题的办法
:在学习、开发过程,经常会遇到很多问题,可以通过网络寻找同类问题的解决办法,比如MODELSIM/仿真问题帖子:
④错误问题的定位方法
与软件开发一样,调试是FPGA开发最为耗时的一个环节,需要根据代码和波形,找出逻辑的错误。但与时序软件设计项目,FPGA的调试难度较大,不像软件那样支持但步调试,FPGA是一个并行硬件,所有模块是一起工作。
在实际的工作中,更考验心态及心细程度,一般采用二分法树藤摸瓜解决问题
,比如一个工程分为ABCDE5部分,现在E的结果有问题,具体定位过程如下:
1) 先看C是否正确,如果正确,说明错误由DE导致,如果错误,说明错误由AB引起;
2) C正确:检查D的结果,如果D正确,则错误由E产生,反之由D产生;
3) 如果C错误:检查A的输出,如果A正确,则错误由B产生,反之由A产生;
4) 就这样一级一级排查,最终总会定位到问题所在点。
更多的FPGA问题定位技巧可参考:
http://www.
fpgabbs.cn/forum.php?
mod=viewthread&tid=268
(5)在线调试
经过综合编译,下一步就是上板测试看效果。仿真通过不代表就是正确的,仿真只是模拟的仿真,仅说明“逻辑”正确,实际中还会有很多因素影响结果,比如管脚配置错误、硬件故障、信号干扰等问题。不同的开发工具都对应不同的在线调试工具,QUARTUS自带的SIGNALTAP、ISE自带的CHIPSCOPE,VIVADO本身的调试工具。在线调试工具与仿真工具类似,区别在于仿真通过电脑模拟,在线调试工具是抓取实际信号呈现结果。
在线工具具有局限性,只能看一小部分的信号以及有限的数据量,这意味着在线调试工具只能定位未知的小BUG,逻辑设计还是要靠仿真来保证。
备注2——SIGNALTAP的使用方法资源推荐:
Signaltap使用教程链接
https://
pan.baidu.com/s/1o6ti4Z
r31mRw2qKYrMQQQg
:pj5s
4.仿动作——依葫芦画瓢入门案例,学基本动作要领
仿写现成案例是最快速也是最简单的学习方法,建议仿写案例从简单开始逐步过渡到,在仿写的过程中逐步掌握Verilog语法、计数器、位宽扩展等复杂应用并熟悉工具使用。推荐的仿写案例如下:
LED灯系列
:1位闪烁灯、4位闪烁灯、PWM呼吸灯等;
数码管系列
:数码管动态扫描、秒表、数字时钟等;
这些案例都可以通过互联网搜索到,或者通过购买开发板获得,具体的学习建议如下:
抄写练习混脸熟
:抄写一遍,以熟悉工具流程和熟悉语法为目的,并在抄写过程中理解常用的编程语法;
盲写练习涨经验
:盲写一遍,上板调试看结果,如有问题对比源码定位问题,盲写效果比抄写效果要好,印象更加深刻;
谨慎扩展练习有耐心
:在语法、工具还不熟悉,设计思维还没形成的情况下,不建议扩展功能,因为容易出错,浪费时间还打击信心。建议先仿写、盲写基本案例一个周期,通过对比学习中不断提升基础能力;
谨慎开展设计有信心
:很多初学者学一两个星期就开始设计,以为已经具备FPGA设计能力,这是误区。一般情况,FPGA和芯片设计工程师开始一两年都是开展验证的工作。优先的工程师都是建立在阅读理解、仿写及修改大量代码的基础上,才能逐步掌握设计能力。因此,开始设计不出来是正常的现象,没必要灰心。
结合工具积累技巧
:在学习过程中,结合QUARTUS、VIVADO、MODELSIM等工具和开发平台,不断积累并掌握掌握仿真、定位问题等技巧。
5.习基础——万丈高楼平地起,基础决触达定高度
以上是FPGA知识,要进阶成为FPGA图像工程师,除了FPGA基础知识之外,还需要掌握图像的概念及图像处理的方法,与FPGA学习一样,一开始并不需要去深度研读图像处理的相关原理书籍,可以通过仿写
VGA显示颜色、VGA显示矩阵、VGA显示圆、VGA显示动画和VGA显示图片等
图像基本实验掌握图像处理的基本概念:
理解图像时序
:理解图像传输的信号时序,例如行、场同步信号等;
理解图像格式
:理解图像的RGB888、RGB565、RAW12等数据格式;
理解图像显示方法
:理解一幅图像是如何将像素数据传到VGA、LED等显示设备进行显示的,是如何对齐的。理解这些,有助于实现画中画、图像拼接、裁减等高级功能的实现;
理解图片动画实现方法
:动画本质上是多幅图像的滚动显示,本质上也是图像显示。通过动画的实现方法,可以实现更种游戏的实现;
理解图像存储的处理法:
6.练实战——闭门造车、战场上只能被KO
通过图像基础案例之后,可以开展一个具有代表性、完整性的FPGA图像处理项目——FPGA图像边缘检测,具体完成的内容包括:
图像采集——OV7670
:具体的内容包括OV7670传感器的配置、图像采集;(选择OV7670是因为该传感器资料众多,具有代表性,在掌握图像采集之后,可通过举一反三掌握AD、DA的配置方法,甚至可以延伸联系LVDS、MIMP及HDMI等图像视频接口);
图像处理:
包括灰度转换、图像格式转换、高斯滤波、SOBEL边缘检测算法(也可尝试中值滤波、腐蚀等图像处理算法);
:与嵌入式计算机不同,FPGA的存储是一个难点,需要在硬件逻辑下考虑不同帧图像的处理关系,需要注意时序及存储容量的控制。
通过项目实践,掌握图像采集、图像处理、图像存储及图像显示等常见图像处理的功能,同时对图像数据带宽等概念有了深入的理解和认识,比如1080P、4K和8K等。
备注——FPGA图像边缘检测实践资料
http://www.
fpgabbs.cn/thread-879-1
-1.html
总结与后续——高手过招,每一个伤疤都是大牛的垫脚石
至此,一步一个脚印走完六步法,完成图像边沿检测的项目,基本走完从小白到FPGA图像工程师入门之路,无论是知识还是信心都有了质的飞跃。如果能在学习过程中学会举一反三、触类旁通,找个心仪的工作问题不会太大。

能力和经验的提升是一个长期的过程,强烈建议基于上述知识基础及问题解决的技巧,开展更多的项目实践、比如图像的放大缩小、车牌识别、手势识别等,LVDS、MIPI、HDMI接口等高速接口,也可以开展4K、8K图像处理掌握更高速、更复杂的FPGA图像处理项目。在成功喜悦和失败煎熬的锤炼下,你或许也会跟我一样感慨,成为大牛并没有想象中那么难!

如果你也有相关问题的可以讨论V:xingxingge699

FPGA图像工程师的六脉神剑——“选扫掌仿习练”相关推荐

  1. 上海广策信息 招聘FPGA开发工程师/IC验证工程师

    今天给各位大侠带来优质企业的招聘资源,有需要的可以往下瞧一瞧看一看,感觉符合自己的,可以试一试,自行投递简历. 广策信息 公司简介 上海广策信息技术有限公司(TacFintech)成立于2017年2月 ...

  2. 北京熊通科技 招聘FPGA研发工程师

    今天给各位大侠带来优质企业的招聘资源,有需要的可以往下瞧一瞧看一看,感觉符合自己的,可以试一试,自行投递简历. 北京熊通科技 公司简介 北京熊通电子科技有限责任公司(以下简称熊通科技)成立于2006年 ...

  3. 北航软件测评中心 招聘FPGA测试工程师

    今天给各位大侠带来优质的招聘资源,有需要的可以往下瞧一瞧看一看,感觉符合自己的,可以试一试,自行投递简历. 北航测评中心 单位简介 中国航空工业集团公司计算机软件北航可靠性管理与测评中心成立于2000 ...

  4. 扬州宇安电子 招聘FPGA逻辑工程师

    今天给各位大侠带来优质企业的招聘资源,有需要的可以往下瞧一瞧看一看,感觉符合自己的,可以试一试,自行投递简历. FPGA人才招聘,企业HR,看过来!(免费招聘推送,点我跳转) 宇安电子 公司简介 扬州 ...

  5. FPGA开发工程师路在何方?

    FPGA开发工程师路在何方? FPGA作为一个比较新的领域,在最近几年中有很大的发展和进步.各个厂家的FPGA不断推陈 出新,工艺越来越高.速度越来越快.功能越来越多,价格却越来越便宜了.随着FPGA ...

  6. (240)FPGA验证工程师岗位技能树

    (240)FPGA验证工程师岗位技能树 1 文章目录 1)文章目录 2)FPGA入门与提升课程介绍 3)FPGA简介 4)FPGA验证工程师岗位技能树 5)技术交流 6)参考资料 2 FPGA入门与提 ...

  7. FPGA图像加速解决方案来了

    FPGA图像加速解决方案来了 参考文章: (1)FPGA图像加速解决方案来了 (2)https://www.cnblogs.com/alifpga/p/9285759.html 备忘一下.

  8. 中软国际(深圳)招聘FPGA开发工程师

    今天给各位大侠带来FPGA工程师岗位招聘的企业资源,有需要的可以往下瞧一瞧看一看,感觉符合自己的,可以试一试,自行投递简历. 中软国际 公司简介 中软国际有限公司是行业领先的全球化软件与信息技术服务企 ...

  9. 复旦微电子fpga数据手册_专注FPGA图像加速领域 深维科技跨入发展快车道

    日前,在2019赛灵思开发者大会(美洲站)上,深维科技正式面向全球发布ThunderImage三款重磅图像加速产品:全球最快的JPEG2JPEG缩略图方案.超高性能的JPEG2WebP转码方案及世界级 ...

最新文章

  1. 重磅推出:AutoProject Studio 自动化项目生成器
  2. MFC中利用CFileDialog选择文件并读取文件所遇到的问题和解决方法
  3. Google又放大招:高效实时实现视频目标检测 | 技术头条
  4. linux y脚本,Linux中脚本的使用方法
  5. react打包后图片丢失_如何快速构建React组件库
  6. unity 坐标系转换_Unity的几种坐标系及相互转换
  7. 【干货】同步与互斥的失败例子
  8. 【转】为了修复打码女神脸,他们提出二阶段生成对抗网络EdgeConnect
  9. 数据库基础知识——MySQL服务的启动和停止
  10. 王爽 汇编语言第三版 第9章 转移指令的原理
  11. SpringCloud整合nacos服务时无法发现服务
  12. centos7安装kibana5.x
  13. 企业数据总线(ESB)和注册服务管理(dubbo)的区别{{1033}}
  14. windows 7 如何调出快速启动栏
  15. c语言五子棋存盘,C语言 五子棋(初学者版).doc
  16. linux输入文件后clustalw,合并提取后的domain序列之后,linux系统中的clustalw不能读出蛋白信息...
  17. 小米电视android刷机,小米电视刷机经历
  18. vue 高德地图 不同区域显示不同颜色_高德地图这样用成为你的图表神器
  19. tomcat启动“成功”,但是浏览器无法访问
  20. ps ctrl+shift+j 切割瓶子

热门文章

  1. python爬取4399小游戏数据_Python爬取4399好wan的小游戏!
  2. python爬虫学习(8) —— 关于4399的一个小Demo
  3. 计算机非全日制硕士 选校,报考攻略:2021年报考非全日制研究生该如何选择院校和专业?...
  4. 微信微博是谁的菜?分久必合
  5. Linux的目录挂载详解
  6. IT管理类培训,你想了解的全都在这里
  7. 外包两年跳进外企和大厂,简历污点不是外包经历,是技术太差
  8. AngularJs 最新验证手机号码,成功测试通过
  9. python effective 骚操作
  10. 激荡20年:IE浏览器的辉煌与落寞