免费炒股新手入门软件对新手起到帮助的有那些?一...

您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
[股市论谈]一位十年大户炒股日记&揭秘短线选股及操作法&解股解盘(整理版).doc80页
本文档一共被下载:
次 ,您可免费全文在线阅读后下载本文档
文档加载中...广告还剩秒
需要金币:100 &&
你可能关注的文档:
··········
··········
作者:中国A股狙击手?提交日期: 20:56
  作者:tylongda 回复日期: 20:14:56 楼主请问000977微套,是走是留?谢谢 作者:我们的事情 回复日期: 20:43:25 上来顶贴。老大要讲讲渔技啊! 从K线图看,如果浪潮信息都微套的话,这追涨也太离谱了。   个股涨停后,一般有3种比较经典走势。我们一一举例分析
作者:中国A股狙击手?提交日期: 21:07
  第一种,涨停(放量大涨9点类似涨停)后小幅震仓,再连续拉升大涨,如600053中江地产11月3日放量摸涨停至8元下方,后微调即一路拉升11月20日摸高11.5,半月涨幅50%。此类涨势的3个前提是:前期调整充分,日线指标变盘信号明显,以及短期大盘没有走凶。
作者:中国A股狙击手?提交日期: 21:31
  第二种,涨停后大幅杀跌(往往同期大盘破位或中长阴),大盘企稳即连续拉升大涨,如600239云南城投11月24日放量摸涨停至28元上方,后剧烈杀跌到27日的25元上方,30日线支撑,大盘企稳即一路拉升12月9日摸高34元上方,7天涨幅近40%。此类涨势的2个前提是:前期调整充分,日线指标变盘信号明显.黄金买点是参考30日线。
作者:中国A股狙击手?提交日期: 21:47
  第三种,涨停(或连涨停)后弱势装蔫多日到2月不等(往往此股业绩不佳),当日线指标再次显示变盘向上,即连续拉升大涨。   如000606青海明胶9月11日起连续3涨停至6元上方,后剧烈杀跌到4.6元,一个半月后的11月2日日线指标信号显示启动,即由5.2元一路拉升11月20日摸高7元上方,15天涨幅35%。此类涨势的2个前提是:前期调整充分小幅涨停,后期调整后日线指标变盘信号明显.黄金买点是参考后期日线指标。  
作者:中国A股狙击手?提交日期:2010-
正在加载中,请稍后...什么网站有免费股票分析软件下载?我想要找个比较好的免费股票分析软件,新手炒股,大家推荐一个软件_百度知道
什么网站有免费股票分析软件下载?我想要找个比较好的免费股票分析软件,新手炒股,大家推荐一个软件
免费的:通达信/大智慧/钱龙/东方财富/同花顺等,各有特点,可以百度一下,在其各自的官网下载。别人说好的,不一定适合你,自己体验才可以知道那款软件适合你!
其他类似问题
为您推荐:
其他4条回答
免费的能赚?收费的有时都不一定能赚,所以关键还是靠自己,想要软件的话有很多啊,同花顺、大智慧、东方财富通等等,你自己找下都能看到
同花顺,益盟也行呀
东方睿赢网站上有免费的股票分析软件。
您可能关注的推广回答者:
股票分析软件的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁常见EMC疑义及对策_怎么成为一个优秀的软件工程师--致亚嵌就业班的报名者和新学员_新手请问几个.Net数据库的有关问题__脚本百事通
稍等,加载中……
^_^请注意,有可能下面的2篇文章才是您想要的内容:
常见EMC疑义及对策
怎么成为一个优秀的软件工程师--致亚嵌就业班的报名者和新学员
新手请问几个.Net数据库的有关问题
常见EMC疑义及对策
常见EMC疑问及对策1. 为什么要对产品做电磁兼容设计?
答:满足产品功能要求、减少调试时间,使产品满足电磁兼容标准的要求,使产品不会对系统中的其它设备产生电磁干扰。
2. 对产品做电磁兼容设计可以从哪几个方面进行?
答:电路设计(包括器件选择)、软件设计、线路板设计、屏蔽结构、信号线/电源线滤波、电路的接地方式设计。
3. 在电磁兼容领域,为什么总是用分贝(dB)的单位描述?10mV是多少dBmV
答:因为要描述的幅度和频率范围都很宽,在图形上用对数坐标更容易表示,而dB就是用对数表示时的单位,10mV是20dBmV。
4. 为什么频谱分析仪不能观测静电放电等瞬态干扰?
答:因为频谱分析仪是一种窄带扫频接收机,它在某一时刻仅接收某个频率范围内的能量。而静电放电等瞬态干扰是一种脉冲干扰,其频谱范围很宽,但时间很短,这样频谱分析仪在瞬态干扰发生时观察到的仅是其总能量的一小部分,不能反映实际的干扰情况。
5. 在现场进行电磁干扰问题诊断时,往往需要使用近场探头和频谱分析仪,怎样用同轴电缆制作一个简易的近场探头?
答:将同轴电缆的外层(屏蔽层)剥开,使芯线暴露出来,将芯线绕成一个直径1~2厘米小环(1~3匝),焊接在外层上。
6. 一台设备,原来的电磁辐射发射强度是300mV/m,加上屏蔽箱后,辐射发射降为3mV/m,这个机箱的屏蔽效能是多少dB?
答:这个机箱的屏蔽效能应为40dB。
7. 设计屏蔽机箱时,根据哪些因素选择屏蔽材料?
答:从电磁屏蔽的角度考虑,主要要考虑所屏蔽的电场波的种类。对于电场波、平面波或频率较高的磁场波,一般金属都可以满足要求,对于低频磁场波,要使用导磁率较高的材料。
8. 机箱的屏蔽效能除了受屏蔽材料的影响以外,还受什么因素的影响?
答:受两个因素的影响,一是机箱上的导电不连续点,例如孔洞、缝隙等;另一个是穿过屏蔽箱的导线,如信号电缆、电源线等。
9. 屏蔽磁场辐射源时要注意什么问题?
答:由于磁场波的波阻抗很低,因此反射损耗很小,而主要靠吸收损耗达到屏蔽的目的。因此要选择导磁率较高的屏蔽材料。另外,在做结构设计时,要使屏蔽层尽量远离辐射源(以增加反射损耗),尽量避免孔洞、缝隙等靠近辐射源。
10. 在设计屏蔽结构时,有一个原则是:尽量使机箱内的电缆远离缝隙和孔洞,为什么?
答:由于电缆近旁总是存在磁场,而磁场很容易从孔洞泄漏(与磁场的频率无关)。因此,当电缆距离缝隙和孔洞很近时,就会发生磁场泄漏,降低总体屏蔽效能。
11. 测量人体的生物磁信息是一种新的医疗诊断方法,这种生物磁的测量必须在磁场屏蔽室中进行,这个屏蔽室必须能屏蔽从静磁场到1GHz的交变电磁场,请提出这个屏蔽室的设计方案。
答:首先考虑屏蔽材料的选择问题,由于要屏蔽频率很低的磁场,因此要使用高导磁率的材料,比如坡莫合金。由于坡莫合金经过加工后,导磁率会降低,必须进行热处理。因此,屏蔽室要作成拼装式的,由板材拼装而成。事先将各块板材按照设计加工好,然后进行热处理,运输到现场,十分小心的进行安装。每块板材的结合处要重叠起来,以便形成连续的磁通路。这样构成的屏蔽室能够对低频磁场有较好的屏蔽效能,但缝隙会产生高频泄漏。为了弥补这个不足,在坡莫合金屏蔽室的外层用铝板焊接成第二层屏蔽,对高频电磁场起到屏蔽作用。
12. 什么是截止波导板(蜂窝板),什么场合使用,使用时要注意什么问题?
答:由许多截止波导管组成的阵列板,需要较高的屏蔽效能和通风量时使用,使用时要注意蜂窝板与机箱之间要使用电磁密封衬垫安装,或焊接起来。
13. 有一台塑料机壳的设备,电磁辐射超标,为了使其满足电磁兼容标准的要求,开发人员在机壳内部用导电漆喷涂,结果没有明显改善,请分析可能会是什么原因。
答:原来的塑料机箱上孔洞过多、过大,产生严重的泄漏,也可能是缝隙不严(可能是接触不紧,也可能是在结合处没有喷导电漆),产生泄漏。另外,原来机箱上的电缆(信号线、电源线)一般没有良好的滤波措施,这些电缆造成机箱泄漏。
14. 透明屏蔽窗有哪几种,使用时要注意什么问题?
答:有玻璃夹金属网构成的屏蔽窗和在玻璃上镀上很薄的金属膜构成的屏蔽窗两种。在使用时,要注意金属网或导电镀膜一定要与屏蔽机箱的基体导电性紧密接触。
15. 在CRT显示器的屏幕上使用金属网夹层的屏蔽玻璃时,会有令人讨厌的条纹,怎样减小这种现象?
答:将丝网的方向旋转一下,使纬线与显象管的扫描线之间形成15~20度夹角。
16. 电磁密封衬垫的两个关键特性是什么?列出尽可能多的电磁密封衬垫种类,并说明各种产品的适用场合。
答:电磁密封衬垫必须具备的两个特性是弹性和导电性。常用电磁密封衬垫的种类有:指形簧片、金属网衬垫、导电橡胶、导电布包裹发泡橡胶、螺旋管等,除了有切向滑动接触的场合外,避免使用指形簧片,有环境密封要求时,使用导电橡胶,其它场合可使用导电布衬垫,需要屏蔽的频率不高时,也可用丝网衬垫,能够确保不会过量压缩时,可使用螺旋管。
17. 使用电磁密封衬垫时要注意什么问题?
答:面板的厚度适当,防止在衬垫的反弹力作用下发生形变,造成更大的缝隙,面板厚度较薄时,紧固螺钉的间隔要较小。设置限位结构,防止过量压缩,选择适当的金属材料,减小电化学腐蚀。
18. 一个屏蔽机箱上,必须要穿过一根金属杆,怎样处理才不会破坏机箱的屏蔽效能?
答:将金属杆的周围通过铍铜簧片与屏蔽基体可靠地搭接起来。
19. 电源线滤波器主要起什么作用,选型时主要考虑哪些参数,使用电源线滤波器时要注意什么问题?
答:电源线滤波器的作用是抑制传导发射电流沿着电源线传播。选型时要考虑插入损耗(共模和差模)、额定电流、电压、有效的频率范围等参数,使用时要注意安装方法,必须射频接地良好,输入输出隔离、防止滤波过的导线部分再次污染。
20. 为什么电源线滤波器的高频滤波特性十分重要?
答:如果高频特性不好,会导致设备的辐射发射超标或对脉冲性干扰敏感。
21. 进行结构电磁兼容设计时,有一个原则是:经过滤波的电源线要尽量远离各种信号电缆,这是为什么?
答:如果电源线与信号电缆靠得很近,信号电缆上的高频信号会耦合到电源线上(特别是已经滤波过的部分),造成电源线上的传导发射超标。
22. 为什么选用电源线滤波器时,不能一味追求体积小巧?
答:滤波器的体积主要由滤波器电路中的电感决定,较小的滤波器内的电感体积必须较小,这样电感量可能较小,会导致滤波器的低频滤波性能较差。另外,滤波器的体积较小,必须要求内部器件相互靠得很近,这样会降低滤波器的高频性能。
23. 什么叫滤波器的插入损耗,用什么方法测量滤波器的插入损耗可以得到最保险的结果?
答:由于滤波器接入电路产生的电流、电压损耗叫做滤波器的插入损耗,干扰滤波器应对干扰频率的信号有尽量大的插入损耗。测量滤波器的插入损耗应采用源和负载阻抗的比值为0.1:100(或反过来)的条件来测,这时可以得到最坏条件下的结果,也就是最保险的结果。
24. 一般而言,交流线滤波器可以用在直流的场合,但是直流线滤波器绝对不能用在交流的场合,这是为什么?
答:直流滤波器中使用的旁路电容是直流电容,用在交流条件下可能会发生过热而损坏,如果直流电容的耐压较低,还会被击穿而损坏。即使不会发生这两种情况,一般直流滤波器中的共模旁路电容的容量较大,用在交流的场合会发生过大的漏电流,违反安全标准的规定。
25. 信号线滤波器主要起什么作用,从安装方式上讲有哪些种类,怎样确定使用什么安装方式的信号滤波器?
答:减小信号线上不必要的高频成分(主要是共模的),从而减小电缆的电磁辐射,或防止电缆作为天线接收空间电磁干扰,并传导进机箱。有线路板上安装和面板上安装两种方式,需要滤波的频率较低时使用线路板上安装的结构,需要滤波的频率较高时,使用面板上安装的结构。
26. 某根信号线上传输的信号最高频率为30MHz,测量表明,这根导线上有120MHz的共模干扰电流,用共模辐射公式预测,只要将这个共模电流抑制30dB,就可以满足电磁兼容标准的要求,需要几阶的低通滤波电路?
答:按照题意,低通滤波器的截止频率为30MHz,而在120MHz的插入损耗要大于30dB。由于N阶滤波器的插入损耗增加速率为每倍频程6N(dB),30MHz至120MHz为两个倍频程,因此,N阶滤波器的截止频率若在30MHz,则在120MHz时插入损耗为程12N(dB)。若要使程12N &30,则可取N=3,即低通滤波器的阶数至少为3。
27. 三端电容器为什么更适合于干扰滤波?
答:电磁干扰的频率往往很高,因此干扰滤波器的高频特性至关重要,三端电容巧妙地利用一个电极上的两根引线电感构成了T型低通滤波器,而消除了传统电容器中引线电感的不良影响,提高了高频滤波特性,因此三端电容器更适合于干扰滤波。
28. 为什么说穿心电容是干扰滤波的理想器件?
答:穿心电容是一种三端电容,但与普通的三端电容相比,由于它直接安装在金属面板上,因此它的接地电感更小,几乎没有引线电感的影响,另外,它的输入输出端被金属板隔离,消除了高频耦合,这两个特点决定了穿心电容具有接近理想电容的滤波效果。
29. 电磁干扰抑制用的磁芯与传统上用做电感的磁芯有什么不同,当将两者用错时,会发生什么现象?
答:传统上用做电感磁芯的材料具有很小的损耗,用这种磁芯作成的电感损耗很小。而电磁干扰抑制用的磁芯损耗很大,用这种磁芯制作的电感具有很大的损耗,其特性更接近电阻。当将两者用错时,均达不到预期的目的。如果将电磁干扰抑制用的磁芯用在普通电感上,电感的Q值很低,会使谐振电路达不到要求,或对需要传输的信号损耗过大。如果将普通制作电感用的磁芯用在电磁干扰抑制的场合,则由于电感与电路中的寄生电容会发生谐振,可能使某个频率上的干扰增强。
30. 若一个旁路滤波电容的容量为470pf,两根引线的长度均为2mm,这个电容在什么频率上滤波效果最好(提示:引线的电感按1nH/mm估算)?
答:当电容发生串联谐振时,其阻抗最小,具有最好的滤波效果。这个电容的谐振频率为
f = 1/[ 2p ( L C ) 1/2 ] = 1/ [ 2 ′ 3.14 ′ ( 4 ′ 10-9 ′ 470 ′ 10-12 ) 1/2 ] = 116MHz
因此,这个电容 在116MHz的频率处滤波效果最好。
31. 用在外拖电缆上的信号线滤波器额定工作电压为什么最好大于200V(尽管一般电缆中传送的信号电压仅几V或十几V)?
答:因为外拖电缆上会受到幅度很高的浪涌、静电放电等瞬间高压干扰的冲击,滤波电容的耐压要能够承受这些高压的冲击。
32. 什么是共模扼流圈,怎样绕制?
答:仅对共模电流有电感作用的扼流圈称为共模扼流圈。共模扼流圈的绕法是使两根导线上的差模电流在磁芯中产生的磁力线方向相反,从而能够相互抵消。当电压较高时,去线和回线要分开绕,以保证足够的绝缘电压。当电压较低时,可以双线并绕。
33. 当设备电磁辐射超标时,我们往往在电缆上套一个铁氧体磁环。如果一台设备的电磁辐射超标,我们在设备的一根电缆上套上一个铁氧体磁环后,发现并没有什么改善,这说明什么问题,应当怎样处理?
答:有两种可能,一种是原来的共模回路阻抗较高,共模扼流圈加入后所增加的阻抗与原来的回路阻抗相比很小,因此扼流圈的作用实际很小。另一种可能性是系统中还有其它辐射源,这根电缆的辐射减小量以分贝表示时其数值很小。如果属于前一种情况,可以在电缆端口上使用旁路电容,减小共模回路阻抗,如果属于第二种原因,则需要检查其它辐射源。
34. 当穿过面板的导线很多时,往往使用滤波连接器或滤波阵列板,在安装滤波连接器或滤波阵列板时要注意什么问题?
答:要在滤波连接器或滤波阵列板与机箱面板之间安装电磁密封衬垫或用导电胶带将缝隙粘起来,防止缝隙处的电磁泄漏。
35. 在进行电磁干扰问题分析时,往往用什么定义来描述地线?
答:将地线定义为信号的回流线。
36. 导致地线干扰问题的根本原因是什么?
答:地线的阻抗是导致地线问题的根本原因,由于地线阻抗的存在,当地线上流过电流时,就会产生电压,形成电位差,而我们在设计电路时,是假设地线上各点电位是相同的,地线电位是整个系统工作的参考电位,实际地线电位与假设条件的不同导致了各种各样的地线问题。
37. 为什么在有些进口样机中看到有些地线通过电容或电感接地?
答:为了使地线系统对于不同频率的信号呈现不同的地线结构。
38. 列出尽可能多的降低地线射频阻抗的方法。
答:尽量使用表面积大的导体,以减小高频电流的电阻;尽量使导体短些,以减小电阻和电感;在导体表面镀银,减小表面电阻;多根导体并联,减小电感。
39. 什么是搭接,举出几种搭接的方法。
答:金属构件之间的低阻抗(射频)连接称为搭接,搭接的方式有焊接、铆接、螺钉连接、电磁密封衬垫连接等。
40. 怎样防止搭接点出现电化学腐蚀现象?
答:选择电化学电位接近的金属,或对接触的局部进行环境密封,隔绝电解液。
41. 电路或线路板电磁兼容性设计时要特别注意关键信号的处理,这里的关键信号指那些信号?
答:从电磁发射的角度考虑,关键信号线指周期性信号,如本振信号、时钟信号、地址低位信号等;从敏感度的角度考虑,关键信号指对外界电磁干扰很敏感的信号,如低电平模拟信号。
42. 为什么数字电路的地线和电源线上经常会有很大的噪声电压?怎样减小这些噪声电压?
答:数字电路工作时会瞬间吸取很大的电流,这些瞬变电流流过电源线和地线时,由于电源线和地线电感的存在,会产生较大的反冲电压,这就是观察到的噪声电压。减小这些噪声电压的方法一是减小电源线和地线的电感,如使用网格地、地线面、电源线面等,另一个方法是在电源线上使用适当的解耦电容(储能电容)。
43. 在实践中,常见到将多股导线绞起来作为高频导体,据说这样可以减小导线的射频阻抗,这是为什么?
答:这样增加了导线的表面积,从而减小了高频电阻。
44. 为什么自动布线软件完成的线路板往往辐射较强?
答:自动布线软件一般不能够保证周期性信号具有较小的回路面积,因此会产生较强的辐射。
45. 减小线路板电磁辐射的主要措施是什么?
答:使容易产生辐射的信号(周期性信号)具有最小的回路面积。如果线路板上有外拖电缆,辐射较强的电路远离输入/输出电路,在输入输出电路的位置设置“干净地”以减小电缆上的共模电压。
46. 怎样从选器件方面减小电磁辐射?
答:选择功耗低、上升/下降沿尽量缓、集成度尽量高的芯片。
47. 在使用多层板布线时,为了避免数字电路地线与模拟电路地线相互干扰,用两层地线面分别做数字地和模拟地,可以吗?为什么?
答:不可以,两层地线之间的寄生电容较大,会发生严重的串扰。
48. 为什么在进行线路板布局时,要使高频电路尽量远离I/O电缆接口?
答:防止高频信号耦合到电缆上,形成共模电压(电流),产生较强的共模辐射。
49. 在数字电路的线路板上安装电源解耦电容时要注意什么问题?
答:解耦电容与芯片电源引脚和地线引脚形成的回路面积要尽量小。
50. 两个屏蔽机箱之间的互联电缆是辐射的主要原因,为了减小电缆的辐射,往往使用屏蔽电缆。屏蔽电缆要有效地抑制其电磁辐射必须满足什么条件?
答:电缆的屏蔽层与屏蔽机箱之间360°搭接,使其满足哑铃模型的要求。
51. 铁氧体磁环是抑制电缆共模辐射的有效器件,在使用时要注意什么问题?
答:首先要选择抑制电磁干扰用的铁氧体材料,其次,磁环的内径要尽量小,紧紧包住电缆,铁氧体磁环的外径和长度尽量大(在满足空间要求的条件下)。将电缆在磁环上绕多匝,可以提高低频的效果,但高频的效果会变差。铁氧体磁环的安装位置要靠近电缆的两端。
52. 使用双绞线提高对磁场的抗扰度时,要注意什么问题?
答:双绞线两端所连接的电路不能同时接地,为信号回流提供第二条路径,最好是平衡电路。
53. 如果电感性负载的通断是由机械开关控制的,那么当开关闭合或断开时,会在开关触点上产生电弧放电和电磁干扰。这种干扰是开关闭合时严重,还是断开时严重?
答:断开时严重。
54. 瞬态干扰抑制器件为什么不能代替滤波器,防止电路工作异常?
答:瞬态干扰抑制器件只是将幅度很高的脉冲电压顶部削去,残留的仍是一个脉冲干扰电压,只是幅度低些,其中包含了大量的高频成分,会对电路造成影响,因此不能代替滤波器防止电路工作异常。
55. 安装瞬态抑制器件时,要注意什么问题?
答:保证流过瞬态抑制器件的电流路径具有最小的阻抗,因此这个路径上的导线要尽量短,旁路电容的安装原则同样适合于瞬态抑制器件的安装。
56. 描述静电放电对电路造成影响的机理。
答:双绞静电放电对电路造成的影响有两个机理,一个是静电放电电流直接流进电路,对电路的工作,乃至损坏电路硬件;另一个是静电放电路径附近产生很强的电磁场,对电路造成影响。
57. 为什么当机箱不是连续导电时,在做静电放电试验时往往会出问题?
答:当机箱上有导电不连续点时,会迫使电流寻找另外的泄放路径,这条路径也可能是电路本身,从而使静电放电电流流进电路,产生不良影响;另外,当静电放电电流流过导电不连续点时,会在这个局部产生较强的电磁辐射,对电路的正常工作产生影响。
58. 为什么一个设备如果抗射频干扰能力强,则一般抗静电放电能力也强?
答:因为静电放电产生的也是一种高频电磁场
怎么成为一个优秀的软件工程师--致亚嵌就业班的报名者和新学员
如何成为一个优秀的程序员--致亚嵌就业班的报名者和新学员
我们的老师每天都要应对报名者和学员提出的很多同样的问题,以下是这类问题的典型:嵌入式行业(或者IT业)有没有前途?我听说编程编到三十五岁就没人要了一定要转行找出路是吗?做驱动开发和做应用开发哪个更有前途?我一开始看什么书都看不懂,怎么才能理出一个学习顺序?诸如此类。这使我迫切地感觉到,应该总结这样一份非具体技术问题的FAQ了。本文仅代表我个人观点,有问题欢迎mailto: songjinshan AT akaedu DOT org。在看这份FAQ之前,你必须先读完ESR的<如何成为一名黑客>(本文末尾附有中译版),该文所讲过的道理我不再重复。该文用很大的篇幅讲什么是黑客文化,虽然态度和信仰的确是成功的最关键因素,但是你肯定会想,做不做黑客跟我没关系,我只是想学个一技之长,找个好工作而已,对吧?那么肯定更希望获得一些具体的可操作的指导。1、各种软件技术之间是怎样的关系?我把软件技术分为三个层次:问题域:计算机图形学、音视频编码、信息安全、模式识别、信息检索、自然语言分析、人工智能、科学计算等系统集成:C++和Java等面向对象语言、Python等解释型语言、LISP等函数式编程语言、GUI、中间件、编译器与解释器、虚拟机、数据库、网络服务、并行计算、集群、Peer2Peer、系统管理等系统功能:硬件描述语言、计算机体系结构与编程模型、指令集与汇编语言、C语言、内核、文件系统、设备驱动、网络协议、POSIX等计算机最终是做什么用的呢?最终是通过问题域的各种技术为用户解决问题的,这些技术都包含很高深的算法,然而它们必须在一个平台上运行,它们需要利用平台提供的各种基础设施,比如计算能力、I/O能力和网络互联能力。系统功能和系统集成层就是用来实现这个平台的。系统功能层实现计算、I/O和网络的基本功能,系统集成层对这些基本功能做一些抽象和包装,提供更方便灵活的接口。2、为什么要学习嵌入式技术?在亚嵌的学习期间,你将详细了解系统功能层的各部分是如何工作的,也会在面向对象编程、GUI、数据库、网络服务等系统集成层的技术方向进行探索。嵌入式系统可说是麻雀虽小五脏俱全,虽然没有PC和服务器那么复杂,但计算机系统的各种组成一样也不缺。因此,以嵌入式系统作为切入点开始学习软件技术是非常好的选择,避开不必要的复杂性,把握计算机系统最根本的概念和技术要点。打下扎实的基础之后,你的职业发展则完全不必局限于嵌入式领域,即使你日后做PC或服务器开发,在亚嵌所学的知识和技能同样使你终生受益。正如疱丁解牛,心中有全牛,就能游刃有余。另一方面,你一定见到各大网站都有大量的宣传,说现在嵌入式行业前景空前的好,嵌入式人才紧缺,有几百万职位空缺等等。这些说法也是对的,但我们需要更深入地理解这说明了什么问题。刚才我们说,嵌入式系统也是一个完整的计算机系统,和PC或服务器没有本质的区别,事实上,嵌入式、PC和服务器的界限已经越来越模糊了。以前的嵌入式就是单片机,只能做简单的运算处理,现在的ARM处理器性能比从前的奔腾还强,打游戏、看电影都没问题,谁能说它不是PC呢?另外有些专用的嵌入式系统已经在充当服务器的功能了,而集群技术更是可以使许多廉价的处理器合在一起发挥大型服务器的作用。由于嵌入式越来越多地应用到电器、汽车和各种设施上,无处不在,并且与 PC、服务器呈融合的趋势,所以嵌入式行业前景空前的好。那么,为什么说嵌入式人才紧缺呢?其实,学嵌入式系统就是学计算机系统,本质上并没有什么特殊的只有嵌入式系统才有的技术。说嵌入式人才紧缺,是因为真正懂计算机的人才紧缺。现在很多学校的所谓“软件学院”培养的软件人才都是一叶障目不见泰山的:只懂J2EE和.NET,没学过C和汇编;只会调库函数sort(),而对各种排序算法一无所知;设计模式、软件工程讲得头头是道,却不知道好的软件还是要靠牛人靠智商来做的。培养人像蒸包子一样一屉一屉地出,靠软件工程搭一条生产线然后让熟练工人站在生产线上拧螺丝,幻想着这样就能生产出好的软件,那是把软件工程和程序员的作用本末倒置了。现在嵌入式开发对程序员的素质要求更高了,以上这类“软件人才”不能胜任了,因此说嵌入式人才紧缺。亚嵌的就业班虽然只有几个月,但培养目标是有完整的计算机系统概念的软件人才,而不是只会拧螺丝的软件工人,这正得益于我们始终坚持做嵌入式培训而不是 Java或.NET培训。3、有人说软件技术变化太快,现在学的东西过两年就要完全淘汰,是吗?你知道这话是什么人说的吗?必然是已经被淘汰的人说的。比如Delphi、BCB、PB这些开发工具和语言,都曾经很是风光了一阵,但现在已经完全被Java和.NET取代了。那么Java和.NET会不会被取代呢,也许在相当长的时间内还不会,但是我看好Python。这些被淘汰的程序员有一些共同的特点:只会用鼠标拖拽控件离开IDE就不知道如何工作,学点儿花拳绣腿的功夫就想吃一辈子,对学习新技术不感兴趣,做一天和尚撞一天钟。现在请回头看看FAQ1,在整个软件技术领域,这些变化快的技术其实只占了很小的一块,却成了这些人的全部看家本领,这样的人能不被淘汰吗?与这些流行的开发工具和语言相反,很多技术和思想是很少变化的。比如,POSIX和SUS标准规定了一套系统函数接口和基本命令的语义,只有实现了这些才可以称作UNIX,因此今天的Linux、Solaris跟20多年前的UNIX在系统功能层上是基本一致的。而指导计算机科学发展的数学理论,甚至是老祖宗们在计算机还没诞生的年代就替我们想好的:布尔代数发表于19世纪,直到一个世纪后发明了计算机和数字电路才有了用武之地;数论在17世纪就出现了,一直都被数学家们当成一套好玩的理论,但只是好玩而已,直到计算机密码学诞生后才发现它的实际用处。各种流行的开发工具和高级语言虽然变化很快,但是底层的编程语言却非常稳定,各种操作系统的内核都是用C语言写的,以前是这样,以后也不会改变。另一方面,各种编程语言的设计思想也是非常稳定的。其实世界上只有两种编程语言,一种是C,一种是LISP,前者是imperative的,是对计算机模型的抽象,后者是functional的,是对数学函数模型的抽象。面向对象是一种重要的软件工程思想,却算不上一种新的语言模型,应该归在C的一类。属于同一类的各种语言其实都大同小异,一个精通 C++的人学习Java需要多长时间?熟悉语法一个星期,熟悉类库三个星期,一个月足矣,以往的经验都可以套到新的编程语言上。然而要想习得深厚的算法功底、逻辑思维和抽象思维修养,能够真正说清楚“系统”是什么,如何分析和设计“系统”,需要多长时间?恐怕要数十年。4、C和Java哪种语言更好?计算机科学与编程语言无关,甚至与计算机本身也没太大关系,它研究的对象并不是计算机,而是人分析问题解决问题的方法论。程序写出来最主要不是为了给计算机执行的,而是为了给人看的,使用编程语言和使用自然语言一样是为了表达和交流,只不过程序还可以顺便给计算机执行而已。以上这些话并不是我说的,而是一位著名的计算机科学家说的。所以,在编程语言的层面上争论是没有意义的。很多初学者错误地认为掌握了编程语言就等于学会了计算机,一种编程语言都还没有掌握好,更没有上升到方法论的层面,只有这种无知的人才会去争论哪种语言好的问题。掌握编程语言远远不等于学会了计算机,而只是最开始的一步,最简单的一步,到了工作中,用到什么语言就去学什么语言,什么语言过时了就丢掉,编程语言不需要积累因为它太简单了,真正需要积累的是方法论。很多人喜欢参与到这类争论之中,毫无例外,每个人都在为自己熟练掌握的编程语言辩护,就是“我会的语言最好,我不会的语言都不好”,其实这些人真正想说的是 “我会的语言最好是千秋万代,我就不必学新的语言,不必适应新的变化了”,概括起来说就是一个字,懒。真正的高手都是会很多编程语言的,国外有些做技术咨询的,每年都要学好几门新的编程语言,这样才能应对市场的变化。不断丢掉旧的编程语言学习新的,看起来好像完全是白费力气,没有积累,其实,每种编程语言的设计都有独到之处,体现了每种语言的精髓,在融汇百家之后积累下来的正是方法论。争论哪种语言能做的事情更多、功能更强是没有意义的。从理论上说,任何一种符合图灵机模型的编程语言,加上适当的I/O扩展都可以做任何事情,用shell脚本也可以写出很像样的游戏来。只不过各种语言的设计目标不同,表达能力不同,做不同的事情所需的代码量不同而已。另外一种错误认识是:哪种语言的市场最大,开发人员最多,哪种语言就最好。单从这种意义上说,Java的确比C更好,所以往届有学员问我们为什么只教C语言。请你注意,操作系统内核是用C写的,各种底层的应用程序包括Java虚拟机也是用C写的。如果你想学Java,在亚嵌的学习完成后你将有能力分析 Java虚拟机的实现,站在计算机系统的高度来学Java才会使你成为真正的Java高手。如果你只想速成,想早点学成一门技术去做拧螺丝的工作,那么亚嵌不适合你。在FAQ3里说过,世界上有C和LISP两种编程语言,你现在学了C,以后学了C++、Java、.NET等等,也仍然只认识了半个世界。LISP和Haskell构成了另外半个世界,现在很常见的Python和JavaScript等解释型语言也借用了functional programming的思想。如果你只管闷着头写代码,而不去广泛涉猎,那么你将错过很多精彩。5、我听说编程编到三十五岁就没人要了一定要转行找出路是吗?这个观点虽然很流行,但根本不值一驳。现在三十五岁转行的那些人,都具有前面所说的那些特征,对学习新技术不感兴趣,对探索计算机的本质不感兴趣,得过且过,下了班就是打游戏、看电视,总之就是懒。如果是开出租、摆摊,勤快人懒人都有饭吃,而IT这一行对懒人是非常无情的,懒人就不该入IT这一行,不从自身找原因,却到处散布这种言论,怪社会不好,打击新人的信心,着实可恨。另外一种情况,编程编到三十五岁,进入公司的管理层,或者自己创业,这都是很勤快的人,如果他们把这种勤快用在技术上肯定也可以做得更好,所以也无法证明编程编到三十五岁会因为没有出路而转行。编程不是个体力活,需要高强度的思考和智力投入,分析能力、思考能力都需要时间积累起来,所以并不是越年轻干得越好。相反,我认为三十岁以前写的代码都是垃圾,三十岁以后才能写出像样的程序来。如果希望一辈子走技术的道路而不会被迫转行,就要不断地把自己的工作性质从“体力活”变成“脑力活”。什么叫“不断地”变呢?这里的“体力活”并不是指种地、盖房子这种劳动,而是指简单重复地编写代码,这时你会感觉,派给你的工作都能凭以往的经验轻松应付了,但是千万不要满足于现状,就像温水煮青蛙一样,这是危险的处境!要摆脱这种处境就需要学习、思考、提高,让公司派给你更有挑战性的工作,在工作中应用新学到的知识和技术就是“脑力活”了,但是用得久了又会变成简单重复的“体力活”,这时就需要再学习、再提高,所以叫做“不断地”把自己的工作性质从“体力活”变成“ 脑力活”。如果有一天你发现,自己长期陷于简单重复的劳动之中,并且业余时间非常少,无法学习提高,这说明公司不会用人,你就该考虑跳糟了。从另外一个角度来说,如果希望一辈子走技术的道路,就要有自己的核心竞争力,这个核心竞争力决不是凭以往的经验能够做某些工作的能力,而是学习能力、思考能力和解决有挑战性的新问题的潜力。在IT这一行,凭借以往的经验干重复的活是干不长久的,原因很简单,一个问题不会被解决两次,当你发现你的经验能够解决一类问题时,别人早把解决这一类问题的套路编写成framework,新上手的人即使不具备你的这些经验也可以调用framework中的类和函数来解决问题,然后在这个framework的基础上积累新的经验解决新的问题。正因为如此,全世界开发人员的经验才会积累起来,促使软件技术发展得如此迅速。这并不是说经验完全没有用,最关键的,学习和思考也是建立在以往经验的基础之上的。另一方面,现有的framework并不一定是某方面开发经验的完美整合,也需要不断发展,用新的办法重新解决老问题,以Web开发为例,从早期的ASP、PHP到后来的.NET、J2EE,到现在的Ruby on Rails、Django等等,这些framework解决的是同一问题,就是如何快速有效地开发Web应用,这方面的经验被不断重新整合,推陈出新。总结一下,什么才是核心竞争力呢?应该是在经验的基础上学习新技术、解决新问题的能力。6、做驱动开发还是做应用开发更有前途?意思就是说,“你告诉我哪个更有前途,我就好好学哪个,另外一个就不用学了”。问这种问题的学员往往会同时问另外一些问题:我以后就想做驱动开发,你教我这些应用开发的技术有什么用?C++用得多吗?学了有什么用?我以后不想做GUI,你教我Qt有什么用?学习最忌讳的就是“有用的就学,没有用的就不学”这种功利的态度。两个问题:第一,在你还没学进去、还不了解这种技术时,要如何判断这种技术学了有没有用?只能是根据道听途说,看各种论坛上都怎么说的,岂不知论坛上参与这种讨论的100%都是菜鸟,有的水平还不如你。第二,就算你学的技术没有用上,有什么损失吗?从亚嵌毕业的学员从事各种各样的开发工作,有做驱动的,有做系统编程的,有做GUI的,有做Web开发的,只要确定了做一类工作,就不可能把在亚嵌四个月学的知识都用上,但至少也用得上3/4的知识,假设剩下的1/4你一辈子也没机会用上了,那也就损失你一个月的学习时间而已,相比于你的收获,这算是很大的损失吗?请注意,上面的假设是不成立的,没用上的那1/4也只是暂时没用上而已,程序员要换工作或者换项目是很常见的,任何人都不可能只涉及一类开发工作,只要有扎实的基础、完备的知识体系,任何工作都能轻松上手。扎实的基础,完备的知识体系,我们在安排就业班课程体系的时候,正是以这两点为依据的。有的课程内容很少有学员在以后工作中会用到,但是缺了这一环就不成为一个完备的知识体系,例如MMU和Cache,那这种课该不该上呢?毫无疑问该上。有的课程培养一种基本的编程思想,例如通过C++来讲面向对象编程,通过Qt来讲面向对象、事件驱动和状态机编程,这些编程思想是程序员必备的基本素质,而C++和Qt可能有些学员以后工作用不到,那这种课该不该上呢?毫无疑问该上。至于还有些人争论说C++不如Java用得多,Qt不如GTK用得多,请翻回去看FAQ4,这种争论是无意义的,有工夫争论谁优谁劣,不如把两种都学了,会更有收获。回到做驱动开发还是做应用开发更有前途的问题。我只能说,做好了都有前途,做不好都没有前途,只会做一样而完全不懂另一样是最没前途的。不要以为内核开发者就不写应用程序,Linus写了一个源代码管理系统git来维护内核,因为觉得现有的源代码管理系统都不好用。牛人都是这样,需要什么就写什么,才不管是kernel space还是user space。同样,做应用开发如果不懂内核,也没有办法很好地利用内核提供的服务写出性能最优的程序。做内核难,因为调试难,要跟踪大量的并发线程,因为入门难,要写一个hello world都需要学很多知识。做应用也难,回头去看FAQ1,计算机科学从理论到实践大部分都在上面两层做文章。所以不存在哪个更难哪个更有前途的问题,任何关于哪个更难的讨论都是too naive的。7、我一开始看什么书都看不懂,怎么才能理出一个学习顺序?以前有个学员在学C语言时说,“C语言很多地方都很奇怪,都得用内核的知识去解释,可是你又不先教我内核,我没法学C语言。我只好自己看操作系统的书,看内核代码,可是看不懂。”当然看不懂了,内核代码都是用C写的,如果不学内核就没法学C语言,那不学C语言又怎么可能看懂内核?看来这是一个鸡生蛋还是蛋生鸡的问题。懒真的是人的本性,就连学习的过程都希望是一条路顺利地走下去,不用动脑就能学会的:身后走过的路都是“已知”,每走一步就把眼前新的“未知”变成“已知”,如此一路走来,把所有的“未知”都变成“已知”就算学成了。可惜,知识不是一条路,而是一个圈,你从任何一个地方跳进这个圈开始走,身后都是“未知”,眼前也都是“未知”。有的人就是不能容忍自己的身后是“未知”:看一本书,一个新的概念A是用我不了解的概念B、C来解释的,我连B、C都不懂怎么学A?没法学了!不是人家书写得不好,而是没有任何办法能把一个圈扯成一条直线的。学习的过程本质上就是一个循环往复的过程,唯一的办法就是“存疑”:在本子上记着,有B、C这样两个概念是我暂时不理解的,然后就不再去想这回事,而是相信自己已经理解了B、C,基于自己的理解和假设去学习A,由A再去理解X、Y,这样学下去,走完一圈之后再回来,自然就明白当初对B、C的假设正确不正确了,理解了这两个概念,就从本子上划掉,这时需要再走一圈,把原来的一些错误认识纠正过来。所以,任何书都要至少看两遍,第二遍看的时候你会对很多概念有新的认识,因为你看过这个概念后面的章节,在此基础上产生了新的认识。古人早就明白这个道理,所以提出了“温故而知新”。亚嵌的课程体系经过多年教学实践的锤炼,已经很好地理顺了知识之间的关系,使你从最佳的位置跳进这个圈开始学习,所谓“最佳位置”是指,在你初学的时候需要容忍的“未知”尽可能少,需要做的假设尽可能少,但要想消除所有的“未知”是不可能的,例如没有学内核就要学C语言。根据你以往的经验和一些运气因素,你对内核的一些假设可能正确也可能错误,但这并不影响你学C语言,对内核的一些错误假设可能会导致在学C语言的过程中有些误解,但没关系,只要跟着我们的课程体系一步一步走下来,这些误解和错误的假设最终都会纠正过来。8、有哪些好书可以推荐一下吗?能问出这个问题的都是聪明的学员。看书学习是入门过程中非常重要的一环,如果用一本烂书入门,浪费时间还是小事,如果被误导了就麻烦了,如果形成的错误认识不能及时纠正,变得根深蒂固了就更麻烦了。所以,看书一定要有“品牌意识”,在决定看书学习一门技术时先问问这一领域最权威的书是哪本,这里列举一些Bible级别的书:The C Programming Language, 2nd EditionC++ Primer, 4th EditionStructure and Interpretation of Computer Programs, 2nd EditionIntroduction to Algorithms, 2nd EditionCompilers: Principles, Techniques, and Tools, 2nd EditionAdvanced Programming in the UNIX Environment, 2nd EditionTCP/IP Illustrated, Volume 1: The ProtocolsUNIX Network Programming Volume 1, 3rd Edition: The Sockets Networking APIUnderstanding the Linux Kernel, 3rd EditionLinux Device Drivers, 3rd Edition在学习过程中,眼界一定要开阔,不要学到一点东西就沾沾自喜,坐井观天,以为这就是技术的全部。要多和别人交流,多了解别人在看什么书、别人对技术的认识是怎样的。书是看不完的,活到老学到老,对于程序员来说尤其如此。9、如何处理打游戏和学习的关系?ESR 的文章中也说过,黑客们都有一些特别的业余爱好,并且往往是非理性思维的爱好,大概是需要换换脑子吧。典型的例子是因滑翔机事故去世的Stevens,他写了FAQ8所推荐的Bible当中的三本。爱打游戏的优秀程序员肯定大有人在,有一些还成了优秀的游戏开发人员。但是我认为,要想成为优秀的程序员,必须有两点基本素质,一是对编程非常感兴趣,二是对所有别的事情都不感兴趣,或者都不如对编程感兴趣。有人说,人的一天有24小时,8小时休息,8小时上班,另外的8小时在干什么就决定了你以后有多大发展。一有时间就看书学习,这就是一个程序员应该做的。今天打游戏,明天看电影,后天炒股,那么你就等着三十五岁下岗。如果你不能够认同编程和思考是比其它事情更有吸引力的,那么你不必学编程,集中精力去做最喜欢的事情或许会有更大的成就。======附:如何成为一名黑客作者:Eric Raymond翻译 waterbird [AKA]校对 kingsunsoong--什么是黑客?Jargon File中对“黑客”一词给出了很多定义,大部分定义都涉及高超的编程技术,强烈的解决问题和克服限制的欲望。如果你想知道如何成为一名黑客,那么好,只有两方面是重要的:态度和技术。长久以来,存在一个专家级程序员和网络高手的共享文化社群,其历史可以追溯到几十年前第一台分时共享的小型机和最早的ARPAnet实验时期。这个文化的参与者们创造了“黑客”这个词。黑客们建起了Internet。黑客们使Unix操作系统成为今天这个样子。黑客们搭起了Usenet。黑客们让WWW正常运转。如果你是这个文化的一部分,如果你已经为它做了些贡献,而且圈内的其他人也知道你是谁并称你为一个黑客,那么你就是一名黑客。黑客精神并不仅仅局限于软件黑客文化圈中。有些人同样以黑客态度对待其它事情如电子和音乐--事实上,你可以在任何较高级别的科学和艺术中发现它。软件黑客们识别出其他领域的同类并把他们也称作黑客--有人宣称黑客实际上是独立于他们的工作领域的。但在本文中,我们将注意力集中在软件黑客的技术和态度,以及发明了“黑客”一词的那个共享文化传统之上。另外还有一群人,他们大声嚷嚷着自己是黑客,实际上他们却不是。他们是一些蓄意破坏计算机和电话系统的人(多数是青春期的少年)。真正的黑客把这些人叫做 “骇客”(cracker),并不屑与之为伍。多数真正的黑客认为骇客们是些不负责任的懒家伙,还没什么大本事。专门以破坏别人安全为目的的行为并不能使你成为一名黑客,正如拿根铁丝能打开汽车并不能使你成为一个汽车工程师。不幸的是,很多记者和作家往往错把“骇客”当成黑客;这种做法激怒了真正的黑客。根本的区别是:黑客们建设,而骇客们破坏。如果你想成为一名黑客,继续读下去。如果你想做一个骇客,去读 alt.2600 新闻组,并在发现你并不像自己想象的那么聪明的时候去坐5到10次监狱。关于骇客,我只想说这么多。--黑客的态度黑客们解决问题,建设事物,信仰自由和双向的帮助,人人为我, 我为人人。要想被认为是一名黑客,你的行为必须显示出你已经具备了这种态度。要想做得好像你具备这种态度,你就不得不真的具备这种态度。但是如果你想靠培养黑客态度在黑客文化中得到承认,那就大错特错了。因为成为具备这些特质的这种人对你自己非常重要,有助于你学习,并给你提供源源不断的活力。同所有创造性的艺术一样,成为大师的最有效方法就是模仿大师的精神--不仅从理智上,更要从情感上进行模仿。So,如果你想做一名黑客,请重复以下事情直到你相信它们:1. 这世界充满待解决的迷人问题做一名黑客有很多乐趣,但却是些要费很多气力方能得到的乐趣。这些努力需要动力。成功的运动员从健壮体魄、挑战自我极限中汲取动力。同样,做黑客,你必须要有从解决问题、磨练技术、锻炼智力中得到基本的热情。如果你还不是这类人又想做黑客,你就要设法成为这样的人。否则你会发现,你的黑客热情会被其他诱惑无情地吞噬掉--如金钱、性和社会上的虚名。(同样你必须对你自己的学习能力建立信心--相信尽管你对某问题所知不多,但如果你一点一点地学习、试探,你最终会掌握并解决它。)2. 一个问题不应该被解决两次聪明的头脑是宝贵的、有限的资源。当这个世界还充满其他有待解决的有趣问题之时,它们不应该被浪费在重新发明轮子这些事情上。作为一名黑客,你必须相信其他黑客的思考时间是宝贵的--因此共享信息、解决问题并发布结果给其他黑客几乎是一种道义,这样其他人就可以去解决新问题而不是重复地对付旧问题。(你不必认为你一定要把你的发明创造公布出去,但这样做的黑客是赢得大家尊敬最多的人。卖些钱来给自己养家糊口,买房买车买计算机甚至发大财和黑客价值也是相容的,只要你别忘记你还是个黑客。)3. 无聊和乏味的工作是罪恶黑客们应该从来不会被愚蠢的重复性劳动所困扰,因为当这种事情发生时就意味着他们没有在做只有他们才能做的事情--解决新问题。这样的浪费伤害每一个人。因此,无聊和乏味的工作不仅仅是令人不舒服而已,它们是极大的犯罪。要想做得像个黑客,你必须完全相信这点并尽可能多地将乏味的工作自动化,不仅为你自己,也为了其他人(尤其是其他黑客们)。(对此有一个明显的例外。黑客们有时也做一些重复性的枯燥工作以进行“脑力休息”,或是为练熟某个技巧,或是获得一些除此无法获得的经验。但这是他自己的选择--有脑子的人不应该被迫做无聊的活儿。)4. 自由就是好黑客们是天生的反权威主义者。任何能向你发命令的人会迫使你停止解决令你着迷的问题,同时,按照权威的一般思路,他通常会给出一些极其愚昧的理由。因此,不论何时何地,任何权威,只要他压迫你或其他黑客,就要和他斗到底。(这并非说任何权力都不必要。儿童需要监护,罪犯也要被看管起来。如果服从命令得到某种东西比起用其他方式得到它更节约时间,黑客会同意接受某种形式的权威。但这是一个有限的、特意的交易;权力想要的那种个人服从不是你的给予,而是无条件的服从。)权力喜爱审查和保密。他们不信任自愿的合作和信息共享--他们只喜欢由他们控制的合作。因此,要想做得像个黑客,你得对审查、保密以及使用武力或欺骗去压迫人们的做法有一种本能的反感和敌意。5. 态度不能替代能力要做一名黑客,你必须培养起这些态度。但只具备这些态度并不能使你成为一名黑客,就像这并不能使你成为一个运动健将和摇滚明星一样。成为一名黑客需要花费智力、实践、奉献和辛苦。因此,你必须学会不相信态度,并尊重各种各样的能力。黑客们不会为那些故意装模做样的人浪费时间,但他们却非常尊重能力--尤其是做黑客的能力,不过任何能力总归是好的。具备很少人才能掌握的技术方面的能力尤其为好,而具备那些涉及脑力、技巧和聚精会神的能力为最好。如果你尊敬能力,你会享受提高自己能力的乐趣--辛苦的工作和奉献会变成一种高度娱乐而非贱役。要想成为一名黑客,这一点非常重要。--基本黑客技术黑客态度是重要的,但技术更加重要。态度无法替代技术,在你被别的黑客称为黑客之前,有一套基本的技术你必须掌握,这套基本技术随着新技术的出现和老技术的过时也随时间在缓慢改变。例如,过去这套技术包括使用机器码编程,而直到最近才包括了HTML语言。但现在明显包括以下技术:1. 学习如何编程这当然是最基本的黑客技术。如果你还不会任何计算机语言,我建议你从Python开始。它设计清晰、文档齐全,对初学者很合适。尽管是一门很好的入门语言,它却不仅仅是个玩具。它非常强大、灵活,也适合做大型项目。但是记住,如果你只会一门语言,你将不会达到黑客所要求的技术水平,甚至也不能达到一个普通程序员的水平--你需要学会如何以一个通用的方法思考编程问题,独立于任何语言。要做一名真正的黑客,你需要学会如何在几天内通过一些手册,结合你现在所知,迅速掌握一门新语言。这意味着你应该学会几种不同的语言。如果要做一些重要的编程,你将不得不学习C语言--Unix的核心语言。其他对黑客而言比较重要的语言包括Perl和LISP。Perl很实用,值得一学;它被广泛用于活动网页和系统管理,因此即便你从不用Perl写程序,至少也应该能读懂它。LISP 值得学习是因为当你最终掌握了它你会得到丰富的经验;这些经验使你在以后的日子里成为一个更好的程序员,即使你实际上可能很少使用LISP本身。当然,实际上你最好四种都会(Python,C,Perl,and LISP)。除了是最重要的四种基本语言,它们还代表了四种非常不同的编程方法,每种都会让你受益非浅。这里我无法完整地教会你如何编程--这是个复杂的活儿。但我可以告诉你,书本和课程也不能做到。几乎所有最好的黑客都是自学成才的。真正能起作用的就是去亲自读代码和写代码。学习如何编程就象学习用自然语言写作一样。最好的做法是读一些大师的名著,试着自己写点东西,再读些,再写点,又读些,又写点儿……如此往复,直到你能够运用自己在范文中看到的那种简洁和力量。过去找到好的代码去读是困难的,因为很少有大型程序的源代码能让新手练手。这种状况已经得到了很大的改善;现在有很多可用的开放源码软件、编程工具和操作系统(全都由黑客写成)。这使我们自然地来到第二个话题……2. 得到一个开放源码的Unix并学会使用、运行它我假设你已经拥有了一台个人计算机或者能够使用一台( 今天的孩子们真幸福 :-) )。新手们最基本的一步就是得到一份Linux或BSD Unix,安装在个人计算机上,并运行它。当然,这世界上除了Unix还有其他操作系统。但它们都是以二进制形式发布的--你无法读到它的源码,更不可能修改它。尝试在DOS或Windows的机器上学习黑客技术,就象是在腿上绑了铁块去学跳舞。除此之外,Unix还是Internet的操作系统。你可以不知道Unix而学会用Internet,但不懂它你就无法成为一名Internet黑客。因为这个原因,今天的黑客文化在很大程度上是以Unix为中心的。(这一点并不总是真的,一些很早的黑客对此很不高兴,但Unix和Internet之间的共生关系已是如此之强,甚至连微软也无可奈何。)So,装一个Unix--我个人喜欢Linux,不过也有其他选择(你也可以在同一台机器上同时运行DOS、Windows和Linux)。学会它。运行它。用它跟Internet对话。读它的代码。试着去修改它。你会得到比微软操作系统上好得多的编程工具(包括C,Lisp,Python,and Perl),你会得到乐趣,并将学到比你想象的更多知识。关于学习Unix的更多信息,请看 The Loginataka要得到Linux,请看: 哪里能得到 Linux3. 学会如何使用WWW和写HTML大多黑客文化建造的东西都在你看不见的地方发挥着作用,帮助工厂、办公室和大学正常运转,表面上很难看到它对他人的生活的影响。Web是一个大大的例外。即便政客也同意,这个巨大而耀眼的黑客玩具正在改变整个世界。单是这个原因(还有许多其它的),你就需要学习如何掌握Web。这并不仅仅意味着如何使用浏览器(谁都会),而是要学会如何写HTML--Web的标记语言。如果你不会编程,写HTML会教你一些有助于学习的思考习惯。因此,先建起自己的主页。但仅仅建一个主页也不能使你成为一名黑客。Web里充满了各种网页。多数是无意义的零信息量垃圾。要想有价值,你的网页必须有内容--必须有趣或对其它黑客有用。这样,我们来到下一个话题……--黑客文化中的地位象大部分不涉及金钱的文化一样,黑客王国的运转靠声誉维护。你设法解决有趣的问题,但它们到底多有趣,你的解法有多好,是要有那些和你具有同样技术水平的人或比你更牛的人去评判的。相应地,当你在玩黑客游戏时,你知道,你的分数要靠其他黑客对你的技术的评估给出。(这就是为什么只有在其他黑客称你为黑客时,你才算得上是一名黑客)这个事实常会被黑客是一项孤独的工作这一印象所减弱;它也会被另一个黑客文化的禁忌所减弱(此禁忌的效力正在减弱但仍很强大):拒绝承认自我或外部评估是一个人的动力。特别地,黑客王国被人类学家们称为一种精英文化。在这里你不是凭借你对别人的统治来建立地位和名望,也不是靠美貌,或拥有其他人想要的东西,而是靠你的奉献。尤其是奉献你的时间、你的才智和你的技术成果。要获得其他黑客的尊敬,你可以做以下五种事情:1. 写开放源码的软件第一个(也是最基本和传统的)是写些被其他黑客认为有趣或有用的程序,并把程序的源代码公布给大家共享。(过去我们称之为“自由软件-free software”,但这却使很多不知free的精确含义的人感到不解。现在我们很多人使用“开放源码-open source”这个词。)黑客王国里最受尊敬的大牛们是那些写了大型的、具有广泛用途的软件,并把它们公布出去,使每个人都在使用他的软件的人。2. 帮助测试并修改开放源码的软件黑客们也尊敬也那些使用、测试开放源码软件的人。在这个并非完美的世界上,我们不可避免地要花大量软件开发的时间在测试和抓臭虫阶段。这就是为什么任何开放源码的作者稍加思考后都会告诉你好的beta测试员象红宝石一样珍贵(他知道如何清楚描述出错症状,很好地定位错误,能忍受快速发布的软件中的bug,愿意使用一些简单的诊断工具),甚至他们中的一个能判断出哪个测试阶段是漫长的、令人精疲力尽的噩梦,哪个只是一个有益健康的玩意儿。如果你是个新手,试着找一个感兴趣的正在开发的程序,做一个好的beta测试员。从帮着测试,到帮着抓臭虫,到最后帮着改程序,你会不断进步。以后你写程序时,会有别人来帮你,你就得到了你当初善举的回报。3. 公布有用的信息另一件好事是收集整理网页上有用有趣的信息或文档如FAQ。许多主要FAQ的维护者和其他开放源码的作者一样受到大家的尊敬。4. 帮助维护基础设施的运转黑客文化是靠自愿者运转的。要使Internet能正常工作,就要有大量枯燥的工作不得不去完成--管理邮件列表和新闻组、维护大量文档、开发RFC和其它技术标准等等。做这类事情的人会得到很多人的尊敬,因为每个人都知道这些事情是耗时耗力的苦役,不象编码那样好玩。做这些事情需要毅力。5. 为黑客文化本身服务最后,你可以为这个文化本身服务(例如象我这样,写一个“如何成为黑客”的初级教程 :-) )(hehe,象我这样把它翻成中文 :-) ) 这并非一定要在你已经在这里呆了很久、精通所有以上四点、获得一定声誉后才能去做。黑客文化没有领袖。精确地说,它确实有些文化英雄和部落长者和历史学家和发言人。若你在这圈内呆的够长,你或许成为其中之一。记住:黑客们不相信他们的部落长者的自夸的炫耀,因此很明显地去追求这种名誉是危险的。你必须具备基本的谦虚和优雅。--黑客和怪人(Nerd)的联系同流行的传说相反,做一名黑客并不一定要你是个怪人。然而,很多黑客都是怪人。做一个出世者有助于你集中精力进行更重要的事情,如思考和编程。因此,很多黑客都愿意接受“怪人”这个标签,更有甚者愿意使用“傻子(geek)”一词并引以为荣--这是宣布他们与主流社会不合作的声明。如果你能集中足够的精力来做好黑客同时还能有正常的生活,这很好。今天做到这一点比我在1970年代是个新手时要容易得多。今天主流文化对技术怪人要友善得多。甚至有更多的人意识到黑客通常更富爱心,是块很好的做恋人和配偶的材料。更多信息见 Girl's Guide to Geek Guys如果你因为生活上不如意而为做黑客所吸引,那也没什么--至少你不会分神了。或许以后你会找到自己的另一半。--风格的意义重申一下,做一名黑客,你必须进入黑客精神之中。当你不在计算机边上时,你仍然有很多事情可做。它们并不能替代真正的编程(没有什么能替代编程),但很多黑客都那么做,并感到它们与黑客精神存在一种本质的关联。阅读科幻小说。参加科幻小说讨论会。(一个很好的寻找黑客的场合)研究禅宗,或练功习武。练就一双精确的耳朵,学会鉴赏特别的音乐。学会玩某种乐器,或唱歌。提高对双关语的鉴赏。学会流畅地用母语写作。(令人惊讶的是,我所知道的所有最棒的黑客,都是很不错的作家)这些事情,你做得越多,你就越适合做黑客。至于为什么偏偏是这些事情,原因并不很清楚,但它们都涉及到了左-右脑的综合技巧,这似乎是关键所在。(黑客们既需要清晰的逻辑思维,有时也需要强烈的跳出逻辑之外的直觉)最后,还有一些不要去做的事情。不要使用愚蠢的、过于哗众取宠的ID不要自称为网络朋克(punk),也不要对那些人浪费时间不要寄出充满拼写和语法错误的email,或张贴错误百出的文章做以上事情,会大大损害你的声誉。黑客们个个记忆超群--你将需要数年的时间让他们忘记你的愚蠢。--其它资源Peter Seebach 为那些不知如何同黑客打交道的经理们维护了一个非常精彩的黑客FAQ。The Loginataka 有许多关于如何正确培养一个Unix黑客的态度的材料。我也曾写过一篇“黑客文化简史”。我还写过另一篇文章,“大教堂与集市”,解释了许多Linux和开放源码文化的运作原理。我还在它的续集“开拓智域”一文中有更直接的论述。--FAQ(常问问题解答)问:你会教我如何做黑客吗?自从第一次发布此页,我每周都会得到一些请求,要我“教会他如何做黑客”;遗憾的是,我没有足够的时间和精力来做这个;我自己的编程项目已经占用了我110%的时间。甚至即便我想教你也不可能,黑客基本上是一项需要你自行修炼的态度和技术。你会发现即使真正的黑客想帮助你,如果你乞求他们填鸭一样教你的话,你不会赢得他们的尊敬。首先去学习。显示你在尝试,你能靠自己去学习。然后再去向黑客们请教问题。问:你会帮我“黑”掉一个站点吗?或者教我怎么黑它?No. 任何在读完FAQ后还问此问题人,都是愚不可及的家伙,即使有时间我也不会理睬。任何发给我的此类mail都会被忽略或被痛斥。问:哪里能找到真正的可以与之交流的黑客?最佳办法是就近参加一个Unix或Linux的用户组,参加他们的会议。问:我该先学哪种语言?HTML,如果你还不会的话。但它不是一个真正的编程语言。当你准备编程时,我建议你从Python开始。会有很多人向你推荐Perl,它比Python还受欢迎,但却难学一些。C是非常重要的,但它却是最难学的。不要一开始就尝试学C。问:开放源码的自由软件不会使程序员饿肚子吗?这似乎不大可能--到目前,开放源码软件产业创造了而不是消灭了大量工作机会。如果写一个程序比不写一个程序只是个纯粹经济上的收益的话,无论它是否免费,只要它被完成,程序员都会从中得到回报。而且,无论软件是由多么的free的方法开发的,对更新的软件应用的需求总是会有的。问:我从何学起?哪里有免费的Unix?本页的其它地方指向最常用的免费Unix。要做一名黑客,你需要自立自强,以及自我教育的能力。现在开始吧……
新手请问几个.Net数据库的有关问题
新手请教几个.Net数据库的问题刚转到.Net平台下面来,多多不适应,向大家讨教几个问题1、以前用VB6写数据库相关程序都是做一个全局Connection数据库连接对象,程序开始的时候打开连接,程序退出的时候关闭连接。在.Net下面不知道这种做法是否合适?是否一般都把数据库连接对象作为静态变量?提出这个问题主要是最近使用sqlDataReader对象来操作数据库,只要有超过两个sqlDataReader对象就会报错:“已有打开的与此命令相关联的 DataReader,必须首先将它关闭”。网上查看了一些帖子,都说一个Connection对象不能同时用在两个sqlDataReader对象中,如果是这样的话难道每个操作都要打开、关闭数据库连接,难道打开关闭数据库连接这个操作不需要时间开销吗?这样难道不会影响效率?2、sqlDataReader对象是一个轻量级的数据读取对象,较sqlDataSet是否效率好一些?但是sqlDataset似乎可以在不关闭连接对象的情况下创建任意多个sqlDataset对象,相比sqlDataReader每个对象都要创建连接对象是否更适合在一个过程内频繁访问数据库?------解决方案--------------------1.差不多吧。可以看下sqlhelper.另外vs下有很多更先进的方法,建议你体验下。2.用法不一样的,不是大小的区别。dataset是把所有结果装入到内存中,不适合大量数据,比如上万的。datareader是一条一条的读,所以需要和数据库保持连接。跟recordset差不多,只不过它只能向后读。
------解决方案--------------------...你喜欢怎么写就怎么写呗
轻量级的你嫌关闭数据库麻烦就用USING(){}
适用完后会自动释放掉。 你如果考虑性能,用连接池。
------解决方案--------------------(一).说明
初学ADO.Net会被ADO.Net访问数据库方式弄得头晕,感觉无从下手.本文将它们整合在一起,文章并没有涉及太多深层知识. 只是我觉得将它们集中在一起,在比较中学习更快,更清晰一些:
本文列举了用ADO.Net访问数据库的所有方式:1.用Sql语句访问数据库2.用无参存储过程访问数据库3.用有参存储过程访问数据库4.使用 CommandBuilder.DeriveParameters 来填充 Command 对象的 Parameters 集合,来访问数据库5.使用SqlDataReader对象输出数据.(二).代码示例用到的存储过程 myprocedure
SQL代码:---有参CREATE procedure dbo.[myprocedure]
@start int,
@end int)asselect
* from productswhere productid&=@start and productid&=@end---无参CREATE procedure dbo.[myprocedure]asreturn 'Hello'GOprivate DataSet GetDataSet(int sign)
//*******自定义连接字符串********/
string connectionStr="server=(localhost);uid=pwd=;database=NorthWind";
SqlConnection myConnection=new SqlConnection(connectionStr);
DataSet myDataSet=new DataSet();
string sqlProcedureName="myprocedure";
//此存储过程必须事先已经定义好了.
if(sign==1)//执行语句.
(最常用的情况)
string queryStr="select * from products";
SqlDataAdapter myAdapter=new SqlDataAdapter(queryStr,connectionStr);
myAdapter.Fill(myDataSet);
return myDataS
if(sign==2)//调用SQL无参存储过程,此存储过程返回select查询结果
SqlCommand myCommand=new SqlCommand(sqlProcedureName,myConnection);
mandType=CommandType.StoredP
SqlDataAdapter myAdapter=new SqlDataAdapter(sqlProcedureName,myConnection);
myAdapter.Fill(myDataSet);
return myDataS
if(sign==3)//调用SQL有参存储过程,此存储过程返回select查询结果,且传递参数
SqlCommand myCommand=new SqlCommand(sqlProcedureName,myConnection);
mandType=CommandType.StoredP
SqlParameter start=new SqlParameter("@start",SqlDbType.Int,4); // 定义第一个参数
start.Value=1;
myCommand.Parameters.Add(start);
SqlParameter end=new SqlParameter("@end",SqlDbType.Int,4); // 定义第二个参数
end.Value=5;
myCommand.Parameters.Add(end);
SqlDataAdapter myAdapter=new SqlDataAdapter(sqlProcedureName,myConnection);
myAdapter.SelectCommand=myC
myAdapter.Fill(myDataSet);
return myDataS
if(sign==4)
//演示如何使用 CommandBuilder.DeriveParameters 来填充 Command 对象的 Parameters 集合
SqlCommand myCommand=new SqlCommand(sqlProcedureName,myConnection);
mandType=CommandType.StoredP
SqlDataAdapter myAdapter=new SqlDataAdapter(sqlProcedureName,myConnection);
myConnection.Open();
//如果不打开连接,下一句将不知道从哪里去取所需的存储过程
SqlCommandBuilder.DeriveParameters(myCommand);
myCommand.Parameters["@start"].Value=1;
myCommand.Parameters["@end"].Value=5;
myAdapter.SelectCommand=myC
myAdapter.Fill(myDataSet);
return myDataS
if(sign==5)//练习使用SqlDataReader,结果在控制台输出
SqlCommand myCommand=new SqlCommand(sqlProcedureName,myConnection);
mandType=CommandType.StoredP
SqlParameter start=new SqlParameter("@start",SqlDbType.Int,4); // 把4改变或去掉
start.Value=1;
myCommand.Parameters.Add(start);
SqlParameter end=new SqlParameter("@end",SqlDbType.Int,4); // 把4改变或去掉
end.Value=5;
myCommand.Parameters.Add(end);
SqlDataAdapter myAdapter=new SqlDataAdapter(sqlProcedureName,myConnection);
myAdapter.SelectCommand=myC
myConnection.Open();
SqlDataReader myReader = myCommand.ExecuteReader();
Console.WriteLine("{0}, {1}", myReader.GetName(0), myReader.GetName(1));
while (myReader.Read())
//Console.WriteLine("{0},{1}", myReader.GetString(0), myReader.GetString(1));
Console.WriteLine("{0},{1}", myReader.GetValue(0), myReader.GetValue(1));
myConnection.Close();
DataTable myTable=new DataTable();
myDataSet.Tables.Add(myTable);
return myDataS
return new DataSet(); }------解决方案--------------------http://blog.csdn.net/ChengKing/archive//518079.aspx(六).ADO.Net使用方面优化
1.数据库连接打开和关闭。
在需要连接时打开,当访问完数据库要立刻关闭连接.
举例说明,还是看两个代码段:
DataSet ds = new DataSet();
SqlConnection MyConnection = new SqlConnection("server= uid= pwd=; database=NorthWind");
SqlCommand myCommand = new SqlCommand(strSql,MyConnection);
SqlDataAdapter myAdapter=new SqlDataAdapter(queryStr,connectionStr);
MyConnection.Open();
//打开连接
for(int i=0;i&1000;i++)
//for循环模拟取得数据前的商业逻辑操作
Thread.Sleep(1000);
myAdapter.Fill(ds);
for(int i=0;i&1000;i++)
//for循环模拟取得数据后的商业逻辑操作
Thread.Sleep(1000);
MyConnection.Close();
//关闭连接
DataSet ds = new DataSet();
SqlConnection MyConnection = new SqlConnection("server= uid= pwd=; database=NorthWind");
SqlCommand myCommand = new SqlCommand(strSql,MyConnection);
SqlDataAdapter myAdapter=new SqlDataAdapter(queryStr,connectionStr);
for(int i=0;i&1000;i++)
//for循环模拟取得数据前的商业逻辑操作
Thread.Sleep(1000);
MyConnection.Open();
//打开连接
myAdapter.Fill(ds);
MyConnection.Close();
//关闭连接
for(int i=0;i&1000;i++)
////for循环模拟取得数据后的商业逻辑操作
Thread.Sleep(1000);
显示II代码比I代码好的多,I中早早占着连接不放,如果用户很多的话,容易出现连接池满情况。严重时出现死机现象.
2.数据库查询
直接生成SQL语句。 Sql Server每次都要对其进行编译,在性能方面不会有很大的提高。 另外也不够安全。容易被攻击.
II. 使用带参数的SQL命令。这种方式Sql Server只对其编译一次,对于不同的参数可以重复使用编译后的命令。提高了性能.
III.使用Sql Server存储过程. 编译一次. 具有独立性,便于修改和维护.
一次能完成用语句发送多次的功能.减少了网络的
并不一定存储过程一定比语句效率要高,如果商业逻辑很复杂的话,有时候用语句比存储过程效率要高.------解决方案--------------------1.没见过用静态的SqlConnection2.不会,尽管用吧3.一般都写一个操作数据库的类
优化查询吧------解决方案--------------------写一个数据库操作类,要带参数,调用类的时候把sql命令作为string型参数传递,打开和关闭连接的语句全都包含在数据库操作类里就OK。用完sqldatareader要关闭。
------解决方案--------------------
1.在ADO.NET的思想里面连接存在的时间越短越好,所以每次使用sqlDataReader必须显示打开连接,填充数据后关闭连接。频繁打开关闭连接所造成的效率问题,ADO.NET用连接池解决。在连接字符串中,默认是打开连接池的ADO.NET中的连接池o
如果使用的是OleDBConnection类,则连接池有提供程序自动处理,您不必自己进行管理。o 如果使用的是sqlConnection类,则连接池被隐式管理,但也提供管理选项允许您自己管理池。- 在连接字符串中指定:o
pooling=//默认为trueo
connection lifetime =5//默认为0o
min pool size =1//默认为0o max pool size =50//默认为100如果你是连接同一个数据库的话不需要重复new Connection ,new一个就好了 需要连数据库的时候Open()是不是耗时自己试试不就知道了吗,因为没用过vb不知道怎么比较。另外说下在ADO.NET 2.0中的DataSet的效率是ADO.NET1.X的40倍+。感觉vb好像很古董。2.sqlDataReader与DataSet时两个层次的概念。DataReader可以叫数据阅读器它和DataAdapter的作用类似都是数据提供者的范畴。好像无sqlDataSet,应该是DataSet它是内存中的表,为XML格式。.net应用程序实质上绝大多数数据库操作的是它。就我目前的理解是否频繁访问数据库和是否使用DataSet关系不大,关键是使用好连接池。
------解决方案--------------------数据库的确很烦。。。
如果您想提高自己的技术水平,欢迎加入本站官方1号QQ群:&&,&&2号QQ群:,在群里结识技术精英和交流技术^_^
本站联系邮箱:

我要回帖

更多关于 免费炒股软件 的文章

 

随机推荐