为什么?233.32M的软件都不能软件移动到sd卡内存卡里面。

机械设计搞过,plc编程搞过,说一下的个人经历和感受,供题主参考。&/p&&p&
本人机械设计制造及其自动化专业,13年6月本科毕业,毕业就从事机械行业,从机械助理工程师起步干,这一干就干了4年,设计水平大概这样:可以独立设计中型产线,并稳定投产(风险太大没把握的项目我会拒绝,拒绝不了我就拉总监下水)。&/p&&p&
成长路线是这样子的:第1份机械工作,半年;→
第2分机械工作,1年;→
最后一份机械工作,2年 ;→离职转电气。跳槽的间隔时间指数性增长(机械前易后难,精通难上加难)。&/p&&p&
在这里建议那些毕业从事机械的学弟们:抓紧机会表现,尽快回办公室画图,不要被车间耽误太多时间。(但还是要特别特别重视实际装配)。&/p&&p&
在16年开始感觉自己的机械水平达到一个瓶颈,提升很慢,自我感觉特别慢,感觉就得靠继续熬经验,熬资历。假如以前是快走,现在基本就是原地踏步。&/p&&p&
这时候机械设计的忙、累、压力大、修改麻烦等特点突然就很尖锐地刺痛我了。看到同级别一起合作的电气工程师悠哉悠哉地按时完成任务,不用加班!每天忙的像条狗的我突然就想:不如暂时放下机械去搞电气!反正工资也差不多!还可以全面发展!&/p&&p&
从想法的萌发,到成型,到提出离职。花了大概半年。&/p&&p&
日正式离职。&/p&&p&
虽然搞了4年机械,但到直到离职那一天都没搞过plc编程,也没提前买书看,以前在学校学的也忘记得7788,概念还在。&/p&&p&
但一点都不怂,感觉plc这东西随便几下应该就会了。离职后第二天,就去拜访大学同学(毕业从事销售,后转电气工程师,刚满9个月)。&/p&&p&
直接就上门,厚着脸皮在他家打地铺学习了两周:前2天安装软件,熟悉界面操作,这2天刚好周末,所以就手把手、一对一教学;然后白天他上班,晚上回来解答我白天积累的问题。持续一周。第2周他就出差了,留我一个人在他家自学,就变成了晚上视频答疑。周末他出差回来,又面对面交流了两天。聚一顿。(补充说明,学的:松下plc)&/p&&p&
然后就收拾行囊下山闯江湖了。&/p&&p&
回家就写简历,投,面试。&/p&&p&
由于搞了4年机械,降薪应聘个电气工程师还不是问题的,吹吹牛皮,聊聊天就应聘成功了。&/p&&p&
7月1号正式上班。由于面试时吹牛逼,所以上来就搞是项目,还好是个小项目,而且时间充裕。竟然就这样顺顺利利就搞成功了!平缓过度,我的同事都没察觉到我没搞过编程。也就我的主管隐约有感觉,因为他看见了我第一次用万用表的样子,那摸索着用的挫样!还看见我压电线的笨拙样!&/p&&p&
但无伤大雅,项目在我一个人的摸索下就顺利成功了,所以他也没说啥。这家公司用的是西门子plc,博途编程软件。和松下plc完全不一样,我是看帮助文件+别人的项目,摸索着慢慢编的。然后转正,竟然才加1k,我挥挥手就走了(拒绝转正)。然后我发现,我竟然喜欢上西门子博途编程了!&/p&&p&
出来接着找工作,这次目标更明确:只找用西门子plc的。而且自信心更足了,感觉这波可以把工资提回机械设计的水准了。所以面试的时,搬以前设计的项目出来吹,把自己说成电气部分的负责人。然后面试成功了(面试的笔试,面谈,编程测试都通过了)。&/p&&p&
新工作更有挑战(因为工资被我吹高了),一上来就是4工位产线+机器人型的项目。当时我都抱着尽人事听天命的想法了,好好干,卖力干,干成啥样是啥样,大不了灰溜溜走人。&/p&&p&
还好运气不错,项目被机械设计,采购,和装配拖了好久,而且经理是那种甩手掌柜型(然后他就没明确发现我边学边做项目)。3,4个月的项目,硬是搞了半年多。我又抗过来了(差点累死,压力大那种)。&/p&&p&
目前转正工资比以前机械的低那么一点,但搞完这个项目后,轻松得一撇,每天悠哉悠哉的。后面有新的项目都一样轻松,在原来的程序框架上修改一下就好。都有像成的套路。哪里像以前搞机械那么累!现在基本都不用加班了,只有调试的时间会猛加班。平常一空下来就猛补编程知识。&/p&&p&
转行,转着转着就忘记了初心(当初只是为了全面发展),完全不想什么全面发展了,也不想再回去搞苦逼的机械设计了。&/p&&p&
想着plc门槛太低了(也确实低,快1、2个月转成功;慢1年也能成功;初中生的电工都能慢慢入行),而且只搞plc上限太低了,所以最近在学高级语言,猛学C++,感觉C++的编程思维对plc编程也有很大启发,就算以后用不上也有很大收获。&/p&&p&
卖力地学了这么久C++,现在都还没入门(能做项目为入门)。但C++编起程来爽多了,有意思多了,一台电脑就可以搞,爽得一撇。而且上限特高,你看我到现在都还没入门。&/p&&p&
学plc我都不带买书的,摸索一下就行。学C++我都买了7本大步头(每一本都六、七百页),天天看,一本都还没看完,看到后面还得经常翻回前面看,看完一遍还得看第二遍。这下真的路漫漫其修远兮!&/p&&p&
转行转到现在才发现真爱,虽然晚了点,但还来得及。边做着plc边自学,自学完7大秘籍再出去闯荡!&/p&&p&
答着答着就偏题了,就像转着转着就转歪了!&/p&&p&
但题主你发现没有,你这个专业做机械设计,或者plc编程都可以,本质上也没太大区别,主要看你个人更喜欢或擅长哪方面。&/p&&p&总结对比一下我个人的感受:&/p&&p&
1、机械设计:&/p&&p&
成长慢,成型时间比plc慢一倍以上(一般1年入行,2,3年独立做项目);成长上限比纯plc高; &/p&&p&
技术成长跟不上项目需求,也就是经常逼着你设计你自己也没把握的东西! (这点也会导致你加班多),修改也多!修改多就嘿嘿.... &/p&&p&
出差少;&/p&&p&
设计出错后修改麻烦(牵扯的部门多,曾加成本,拖交期,各种求爷爷求奶奶的),&/p&&p&
修改得多的话,车间的普通装配人员都可以指着你的鼻子骂你;&/p&&p&
工资比同级别电气高。&/p&&p&
2、电气工程师(plc):&/p&&p&
门槛低,入门快,成型快(一般半年入行,1年独立做项目);纯plc上限低;&/p&&p&
出差多,全国各地流窜!可能会长期(一两个月)驻守客户现场;&/p&&p&
技术成长容易满足项目的需求。这点就保证了,你比较容易通过提高技术来减少加班。&/p&&p&
加班少了,就有时间学习,然后就可以继续折腾了(对我来说的优点哈)。&/p&&p&
3、软件编程:门槛高;自学方便有电脑就可以搞,资料大把;有点难;爽;上限高;&/p&
机械设计搞过,plc编程搞过,说一下的个人经历和感受,供题主参考。 本人机械设计制造及其自动化专业,13年6月本科毕业,毕业就从事机械行业,从机械助理工程师起步干,这一干就干了4年,设计水平大概这样:可以独立设计中型产线,并稳定投产(风险太大没把…
&p&youtube的推荐算法经历过好几次大的改动,都有论文发表的:&/p&&p&第一版 基于graph和random walk的算法。&br&Video suggestion and discovery for youtube: taking random walks through the view graph。&a href=&//link.zhihu.com/?target=http%3A//dl.acm.org/citation.cfm%3Fid%3D1367618& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Video suggestion and discovery for youtube&/a&&/p&&p&第二版 基于item based协同过滤(+二度扩展+ranking+多样性)。the YouTube video recommendation system。&a href=&//link.zhihu.com/?target=http%3A//dl.acm.org/citation.cfm%3Fid%3Dbnc%3D1& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&The YouTube video recommendation system&/a&&/p&&p&第三版 基于topic representation+搜索匹配+LR调权的方法做相关推荐。Retrieval Methods for&br&Large Scale Related Video Suggestion。&a href=&//link.zhihu.com/?target=http%3A//static.googleusercontent.com/media/research.google.com/zh-CN//pubs/archive/42623.pdf& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&static.googleusercontent.com&/span&&span class=&invisible&&/media/research.google.com/zh-CN//pubs/archive/42623.pdf&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&第四版 基于Deep Learning (deep&wide, negative sampling+knn做召回, +session特征做精排)。&a href=&//link.zhihu.com/?target=http%3A//static.googleusercontent.com/media/research.google.com/ko//pubs/archive/45530.pdf& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Deep Neural Networks for YouTube Recommendations&/a&&/p&&p&&br&&/p&&p&youtube还发过一些相关的论文,如:&/p&&p&channel classifier &a href=&//link.zhihu.com/?target=https%3A//static.googleusercontent.com/media/research.google.com/en//pubs/archive/41156.pdf& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&static.googleusercontent.com&/span&&span class=&invisible&&/media/research.google.com/en//pubs/archive/41156.pdf&/span&&span class=&ellipsis&&&/span&&/a& &/p&&p&Label Partitioning For Sublinear Ranking &a href=&//link.zhihu.com/?target=http%3A//proceedings.mlr.press/v28/weston13.pdf& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&proceedings.mlr.press/v&/span&&span class=&invisible&&28/weston13.pdf&/span&&span class=&ellipsis&&&/span&&/a& &/p&
youtube的推荐算法经历过好几次大的改动,都有论文发表的:第一版 基于graph和random walk的算法。 Video suggestion and discovery for youtube: taking random walks through the view graph。第二版 基于item…
&p&你写ARM Linux,面对的是一块开发板,一个SOC,什么都看不到,太不直观了……当你学“计算机”的时候,你一定要时刻记得,你的“计算机”是台冯诺依曼机——运算器,控制器(这两样合起来是CPU),存储器,输入设备,输出设备。你所面对的一切SOC也好单板电脑也好,都是高度集成在一起的冯诺依曼机&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-87d84bfe72f57abbe8f3_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&638& data-rawheight=&479& class=&origin_image zh-lightbox-thumb& width=&638& data-original=&https://pic4.zhimg.com/50/v2-87d84bfe72f57abbe8f3_r.jpg&&&/figure&&p&现代的电脑虽然已经缩小了n多倍,性能强了n多倍,但它们和50年代的IBM机器在结构上是一样的。思考题:试着找出上面和下面照片里的运算器,控制器,存储器,输入设备和输出设备。&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-fa855c84c4e34c7979aaadb81b0e7272_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&700& data-rawheight=&404& class=&origin_image zh-lightbox-thumb& width=&700& data-original=&https://pic4.zhimg.com/50/v2-fa855c84c4e34c7979aaadb81b0e7272_r.jpg&&&/figure&&p&要解释什么是文件系统,要先解释什么是“文件”(File),在台湾,“文件系统”也被翻译为“档案系统”。那么这个“文件”或“档案”是什么呢?看图说话:&/p&&figure&&img src=&https://pic2.zhimg.com/50/v2-7d3d8dc66bb8aacbecf2f1b362afd75f_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&580& data-rawheight=&600& class=&origin_image zh-lightbox-thumb& width=&580& data-original=&https://pic2.zhimg.com/50/v2-7d3d8dc66bb8aacbecf2f1b362afd75f_r.jpg&&&/figure&&p&一摞打孔卡片,就是一个“文件”它可以是一段程序,也可以是一段程序需要使用的数据。&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-40ec0ceac9a5f7fce9fad70_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&748& data-rawheight=&476& class=&origin_image zh-lightbox-thumb& width=&748& data-original=&https://pic3.zhimg.com/50/v2-40ec0ceac9a5f7fce9fad70_r.jpg&&&/figure&&p&上面的图是一段Fortran Monitor System(monitor可以理解为原始的“操作系统”)的“作业”(job,批处理batch系统的术语,你可以理解为一个可执行的程序),包含起始卡片,程序逻辑,程序数据,结束卡片,其实和今天的可执行文件的结构非常相似。&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-803ec8fafa2d4dbd783e044f9433e53b_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1091& data-rawheight=&559& class=&origin_image zh-lightbox-thumb& width=&1091& data-original=&https://pic4.zhimg.com/50/v2-803ec8fafa2d4dbd783e044f9433e53b_r.jpg&&&/figure&&p&除了穿孔卡片之外,还有穿孔纸带,你把一张一张卡片头尾相接,就构成了一个(超宽的)纸带。在逻辑上,它就是一个一维数组。&/p&&p&思考题:文件读取进来为什么是byte array?&/p&&p&纸带在70年代还很流行,当年比尔盖茨的BASIC语言解释器,就是存在纸带上的,现在已经成文物了。&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-5cae5b847cba1f3fbaf6_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&625& data-rawheight=&352& class=&origin_image zh-lightbox-thumb& width=&625& data-original=&https://pic1.zhimg.com/50/v2-5cae5b847cba1f3fbaf6_r.jpg&&&/figure&&p&纸带时代的遗产到现在还能在C语言里看到,这段代码来自:&a href=&//link.zhihu.com/?target=https%3A//stackoverflow.com/questions//read-a-file-as-byte-array& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Read a file as byte array&/a&&/p&&div class=&highlight&&&pre&&code class=&language-c&&&span class=&kt&&FILE&/span& &span class=&o&&*&/span&&span class=&n&&fileptr&/span&&span class=&p&&;&/span&
&span class=&kt&&char&/span& &span class=&o&&*&/span&&span class=&n&&buffer&/span&&span class=&p&&;&/span&
&span class=&kt&&long&/span& &span class=&n&&filelen&/span&&span class=&p&&;&/span&
&span class=&n&&fileptr&/span& &span class=&o&&=&/span& &span class=&n&&fopen&/span&&span class=&p&&(&/span&&span class=&s&&&myfile.txt&&/span&&span class=&p&&,&/span& &span class=&s&&&rb&&/span&&span class=&p&&);&/span&
&span class=&c1&&// Open the file in binary mode&/span&
&span class=&n&&fseek&/span&&span class=&p&&(&/span&&span class=&n&&fileptr&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&n&&SEEK_END&/span&&span class=&p&&);&/span&
&span class=&c1&&// Jump to the end of the file&/span&
&span class=&n&&filelen&/span& &span class=&o&&=&/span& &span class=&n&&ftell&/span&&span class=&p&&(&/span&&span class=&n&&fileptr&/span&&span class=&p&&);&/span&
&span class=&c1&&// Get the current byte offset in the file&/span&
&span class=&n&&rewind&/span&&span class=&p&&(&/span&&span class=&n&&fileptr&/span&&span class=&p&&);&/span&
&span class=&c1&&// Jump back to the beginning of the file&/span&
&span class=&n&&buffer&/span& &span class=&o&&=&/span& &span class=&p&&(&/span&&span class=&kt&&char&/span& &span class=&o&&*&/span&&span class=&p&&)&/span&&span class=&n&&malloc&/span&&span class=&p&&((&/span&&span class=&n&&filelen&/span&&span class=&o&&+&/span&&span class=&mi&&1&/span&&span class=&p&&)&/span&&span class=&o&&*&/span&&span class=&k&&sizeof&/span&&span class=&p&&(&/span&&span class=&kt&&char&/span&&span class=&p&&));&/span& &span class=&c1&&// Enough memory for file + \0&/span&
&span class=&n&&fread&/span&&span class=&p&&(&/span&&span class=&n&&buffer&/span&&span class=&p&&,&/span& &span class=&n&&filelen&/span&&span class=&p&&,&/span& &span class=&mi&&1&/span&&span class=&p&&,&/span& &span class=&n&&fileptr&/span&&span class=&p&&);&/span& &span class=&c1&&// Read in the entire file&/span&
&span class=&n&&fclose&/span&&span class=&p&&(&/span&&span class=&n&&fileptr&/span&&span class=&p&&);&/span& &span class=&c1&&// Close the file&/span&
&/code&&/pre&&/div&&p&fseek:快进,ftell:当前纸带的位置,rewind:倒带,filelen:纸带的长度,你看到文件操作的代码,想着打孔纸带卷来卷去,就形象了。磁带的原理和纸带类似,但是用磁信号代替了物理打孔,记录密度更高也更容耐用,还可以重新磁化擦除改写。&/p&&p&不过纸带也好磁带也好受制于物理结构都只能线性读写,不能随机读写,如果你生活在1950年代,你会想到什么?对了!黑胶唱机!&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-2bdaef5afe705fc4e6b77b38f1d7f285_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&602& data-rawheight=&390& class=&origin_image zh-lightbox-thumb& width=&602& data-original=&https://pic3.zhimg.com/50/v2-2bdaef5afe705fc4e6b77b38f1d7f285_r.jpg&&&/figure&&p&不对,是这个&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-984aea9586ffbdce686e8b06a2b81533_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic1.zhimg.com/50/v2-984aea9586ffbdce686e8b06a2b81533_r.jpg&&&/figure&&p&此处该有音乐!Daft Punk: Random Access Memories&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-929e79ed55da857bf30aef_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&940& data-rawheight=&705& class=&origin_image zh-lightbox-thumb& width=&940& data-original=&https://pic3.zhimg.com/50/v2-929e79ed55da857bf30aef_r.jpg&&&/figure&&p&IBM 350“统计控制随机存取法”(Random Access Method of Accounting and Control)使用了50张磁性“唱片”和机械手臂控制的“唱针”(磁头)&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-15acae2f59b2_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&600& data-rawheight=&450& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&https://pic4.zhimg.com/50/v2-15acae2f59b2_r.jpg&&&/figure&&p&后来,人们为了纪念IBM 350对计算机工业的巨大启发,为它树立了巨大的纪念性建筑——Oracle总部&/p&&p&思考题:数据库图标的圆柱是什么?&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-834fc392da9b3e7e8a62_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1200& data-rawheight=&731& class=&origin_image zh-lightbox-thumb& width=&1200& data-original=&https://pic4.zhimg.com/50/v2-834fc392da9b3e7e8a62_r.jpg&&&/figure&&p&上面的IBM 350有5MB,磁盘在当时属于容量很大的存储器,能够存储许多许多穿孔卡片和纸带的数据了,因此就必须对磁盘进行索引,1964年的文件 Disc File Applications: Reports Presented at the Nation's First Disc File Symposium 《磁盘文件应用:递交给第一届磁盘文件研讨会的报告》展示了1960年代主要的若干电脑系统对磁盘的使用。&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//www.bitsavers.org/pdf/informatics/Disc_File_Applications_1964.pdf& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&bitsavers.org/pdf/infor&/span&&span class=&invisible&&matics/Disc_File_Applications_1964.pdf&/span&&span class=&ellipsis&&&/span&&/a&&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-1e09a7d84b9192dbcf2f76c0f6cb7756_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&763& data-rawheight=&867& class=&origin_image zh-lightbox-thumb& width=&763& data-original=&https://pic4.zhimg.com/50/v2-1e09a7d84b9192dbcf2f76c0f6cb7756_r.jpg&&&/figure&&p&其中的插图展示了硬盘“格式化”的概念,将磁盘划分为若干较小的块,方便检索和操作。&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-3a791bbcb0bd_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1062& data-rawheight=&614& class=&origin_image zh-lightbox-thumb& width=&1062& data-original=&https://pic3.zhimg.com/50/v2-3a791bbcb0bd_r.jpg&&&/figure&&p&看图说话:磁盘分区软件的“柱面”是什么?&/p&&p&Bryant 4000是一款容量和体积都非常巨大的硬盘,直径1米的大圆盘以1200转每分的速度运行,充满了机械美学。&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//s3data.computerhistory.org/brochures/bryant.model2.12.pdf& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&s3data.computerhistory.org&/span&&span class=&invisible&&/brochures/bryant.model2.12.pdf&/span&&span class=&ellipsis&&&/span&&/a&&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-5ab738f9f9efb100c48d31e6da517264_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&600& data-rawheight=&495& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&https://pic1.zhimg.com/50/v2-5ab738f9f9efb100c48d31e6da517264_r.jpg&&&/figure&&p&文件系统解决的问题,就是如何在磁盘上定位和索引文件的问题——怎么在大转盘里找到自己想要的那卷纸带,像这样。&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-0c2cc48cb2ec6616edf84f57d5c417ed_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1024& data-rawheight=&768& class=&origin_image zh-lightbox-thumb& width=&1024& data-original=&https://pic4.zhimg.com/50/v2-0c2cc48cb2ec6616edf84f57d5c417ed_r.jpg&&&/figure&&p&早期的文件系统是扁平的,没有文件层次(hierarchy)的概念,Linux的前身Unix的前身Multics——爸爸的爸爸叫爷爷,总之,Linux的“爷爷”在1965年的时候成为第一个有文件层次的系统。当年的论文我们还能看到。&/p&&p&&a href=&//link.zhihu.com/?target=http%3A//multicians.org/fjcc4.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&A General-Purpose File System For Secondary Storage&/a&&/p&&p&设计文件层次系统所要解决的问题,是多程序(multiprogramming)环境下的次要(Secondary)在线存储器的可用问题(主要存储器用来加载系统,不放用户程序和数据),利用树状文件系统和权限管理,可以实现程序和用户一定程度上的隔离,提升分时系统的可用性,其中CHANGEDIRECTORY命令的简写cd命令直到今天仍然是几乎所有命令行系统中都最为常用的命令之一。&/p&&div class=&highlight&&&pre&&code class=&language-text&&CHANGEDIRECTORY PATHNAME
&/code&&/pre&&/div&&p&1970年代,Linux的“爸爸”Unix设计的时候,人们对电脑的应用更加丰富,许多新的需求被提出来,比如&/p&&ul&&li&如何让不同的程序交流数据?&/li&&li&如何让程序方便的操作不同外设?&/li&&li&如何利用脚本实现复杂的工作流程?&/li&&/ul&&p&这些需求带来了Unix系统最为重要的特征——统一的文件系统和管道,Unix的文件包括三类:&/p&&ul&&li&普通的文件&/li&&li&目录&/li&&li&特殊文件——输入输出设备&/li&&/ul&&p&此外Unix还设计了三个独特的文件系统机制&/p&&ul&&li&可移动的文件系统&/li&&li&10bit权限保护系统&/li&&li&统一的输入输出调用&/li&&/ul&&p&为什么要设计可移动(挂载)的文件系统,因为我们有移动硬盘了呀,decpack了解一下,把磁盘挂载到电脑上有几个步骤?把硬盘放进洗衣机(驱动器)里,关上洗衣机门,开动洗衣机,然后mount,就可以用了。反之停掉“洗衣机”之前,要umount(unmount,卸载),才能保证没有程序占用硬盘。&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-d8ed30d40a156e2b91bd9_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&700& data-rawheight=&934& class=&origin_image zh-lightbox-thumb& width=&700& data-original=&https://pic4.zhimg.com/50/v2-d8ed30d40a156e2b91bd9_r.jpg&&&/figure&&p&思考题:图中的妹子在干什么?&/p&&figure&&img src=&https://pic2.zhimg.com/50/v2-755eba647e8_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&386& data-rawheight=&500& class=&content_image& width=&386&&&/figure&&p&1978年发表的《The UNIX Time-Sharing System》一文,介绍的就是Unix运行在上面图中同款的PDP-11电脑上的情况,也介绍了Unix文件系统的设计需求和基本概念&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//archive.org/details/bstj57-6-1905& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&archive.org/details/bst&/span&&span class=&invisible&&j57-6-1905&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&Unix提供了统一的设备文件,抹平了不同类型的输入输出设备的差异,你可以把一个文件输出到串口,也可以把它输出到打印机,还可以把它存储到硬盘或者磁带上,而程序可以完全不用改,只要重定向输出设备就好,简直太方便了有木有,这些特性一直沿用到今天。&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//en.wikipedia.org/wiki/Device_file& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Device file - Wikipedia&/a&&/p&&p&Linux在设计时就是为了尽可能和Unix兼容,所以保留了几乎全部的Unix特性,虽然基于NAND的闪存开始在很多领域取代硬盘,巨大的CPU也被微处理器广泛替代,但对于Linux软件来说,它们面对的API仍然是一部抽象了的PDP小型机。&/p&&p&RAM disk出现的比较晚,1980年出现在运行在CP/M的微机上,之后也出现在DOS上,用软件机制模拟了一张磁盘来提供高速的临时存储空间,数据确实不是持久的,它的作用一般只是用来放临时数据,减少低速磁盘的读写次数,提高软件运行速度。&/p&
你写ARM Linux,面对的是一块开发板,一个SOC,什么都看不到,太不直观了……当你学“计算机”的时候,你一定要时刻记得,你的“计算机”是台冯诺依曼机——运算器,控制器(这两样合起来是CPU),存储器,输入设备,输出设备。你所面对的一切SOC也好单板电…
&p&首先,表面上是这样的,但是本质上并不是,想知道原因,我用一篇文章告诉你看到的都是表象。很多小公司对于测试的流程和要求并不是很高,就更加显得测试比开发的要求低。&/p&&p&即使说经过这几年的发展,测试行业已经比以前成熟和正规许多,但是你拦不住很多公司并不在乎什么流程,什么计划。因为对于很多小公司来说,开发人员是他们的命脉,可能有10个开发,但是只有1个测试。在这些老板的主观认为,开发解决的是有无的问题,而测试是解决好坏的问题。在缺乏长远目光、追求眼前利益的情况下,对于产品的态度也就是只求“过的去”,不求“过的硬”。&/p&&p&所以,&b&觉得测试比开发的要求低,有一部分国内行业现状造成,这是第一个原因。&/b&身边确实接触到很多的测试做了很多年,还是一个点点点,培训三四个月出来的就比他会的多,你说是他们公司的原因,还是他个人的原因?&/p&&p&&b&那么说觉得软件测试比开发要求低的原因是这个工作性质的原因,这是第二个原因。&/b&&/p&&p&大家都知道,软件测试入门简单,开发入门比较难。但是开发入门难,精进更难,测试是入门容易,精进也难。做测试到中级测试工程师,必须要接触到接口、性能、自动化方面,而这又涉及到代码、脚本、框架,所以说那些说测试比开发要求低,我只能还是在门外或者还是没有深刻的认识测试行业。&/p&&p&所以,&b&最终的结论就是:软件测试人员比软件开发员入门、初级的要求低,但是把这个工作当做事业去做,按照长久的职业去发展的,要求并不低。&/b&&/p&&p&&br&&/p&&p&从这个问题发散去思考,发现的确当下无论是行业内还是行业外,对于软件测试还是存在一些误区的,通过和身边做测试的朋友深入的去交流,也归纳整理出来一些问题合集,那么在此就占用一些篇幅絮叨絮叨。如果你真的想清楚的认识这个行业,一定要耐心的看下去,无论你的技术牛不牛!&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-4b84bade1ad467b92ec9dddad3690ad2_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1220& data-rawheight=&425& class=&origin_image zh-lightbox-thumb& width=&1220& data-original=&https://pic1.zhimg.com/50/v2-4b84bade1ad467b92ec9dddad3690ad2_r.jpg&&&/figure&&p&自己整理了&b&软件测试人员最容易陷入的28个误区&/b&,老规矩,文章思维导图放在文末,需要原图私信或者留言都行。文章共2000多字,预计阅读时间4分钟,希望对你们有所帮助。&/p&&p&&b&1、测试和开发永远都是死对头&/b&&/p&&p&虽然测试与开发的工作性质是对立的,但是目的都是为了项目更好的发展。&/p&&p&我以前发起过一个倡议:我们讨论的时候不要用他们(开发人员)和我们(测试人员),而是统一用咱们,因为开发人员和测试人员本来就是一起的。如果测试人员能与开发人员成为朋友,你会发现,工作会非常顺心,在我所在的企业中,测试人员和开发人员关系非常融洽,互相尊重,对大家的工作能力和技术表示肯定。&/p&&p&其中的诀窍重点在于测试这边的沟通,谁也接受不了别人指责自己得意之作,所以测试要以帮助开发让开发的‘孩子’更健康,让开发‘带孩子’别那么辛苦;&/p&&p&测试是系统它爹,开发是系统它妈,当妈的那么痛苦的生出来,当爹的要揍,当妈的能同意么,脾气上来了,当爹你就缓一下,哄哄,当妈的也不是傻子,她也知道对错的,当妈的要实在糊涂,那你还犹豫什么,抽她(哈哈,开个玩笑,还是要以理服人)。&/p&&p&&b&2、测试人员不需要了解软件开发知识&/b&&/p&&p&测试人员跟开发人员交流不畅,主要是有以下几个原因:&/p&&p&(1)测试人员如果看不懂开发代码,会导致BUG描述不清晰,不准确,开发人员不明白BUG应该怎么重现,或者你想说的是什么,甚至是一些很肤浅的bug,却被测试人员认为是非常严重的问题。&/p&&p&(2)测试人员的开发知识匮乏,将不是BUG的BUG提交给开发人员,或者提出的建议性意见在开发中实现起来比较困难,又无法给出一个合理的解决办法(开发人员易于实现的办法)。&/p&&p&(3)测试出BUG的同时,无法清晰准确地定位BUG出现的源头,导致与开发人员交涉次数过于频繁,时间是宝贵的,缺乏交流有害,交流过多也容易出问题。&/p&&p&所以,测试人员对开发知识的了解是必须的。&/p&&p&(4)如果不了解开发知识,测试人员很容易被开发人员牵着鼻子走,对于一些BUG的PK,经常是理屈词穷,因为开发人员随便一忽悠,你如果不了解个中奥妙,你一个字也说不上来。&/p&&p&(5)自动化测试和性能测试包括项目管理,都会要求对软件开发有深入的理解,如何能设计一个好的自动化框架,好的性能测试用例,如何管理一个开发团队,这都需要我们在软件开发方面有所掌握。&/p&&p&所以,测试了解软件开发知识是必须的。&/p&&p&&b&3、软件测试很简单&/b&&/p&&p&软件测试入门相对比开发人员确实更容易一些,原因是开发一开始就要掌握一门语言,而测试到中后期才需要掌握开发语言技术,测试更重视的是测试思路,方法,以及测试工具的掌握。但是到了中后期,软件测试需要掌握的知识量将远大于开发人员,测试后期要掌握功能,性能,自动化,接口,协议,抓包,安全性,包括移动端等一系列测试工具,技术难度性丝毫不亚于开发技术。&/p&&p&&b&4、测试就是为了找到bug&/b&&/p&&p&测试人员不仅需要找到bug,还要跟踪bug直至问题得以被修复,对缺陷进行确认测试并关闭缺陷,测试员还需要分析问题原因,避免因此问题影响到其他功能。&/p&&p&不仅如此,测试还需要对软件进行性能测试、自动化测试和安全性测试等一系列其他测试手段,目的是找出系统漏洞,找出性能瓶颈,服务器抗压能力及稳定性。这已经远远超过找bug的范畴。&/p&&p&&b&5、自动化测试太难&/b&&/p&&p&很多初学者都认为自动化测试相比性能和功能都要难很多,实际上每个测试方向做精通都不容易,自动化只是测试其中的一部分,功能测试做到极致也不容易,性能测试做到精通也同样需要各种技术手段,自动化无非就是需要懂一些代码,难点不在技术,而是思路和实施操作,实际上只要付出同样多的努力,无论是性能还是自动化,都可以做的很好。&/p&&p&&b&6、手工测试没有挑战性&/b&&/p&&p&手工测试是测试的基本功,也是每一个测试必经之路,但是真正做好的人没有几个,很多人认为手工测试就是点点点,我认为这个说法就是对测试的污蔑,手工测试的范围很大,包含涉及的内容也非常多,例如数据准确性,表单值域,逻辑分析,业务梳理,交互易用性,逆向思维,UI兼容性,cookie等...单单说业务逻辑和业务流程测试,就有多少人测试不全面,分析不到位而导致发布上线后出现严重问题。&/p&&p&&b&7、软件测试工作重复又枯燥&/b&&/p&&p&软件测试的范围很广,测试的手段和方法也是不一样的,而且每个人测试一个项目的思路也不同,实际上认为重复性工作的人,往往是技术差的人,因为他始终没有任何成长。&/p&&p&真正做好测试的人对待每一个项目都可以使用不一样的测试方法,接口测试结束就测功能,功能测完了就做做自动化,上线之前做做性能测试,测试工具也可以随意更换,对于我来说,每一个新项目的开始,都是一次新的挑战,工作8年,丝毫没有感觉到枯燥乏味。&/p&&p&&b&8、女生比较适合做软件测试&/b&&/p&&p&很多人都觉得女生做测试比较吃香,事实上身边做测试的也确实女生比男生要多,一个是因为女生天生比男生细心,二是很多人都觉得因为开发大多是男生,女生做测试跟开发沟通会更顺畅,这其实是一些客观的实际因素,但是并不代表男生不适合做测试。经过统计,各大公司的测试负责人男生比女生要更多。&/p&&p&&b&9、白盒测试是开发人员干的事:&/b&&/p&&p&一个合格的测试人员必须掌握白盒测试,理解其中的原理。不管什么样的测试,都必须要有测试人员的思维才能做好,白盒测试有着其测试理论与技术,完全可以有专职的白盒测试人员进行,避免开发人员自己测试自己的程序。&/p&&p&&b&10、测试就是给开发擦屁股的&/b&&/p&&p&大家应该都清楚,在实际的工作中通常是测试驱动开发的,也就是说是测试在主导着项目的进展,开发人员的技术水平直接体现在bug的数量上,开发的能力测试一清二楚,也是测试人员在驱动着开发人员做出改变。如果测试不能驱动开发,被开发牵着鼻子走,只有一个原因,就是测试人员能力弱,无法胜任这个角色。&/p&&p&&b&11、我不适合做开发,做测试吧&/b&&/p&&p&这个观点特别适应于应届毕业生,在以前面试的过程中,有些人就觉得我代码写的不好,所以入行转做测试的工作,还有一部分人稍微明白一点开发,但是觉得自己在开发方面没什么优势,主动给自己定位做测试工作。其实测试要掌握的技能远比开发多得多,至少面要广得多,要做一个好的测试人员,远比做一个开发人员难得多。&/p&&p&&b&12、机器自动化将会代替手工测试&/b&&/p&&p&现在很多人都在传自动化测试将会替代手工测试,首先有这种想法的人,一定还没有真正了解自动化测试,自动化是为了做回归测试的,自动化脚本是人工编写或录制完成的,只能覆盖大体的业务流程,并不能对软件进行详细的测试覆盖,详细的测试还是需要手工完成的,不然自动化脚本维护的时间成本将会大大增加,适得其反。而且新功能是必须进行手工测试的,只有老功能才可以进行自动化测试。自动化是为了提高测试效率而存在的测试手段,而不是为了替代手工测试而出现的。&/p&&p&&b&13、使用了测试工具,就是进行了有效的测试&/b&&/p&&p&测试工具是为了协助测试工程师更高效的完成测试工作,是否能够有效测试,完全取决于使用工具的人的技术水平。水平强,则测试结果有参考价值,水平弱,则测试结果一塌糊涂。&/p&&p&建议大家还是要以手工测试为基础,工具只是为了提高测试效率,为了更好的完成测试工作,并不是用工具测试就一定有效。&/p&&p&&b&14、规范化软件测试是增加项目成本&/b&&/p&&p&一个软件测试过程如果不规范的话,结果一定不会很理想,规范严谨的测试过程,可以大大提高测试质量,这不是增加项目成本,而是减少了项目的隐患,甚至是上线后的损失。&/p&&p&一家不重视测试规范的公司,其产出的软件一定不会有太大的市场竞争力。其后果,也不应该由测试人员承担。&/p&&p&&b&15、期望短期通过增加软件测试投入,迅速达到零bug率&/b&&/p&&p&测试人员都应该知道一个原则,就是完全测试是不可能的,所谓的零BUG,就连阿里巴巴也做不到,并且软件测试是贯穿整个项目生命周期的,需要尽早的介入测试,如果在项目后期加大测试力度,也并不能有效的提高测试质量。因为测试人员没有时间理解软件的业务流程和接口逻辑。&/p&&p&&b&16、忽视需求阶段的参与&/b&&/p&&p&软件测试的开展一定是从需求阶段展开的。没有需求文档就无法衡量测试周期和测试范围,也就无法编写测试计划和测试用例,所以忽视需求阶段的参与,对于项目质量来说是灾难性的结果。&/p&&p&&b&17、忽视用户操作密集和核心功能的回归测试&/b&&/p&&p&很多人认为用户经常操作的地方就不会出现问题,但是一个项目更新后,很可能导致以前的核心功能受到了影响,新的代码对老的业务造成了破坏,所以说,回归测试一定不能忽视核心功能以及用户密集操作的模块。相反,应该重点回归!&/p&&p&&b&18、忽视软件测试建档&/b&&/p&&p&软件测试建档,指的是软件的测试记录是否有效的存储,是否可查询,如果测试不建档,那么测试报告就无从考察,测试结果也有没有了依据,所以测试建档是必要环节,不可忽略。&/p&&p&&b&19、软件开发完成之后进行软件测试&/b&&/p&&p&软件测试是贯穿整个项目生命周期的,必须要在需求阶段的时候介入,在单元测试完成后就进行集成测试也就是接口测试,这可以发现80%的软件缺陷。如果开发完成才介入测试,那么项目发布上线的时间即将会大大延长。而且很多问题修复成本也将会大大增加。&/p&&p&&b&20、软件发布如果发现质量问题,都是测试人员的错&/b&&/p&&p&很多人都觉得测试通过后,在用户使用时发现bug一定是测试人员没有测试到位而导致的,我曾经的工作中就经历过多次这类问题,但是测试人员坚持认为该功能缺失测试过,并且没有出现这类问题。后来经过本人的辩论终于找到了问题的原因,就是开发人员的疏忽导致封包封版时,没有保存最新代码导致问题出现。&/p&&p&首先,如果大家以后遇到这样的情况出现,千万不要心急如焚,手忙脚乱。要先确定该功能是否测试过,是否通过测试了。如果没有测试,那么毫无疑问测试背锅,如果测试通过还出现了问题,极有可能是开发人员封版时没有保存最新的代码而导致的。或者是开发人员在发布最终版本时擅自修改了部分代码。&/p&&p&&b&21、项目进度紧的时候少做些测试,时间富裕时多做测试&/b&&/p&&p&项目测试时间紧张的时候很容易出现测试不到位,测试不全面,导致发布后出现问题的情况,正常的处理办法,应该是使用敏捷测试方法,测试范围坚决不能缩水,测试用例可以忽略掉表单值域的用例,着重编写流程性测试用例。并且开发完成了一个模块,测试就测试一个模块,这样可以大大加快测试效率。本人很喜欢使用敏捷测试的方法,不仅可以减少测试时间,质量也不会打折扣。记住一点,敏捷测试一定要对人员进行明确的分工。避免重复性测试带来的效率降低。&/p&&p&&b&22、软件测试工作没有前途,只有程序员才是软件高手&/b&&/p&&p&相信很多人都认为测试没有开发人员厉害,这确实是市场现状,很多测试技术确实不如开发强,但是论前途,我觉得测试比开发更有挖掘潜力,测试的发展是多样化的,而且范围很广,薪资也完全不亚于开发人员。真正的全栈测试工程师,技术也绝不会输给开发,甚至超越开发。小编在工作中,也经常会遇到开发人员前来向我请教性能技术和自动化技术。&/p&&p&&b&23、软件测试就是保证软件无故障运行&/b&&/p&&p&软件测试不仅要保证软件无故障运行,更要保障软件的易用性,健壮性,稳定性,安全性,兼容性,用户体验等一系列的因素,所以单纯为了无故障则显得有些肤浅了。&/p&&p&&b&24、软件测试的环境就选用户的环境&/b&&/p&&p&软件测试分为三个环境,分别是“测试环境”、“HA环境”(准线上环境)、“线上环境”,用户环境指的是第三个“线上环境”,而测试的重点用该是在“测试环境”和“HA环境”中。用户环境中并不能随意提交数据进行测试,只能在最后beta验收阶段时才会采用这个环境的测试。&/p&&p&&b&25、开发人员更适合做软件测试&/b&&/p&&p&我们常常听到这样的问题:“为什么软件的开发者们不适合测试他们自己开发的软件?”事实上,软件开发人员测试自己所开发软件的行为就如同学生在完成考试试卷后再对自己的成绩进行评估。这种做法毫无意义&/p&&p&(1)开发人员对其所写代码有主观认同感&/p&&p&人们通常会对自己所犯错误视而不见或者拒绝承认。同样的,在软件开发领域,程序员们对待其开发的应用程序就像对待自己的孩子一样,拒绝承认自己的孩子有什么不好的地方。这就是为什么软件开发人员难于发现和改正自己的错误。&/p&&p&(2)开发人员对软件过于乐观的心态&/p&&p&开发人员进行开发的目标是将软件所需的功能完美的展现出来。当程序的功能运转正常的时候他们会自我感觉良好,因为他们的主要目标就是功能二字。而测试人员与他们想的却不一样。测试人员通常会从不同的角度切入进软件内部,打破程序员们惯有的思维方式,通过各种不同的测试用例把软件潜在的不足之处引发出来。&/p&&p&&b&26、bug越多测试越有效&/b&&/p&&p&测试Bug的数量并不能说明测试的有效性,反倒能说明开发人员的技术水平。测试bug数量多则改的代码就多,改的越多,越可能引发其他问题的出现,甚至到后期bug越来越多。原本没有问题的模块也开始出现问题。测试的有效性不能以发现bug的数量而决定,更应该根据问题的隐蔽性或严重性来决定。&/p&&p&&b&27、关注测试的执行而忽略了测试的设计&/b&&/p&&p&执行测试一定是按照提前设计好的方法进行的,测试的方法就是测试用例,如果不进行测试用例的设计,直接进行测试执行阶段,再强大的测试工程师也无法保证测试的全面性。相信大家都知道编写测试用例的原则,是100%的覆盖需求,可见测试设计阶段的重要性。&/p&&p&&b&28、测试是为了证明软件的正确性&/b&&/p&&p&测试不仅要证明软件的正确性,更应该证明软件是错的,测试人员不能只考虑正确的流程,往往出错最多的是逆向思维测试,反逻辑测试,违背常规的测试是最有效的测试,所以说测试不是为了证明软件的正确性,而是恰恰相反的证明软件的错误性。&/p&&figure&&img src=&https://pic2.zhimg.com/50/v2-8bb35b6581abfd61cab051_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&2625& data-rawheight=&3428& class=&origin_image zh-lightbox-thumb& width=&2625& data-original=&https://pic2.zhimg.com/50/v2-8bb35b6581abfd61cab051_r.jpg&&&/figure&&p&得有用的话,文章和图片都可以马起来留着以后用!上传的图片不清晰需要原图的记得找你猫哥我!&/p&&p&最后放个彩蛋。&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//pan.baidu.com/s/1hJWv584zM8RlkVVIilbSFg& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&软件测试视频、教程资料大合集&/a&,密码:hlcy&/p&&p&走过路过的可以给点个赞哦!猫哥谢谢你们!&/p&&p&推荐阅读:&/p&&a href=&https://www.zhihu.com/question//answer/& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic3.zhimg.com/v2-fbd16f50fe642e0d7054fa_180x120.jpg& data-image-width=&2160& data-image-height=&656& class=&internal&&二十五岁零基础转行软件测试怎么样?这个行业前景好吗?&/a&&a href=&https://www.zhihu.com/question//answer/& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic4.zhimg.com/v2-09d434f186b1ea8f3f694b_120x160.jpg& data-image-width=&1855& data-image-height=&4096& class=&internal&&软件测试,如何工资过万?&/a&&a href=&https://www.zhihu.com/question//answer/& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic1.zhimg.com/v2-f47a015bea42ce41dcc804f02dx120.jpg& data-image-width=&1774& data-image-height=&706& class=&internal&&作为一名软件测试人员,有哪些网站是你应该多多关注的,哪些书籍是你必须要看的?&/a&
首先,表面上是这样的,但是本质上并不是,想知道原因,我用一篇文章告诉你看到的都是表象。很多小公司对于测试的流程和要求并不是很高,就更加显得测试比开发的要求低。即使说经过这几年的发展,测试行业已经比以前成熟和正规许多,但是你拦不住很多公司并…
source insight 的优势在于极低的资源消耗、准确完善的代码解析和理解查看功能、以及很高的性能之间达到了一个很好的平衡。对于很多大公司的巨大代码库,新员工都是使用 source insigh 来review 和理解代码的,这个场景很难有其他工具来取代 source insight。
source insight 的优势在于极低的资源消耗、准确完善的代码解析和理解查看功能、以及很高的性能之间达到了一个很好的平衡。对于很多大公司的巨大代码库,新员工都是使用 source insigh 来review 和理解代码的,这个场景很难有其他工具来取代 source insight。
--更新--&br&有人吐槽怎么下手FreeNOS,上文档 &a href=&//link.zhihu.com/?target=http%3A//www.freenos.org/doxygen/index-2.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&FreeNOS: FreeNOS Documentation&/a&&br&--更新--&br&&br&把平时关注的一些c++相关的github的project列下,欢迎补充。&br&&br&&b&1. FreeNOS&/b&&br&&a href=&//link.zhihu.com/?target=https%3A//github.com/lordsergioinspa/FreeNOS& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&lordsergioinspa/FreeNOS · GitHub&/a&&br&&br&这是我在大学的时候,接触完整学习的第一个开源的C++项目,当时简直是,各种惊叹,里面有太多值得学习的地方。&br&这是一个用C++实现的微内核的操作系统,各种宏内核中的服务作为一个独立的services在微内核中,基于消息的通信方式,这点其实跟mac内核中的mach那部分机制相似。&br&除了是一个操作系统的实现,另外从中也能很好的学习到OOP的设计方式,整个代码风格特别好,完全基于面相对象,还有一些常见的设计模式,在接触了这个开源项目之后,才了解,代码风格,注释,doxygen,scons,设计模式。&br&&br&对于直接入手就啃Linux kernel的同学,个人觉得会门槛有点高,身体还不是特别棒的时候,直接攀登珠穆拉玛还是有点吃力的,可以先找个黄山爬爬。&br&&br&&b&2. Chromium&/b&&br&向左向右,怎么看现在只有Chromium是c++中最庞大的一个,自己在造轮子的时候,可以搜索下这个宝库,保证有各种型号的轮子。&br&Chromium涉及了几乎所有的平台,所以不仅能学到平台之上API的封装,还有包括Network的各种封装和借口,协议的C++的实现。&br&更甚至,webrtc,native client,sandbox,GPU,并行加速,debug,各种神奇的第三方的库,各种各样的技术,能潜心学深一个,就可以功力大增。&br&&br&&br&有空在补充。。。&br&&br&////////////////////updated 2.28///////////////////////////&br&&br&&b&3. Node.js&/b&&br&红的发紫的项目,整个node.js 包括内部的核心V8都是C++的项目,完全的事件驱动,非阻塞IO,性能比nginx还快,可以说是把服务器彻底的榨干的节奏,这种设计模式,是现在比较流行的&a href=&//link.zhihu.com/?target=http%3A//en.wikipedia.org/wiki/Reactor_pattern& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Reactor pattern&/a& ,concurrent computing。在构建一些大型的web services中,尤其凸显优势,现在移动互联网时代,在做app push services的时候,后端自己实现的推送服务,基本也是这种思路,&a href=&//link.zhihu.com/?target=http%3A//mosquitto.org& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&An Open Source MQTT v3.1 Broker&/a& 并发量能到几十万,甚至对内核参数修改过后能到上百万。&br&Node.js另一个核心的组建是Marc Lehmann’s libev &a href=&//link.zhihu.com/?target=http%3A//libev.schmorp.de& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&libev.schmorp.de&/span&&span class=&invisible&&&/span&&/a& , 基于event驱动的非阻塞IO库,在node-v0.9.0之后,node.js项目考虑到跨平台的实现,封装了一个项目&a href=&//link.zhihu.com/?target=https%3A//github.com/libuv/libuv& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&libuv/libuv · GitHub&/a&, &br&&ul&&li&Linux based on (epoll)&br&&/li&&li&windows based on IOCP&/li&&li&Unix (mac os x) based on kevent&/li&&/ul&学习下,也能用在自己做不同平台高性能网络&br&&br&&br&////////////////////updated 3.1///////////////////////////&br&收到好多点赞,对于每天风平浪静,只期待不给我弹error的生活,带来些小激动的。&br&平时喜欢接触一些新鲜的概念,产品,可能这也是自己选择这个行业的一个原因,虽没有一日如隔三秋的变化速度,但至少三月都会蹦出很多新奇的trend,技术,方向。总有一种学无止境的感觉,对于C++来说,基础的东西变化不大,哪怕是新的标准C++0x,我的理解是实践动手,如果有项目能去应用。&br&知识爆炸,我们可能无法穷尽学习所有的知识,但是可以通过github这个平台完善属于自己的知识wiki,觉得未来应该是。&br&看小说,看电影,看code。&br&这样一个进去我们习惯的行为。&br&废话太多~~~&br&&br&&b&4. Sandstorm&/b&&br&&a href=&//link.zhihu.com/?target=https%3A//github.com/sandstorm-io/sandstorm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&sandstorm-io/sandstorm · GitHub&/a&&br&Github上面最近比较火的一个项目,主页上面一句话的介绍“Personal Cloud Sandbox”。主要解决的问题是,在自己的私有人服务器上面,安装各种开源的云服务(GitLab, WordPress......),就像mobile上面的通过应用商店install app那样快速方便,实现这个目标,要在Linux之上,构建一个基于sandbox的平台,并且留给开发者porting这些web 服务 (.spk file)到应用商店。&br&个人觉得比较精华的是里面sandbox部分,每个web app都是跑在LXC的container里面的,这点是类似Docker的实现,非常高效和轻量。另外会用到seccomp机制,对web app进行系统调用过滤,保障云主机本身的安全,这一点sandbox的安全机制跟chrome在Linux上面的实现也是一致的。&br&&ul&&li&Sandstorm's server-side sandboxing is based on the same underlying Linux kernel features as LXC and Docker. We use the system calls directly for finer-grained control.&br&&/li&&li&(Planned) The kernel attack surface is reduced using seccomp-bpf to block and/or virtualize system calls.&br&&/li&&/ul&&br&&br&////////////////////updated 3.2///////////////////////////&br&昨天被柴女神刷屏了,其实我们在用C++的时候,也是在为环境作贡献,&br&C++之父在YouTube上面的视频,C++在数据中心的使用,高性能的优势,节省不少电。&br&&figure&&img src=&https://pic2.zhimg.com/50/7a37bcbbf3b4ed59f0578_b.jpg& data-rawwidth=&511& data-rawheight=&337& class=&origin_image zh-lightbox-thumb& width=&511& data-original=&https://pic2.zhimg.com/50/7a37bcbbf3b4ed59f0578_r.jpg&&&/figure&&br&&br&&b&5. BitCoin&/b&&br&&a href=&//link.zhihu.com/?target=https%3A//github.com/bitcoin/bitcoin& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&bitcoin/bitcoin · GitHub&/a&&br&BitCoin这两年很火,抛开比特币本身,看BitCoin实现,也是C++的项目,构建在P2P网络之上的一套虚拟的支付系统。&br&我们可以利用的是背后的P2P Protocol,密码学,支付,去中心化这些。&br&现在有很多衍生的开源项目,就是利用BitCoin 的这套P2P的框架在做,bitmessage,&br&&a href=&//link.zhihu.com/?target=https%3A//bitmessage.org/wiki/Main_Page& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&bitmessage.org/wiki/Mai&/span&&span class=&invisible&&n_Page&/span&&span class=&ellipsis&&&/span&&/a&&br&完全去中心化,能防止老大哥的监听,在现在云计算,大数据风行的时代,privacy问题会越来越多,可以借鉴P2P的思路,构建这些去中心化的服务。&br&&br&&br&////////////////////updated 3.3///////////////////////////&br&&b&6. CoreCLR&/b&&br&&a href=&//link.zhihu.com/?target=https%3A//github.com/dotnet/coreclr& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&dotnet/coreclr · GitHub&/a&&br&没看错,微软最近一直在放大招,之前开放了 .NET Core的源代码,这次又把.NET的CoreCLR推到了GitHub。在Windows上运行一个.NET应用所需要的完整软件栈都已经开源,对Linux和Mac OS X的支持马上出来。微软.NET因为整个软件栈全部开源。开发者可以编译自己的CoreCLR,在上面跨平台运行.NET程序。&br&以前Mono做的就是这个事情。对语言,编译,相关感兴趣的可以学习学习,背后开放了RyuJIT,garbage collection等一些技术。&br&微软从产品公司变成服务公司,重点放在企业级市场,对桌面这块越来越开放,节奏很好。&br&&br&对.net不是很了解,拿来抛砖引玉。&br&&br&&br&////////////////////updated 3.4///////////////////////////&br&&b&7. Apache Mesos&/b&&br&&a href=&//link.zhihu.com/?target=https%3A//github.com/apache/mesos& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&apache/mesos · GitHub&/a&&br&简单介绍 下Mesos, 是twitter背后开源群集管理的核心,现在是apache上的top项目了。&br&下面是Mesos的architecture&br&&figure&&img src=&https://pic4.zhimg.com/50/b509d620ff61e_b.jpg& data-rawwidth=&1408& data-rawheight=&675& class=&origin_image zh-lightbox-thumb& width=&1408& data-original=&https://pic4.zhimg.com/50/b509d620ff61e_r.jpg&&&/figure&有家云计算创业公司Mesosphere,正在将这一技术推向一个更广的高度,可以通过mesos构建的节点,抽象各个public cloud服务商,更可以方便快速的做云迁移,从AWS可以到GCE。&br&提到Mesos就会出现这样的组合,&br&&u&Mesos + Docker&/u&&br&Docker(可能跑题了,Docker是用Go写的)是PaaS供应商dotCloud开源的一个基于LXC 的Container引擎,虚拟化解决方案上面杀出的一个新马。常见的搭配如下,Docker是 Mesos 的first class citizen。&br&&figure&&img src=&https://pic2.zhimg.com/50/5c3cd6246958_b.jpg& data-rawwidth=&638& data-rawheight=&359& class=&origin_image zh-lightbox-thumb& width=&638& data-original=&https://pic2.zhimg.com/50/5c3cd6246958_r.jpg&&&/figure&&br&&br&技术 日新月异,是个好时代,别人造的轮子越来越好了,一直有东西学,蛮开心。&br&&br&&br&////////////////////updated 3.5///////////////////////////&br&8. Mongo Database&br&&a href=&//link.zhihu.com/?target=https%3A//github.com/mongodb/mongo& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&mongodb/mongo · GitHub&/a&&br&NoSQL, BigData&br&&br&9. DOOM-3&br&&a href=&//link.zhihu.com/?target=https%3A//github.com/id-Software/DOOM-3& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&id-Software/DOOM-3 · GitHub&/a&&br&最牛的游戏engine code&br&还有一个cocos2d-x&br&&a href=&//link.zhihu.com/?target=https%3A//github.com/cocos2d/cocos2d-x& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&cocos2d/cocos2d-x · GitHub&/a&&br&&a href=&//link.zhihu.com/?target=https%3A//github.com/Itseez/opencv& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Itseez/opencv · GitHub&/a&&br&&br&10. HHVM&br&&a href=&//link.zhihu.com/?target=https%3A//github.com/facebook/hhvm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&facebook/hhvm · GitHub&/a&&br&编译,JIT&br&&br&&br&&br&&br&欢迎交流讨论~
--更新-- 有人吐槽怎么下手FreeNOS,上文档
--更新-- 把平时关注的一些c++相关的github的project列下,欢迎补充。 1. FreeNOS
这是我在大学的时候,接触完整学习的第一个开源的C…
有一些比较好的开源框架可以学习,比如:&br&&ul&&li&Libevent&br&&/li&&/ul&&p&libevent是一个开源的事件驱动库,基于epoll,kqueue等OS提供的基础设施。其以高效出名,它可以将IO事件,定时器,和信号统一起来,统一放在事件处理这一套框架下处理。基于Reactor模式,效率较高,并且代码精简(4.15版本8000多行),是学习事件驱动编程的很好的资源。&/p&&p&下载链接:&a href=&//link.zhihu.com/?target=https%3A//github.com/libevent/libevent& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GitHub - libevent/libevent&/a&&/p&&br&&ul&&li&Webbench&/li&&/ul&&p&Webbench是一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力。Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行。&/p&&p&下载链接:&a href=&//link.zhihu.com/?target=https%3A//github.com/LippiOuYang/WebBench& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&https://github.com/EZLippi/WebBench&/a&&/p&&br&&ul&&li&Memcached&br&&/li&&/ul&&p&Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态数据库驱动网站的速度。Memcached 基于一个存储键/值对的 hashmap。Memcached-1.4.7的代码量还是可以接受的,只有10K行左右。&/p&&p&下载地址:&a href=&//link.zhihu.com/?target=http%3A//memcached.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&memcached - a distributed memory object caching system&/a&&/p&&br&&ul&&li&SQLite&br&&/li&&/ul&&p&SQLite是一个开源的嵌入式关系数据库,实现自包容、零配置、支持事务的SQL数据库引擎。 其特点是高度便携、使用方便、结构紧凑、高效、可靠。足够小,大致3万行C代码,250K。&/p&&p&下载地址:&a href=&//link.zhihu.com/?target=http%3A//www.sqlite.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&SQLite Home Page&/a& 。&/p&&ul&&li&Boost.Asio &br&&/li&&/ul&它是异步输入输出的核心。 名字本身就说明了一切:Asio 意即异步输入/输出。该库可以让 C++ 异步地处理数据,且平台独立。异步数据处理就是指,任务触发后不需要等待它们完成。相反,Boost.Asio 会在任务完成时触发一个应用。异步任务的主要优点在于,在等待任务完成时不需要阻塞应用程序,可以去执行其它任务。&br&链接:&a href=&//link.zhihu.com/?target=http%3A//www.boost.org/doc/libs/1_58_0/doc/html/boost_asio.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Boost.Asio - 1.58.0&/a&&br&&ul&&li&Tinyhttpd&br&&/li&&/ul&&p&tinyhttpd是一个超轻量型Http Server,使用C语言开发,全部代码只有502行(包括注释),附带一个简单的Client,可以通过阅读这段代码理解一个 Http Server 的本质。&/p&&p&下载链接:&a href=&//link.zhihu.com/?target=https%3A//github.com/LippiOuYang/Tinyhttpd& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&https://github.com/EZLippi/Tinyhttpd&/a&&/p&&ul&&li&cJSON&br&&/li&&/ul&&p&cJSON是C语言中的一个JSON编解码器,非常轻量级,C文件只有500多行,速度也非常理想。&/p&&p&cJSON也存在几个弱点,虽然功能不是非常强大,但cJSON的小身板和速度是最值得赞赏的。其代码被非常好地维护着,结构也简单易懂,可以作为一个非常好的C语言项目进行学习。&/p&&p&项目主页:&a href=&//link.zhihu.com/?target=http%3A//sourceforge.net/projects/cjson/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&cJSON | SourceForge.net&/a&&/p&&br&&p&可以看看&a href=&//link.zhihu.com/?target=http%3A//www.ezlippi.com/blog/2014/12/c-open-project.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&值得推荐的C/C++框架和&/a&&/p&
有一些比较好的开源框架可以学习,比如: Libevent libevent是一个开源的事件驱动库,基于epoll,kqueue等OS提供的基础设施。其以高效出名,它可以将IO事件,定时器,和信号统一起来,统一放在事件处理这一套框架下处理。基于Reactor模式,效率较高,并且代…
&figure&&img src=&https://pic3.zhimg.com/v2-bc4e6ba35_b.jpg& data-rawwidth=&1200& data-rawheight=&800& class=&origin_image zh-lightbox-thumb& width=&1200& data-original=&https://pic3.zhimg.com/v2-bc4e6ba35_r.jpg&&&/figure&&p&学习编程专栏连载编程新手练手项目系列之C/C++项目篇,同样也欢迎热爱学习、对Java、Python、前端感兴趣的朋友学习翻阅上三两篇内容。(欢迎大家进行项目的投稿)&/p&&p&此C/C++篇为&a class=& wrap external& href=&http://link.zhihu.com/?target=https%3A//www.shiyanlou.com/& target=&_blank& rel=&nofollow noreferrer&&实验楼 - 国内领先的IT技术实训平台&/a&供稿篇&br&&/p&&a class=&internal& href=&https://zhuanlan.zhihu.com/p/?refer=passer&&有哪些适合新手练手的Java项目?&/a&&br&&a href=&https://zhuanlan.zhihu.com/p/?refer=passer& class=&internal&&有哪些适合新手练手的Java Web项目?&/a&&a href=&https://zhuanlan.zhihu.com/p/?refer=passer& class=&internal&&有哪些适合新手练手的Python项目?&/a&&a class=&internal& href=&https://zhuanlan.zhihu.com/p/?refer=passer&&有哪些适合新手练手的前端项目?&/a&&figure&&img data-rawheight=&120& data-rawwidth=&1200& src=&https://pic2.zhimg.com/v2-d390fbb17e6c797ac215b9_b.jpg& class=&origin_image zh-lightbox-thumb& width=&1200& data-original=&https://pic2.zhimg.com/v2-d390fbb17e6c797ac215b9_r.jpg&&&/figure&&br&&p&&figure&&img data-rawheight=&120& data-rawwidth=&1200& src=&https://pic2.zhimg.com/v2-03d57cfcac91e749a52c331fdb3f47e5_b.jpg& class=&origin_image zh-lightbox-thumb& width=&1200& data-original=&https://pic2.zhimg.com/v2-03d57cfcac91e749a52c331fdb3f47e5_r.jpg&&&/figure&1、(免费项目) &a class=& wrap external& href=&http://link.zhihu.com/?target=https%3A//www.shiyanlou.com/courses/75& target=&_blank& rel=&nofollow noreferrer&&C/C++ - C语言制作简单计算器&/a&&br&&/p&&figure&&img data-rawheight=&246& data-rawwidth=&600& src=&https://pic1.zhimg.com/v2-e9fb4e67b5b8_b.png& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&https://pic1.zhimg.com/v2-e9fb4e67b5b8_r.jpg&&&/figure&&p&2、(会员项目) &a href=&http://link.zhihu.com/?target=https%3A//www.shiyanlou.com/courses/125& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&C/C++ - C语言实现通讯录&/a&&/p&&p&项目使用 C 语言完成一个简单的通讯录。会涉及到结构体、数组、链表等重要概念。此项目为实验楼会员可做实验,大家如若不想充值,同样可以在网络上寻找实例:&/p&&p&代码+注释:&a class=& wrap external& href=&http://link.zhihu.com/?target=http%3A//www.oschina.net/code/snippet_81%3F_t_t_t%3D0.5749& target=&_blank& rel=&nofollow noreferrer&&C语言做的简单的手机通讯录系统&/a&&br&&/p&&p&&figure&&img data-rawheight=&266& data-rawwidth=&553& src=&https://pic3.zhimg.com/v2-556d3ad18f693b37c37a25780cdbf202_b.png& class=&origin_image zh-lightbox-thumb& width=&553& data-original=&https://pic3.zhimg.com/v2-556d3ad18f693b37c37a25780cdbf202_r.jpg&&&/figure&3、(免费项目) &a class=& wrap external& href=&http://link.zhihu.com/?target=https%3A//www.shiyanlou.com/courses/315& target=&_blank& rel=&nofollow noreferrer&&C/C++ - C语言利用epoll实现高并发聊天室&/a&&/p&&p&项目实现客户端和服务端编程,服务端使用epoll机制,高并发必备,支持多客户聊天室聊天;客户端使用epoll和fork,父进程与子进程通过pipe通信。
&/p&&p&&figure&&img data-rawheight=&436& data-rawwidth=&718& src=&https://pic3.zhimg.com/v2-777dfa423f870ac529ac483d0583b5ba_b.png& class=&origin_image zh-lightbox-thumb& width=&718& data-original=&https://pic3.zhimg.com/v2-777dfa423f870ac529ac483d0583b5ba_r.jpg&&&/figure&4、(免费项目) &a class=& wrap external& href=&http://link.zhihu.com/?target=https%3A//www.shiyanlou.com/courses/126& target=&_blank& rel=&nofollow noreferrer&&C语言编写万年历&/a&&/p&&p&使用 C 语言完成一个简单的日历功能。输入相应的年/月即可看到当月的日历。 &figure&&img data-rawheight=&350& data-rawwidth=&797& src=&https://pic1.zhimg.com/v2-496ab6c9ffebd991b24fc_b.png& class=&origin_image zh-lightbox-thumb& width=&797& data-original=&https://pic1.zhimg.com/v2-496ab6c9ffebd991b24fc_r.jpg&&&/figure&&br&&/p&&figure&&img data-rawheight=&120& data-rawwidth=&1200& src=&https://pic2.zhimg.com/v2-fe469e77d55aa4b9ec887f33d6fdab4d_b.jpg& class=&origin_image zh-lightbox-thumb& width=&1200& data-original=&https://pic2.zhimg.com/v2-fe469e77d55aa4b9ec887f33d6fdab4d_r.jpg&&&/figure&5、(免费项目) &a class=& wrap external& href=&http://link.zhihu.com/?target=https%3A//www.shiyanlou.com/courses/155& target=&_blank& rel=&nofollow noreferrer&&C/C++ - C语言制作2048&/a&&figure&&img data-rawheight=&315& data-rawwidth=&398& src=&https://pic3.zhimg.com/v2-415c6de2b612970beab8e7de9fe898f6_b.png& class=&content_image& width=&398&&&/figure&6、(免费项目) &a class=& wrap external& href=&http://link.zhihu.com/?target=https%3A//www.shiyanlou.com/courses/146& target=&_blank& rel=&nofollow noreferrer&&C/C++ - C语言版flappy_bird&/a&&figure&&img data-rawheight=&446& data-rawwidth=&770& src=&https://pic3.zhimg.com/v2-a7923d82bfba83ae8dba2aa2d970e02a_b.png& class=&origin_image zh-lightbox-thumb& width=&770& data-original=&https://pic3.zhimg.com/v2-a7923d82bfba83ae8dba2aa2d970e02a_r.jpg&&&/figure&7、(免费项目) &a href=&http://link.zhihu.com/?target=https%3A//www.shiyanlou.com/courses/116& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&C语言版扫雷游戏&/a&&figure&&img data-rawheight=&266& data-rawwidth=&685& src=&https://pic4.zhimg.com/v2-94dd909a39cfcbf_b.png& class=&origin_image zh-lightbox-thumb& width=&685& data-original=&https://pic4.zhimg.com/v2-94dd909a39cfcbf_r.jpg&&&/figure&8、(免费项目) &a class=& wrap external& href=&http://link.zhihu.com/?target=https%3A//www.shiyanlou.com/courses/313& target=&_blank& rel=&nofollow noreferrer&&C/C++ - C语言快速实现五子棋&/a&&figure&&img data-rawheight=&352& data-rawwidth=&632& src=&https://pic3.zhimg.com/v2-4be4dcb1c99b4ab4eea9a_b.png& class=&origin_image zh-lightbox-thumb& width=&632& data-original=&https://pic3.zhimg.com/v2-4be4dcb1c99b4ab4eea9a_r.jpg&&&/figure&&br&&figure&&img data-rawheight=&120& data-rawwidth=&1200& src=&https://pic3.zhimg.com/v2-c155ac6e1af5e268d3982a_b.jpg& class=&origin_image zh-lightbox-thumb& width=&1200& data-original=&https://pic3.zhimg.com/v2-c155ac6e1af5e268d3982a_r.jpg&&&/figure&&a class=& wrap external& href=&http://link.zhihu.com/?target=https%3A//www.shiyanlou.com/courses/190& target=&_blank& rel=&nofollow noreferrer&&C/C++ - C语言实现一个支持PHP的简易WEB服务器&/a&&p&用C语言实现一个简易的WEB服务器,并能支持动态解析PHP程序。主要涉及到的技术有:Linux Socket编程,HTTP协议(只实现GET请求),Fast-CGI协议。&/p&&a class=& wrap external& href=&http://link.zhihu.com/?target=https%3A//www.shiyanlou.com/courses/305& target=&_blank& rel=&nofollow noreferrer&&C/C++ - C语言实现ping程序&/a&&p&项目用C语言实现ping命令。通过项目可以更深入地理解TCP/IP协议,掌握C语言进行网络编程的技巧方法。&/p&&a href=&http://link.zhihu.com/?target=https%3A//www.shiyanlou.com/courses/613& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&C/C++ - C语言实现 Linux 网络嗅探器&/a&&p&项目通过原生套接字的方式,监听所有本地主机收发的数据链路层帧结构,然后解析数据包的类型,并记录到日志文件。实现一个轻量级的网络嗅探器。&/p&&a class=& wrap external& href=&http://link.zhihu.com/?target=https%3A//www.shiyanlou.com/courses/582& target=&_blank& rel=&nofollow noreferrer&&C/C++ - C语言实现文件类型统计程序&/a&&p&通过实现一个文件类型统计程序,对Linux的文件系统有一个更加深入的了解,尤其在文件类型的判断,目录的操作上的理解会加深。&/p&&a class=& wrap external& href=&http://link.zhihu.com/?target=https%3A//www.shiyanlou.com/courses/603& target=&_blank& rel=&nofollow noreferrer&&C/C++ - C 语言实现多线程排序&/a&&p&项目在 Linux 环境下使用 C 语言多线程模型实现了排序算法,通过该项目的学习,可以理解并实践 Linux 环境的编程基础及多线程模型。&/p&&figure&&img data-rawheight=&120& data-rawwidth=&1200& src=&https://pic3.zhimg.com/v2-ce591cdb216c2f0d21b0f766_b.jpg& class=&origin_image zh-lightbox-thumb& width=&1200& data-original=&https://pic3.zhimg.com/v2-ce591cdb216c2f0d21b0f766_r.jpg&&&/figure&&p&实验楼上有很多C++的实战项目,从简单到进阶,学习每个项目都可以掌握相应的知识点。如果你还是C++新手的话,那么这个C++的项目列表你可以拿去练手实战开发,毕竟学编程动手实践是少不了的!如果你不知道C++可以用来做哪些项目,可以应用在哪些地方,那么你可以通过这个列表,看看C++可以做什么!&/p&&p&&b&C++项目列表&/b&&/p&&p&1、(免费项目)&a class=& wrap external& href=&http://link.zhihu.com/?target=https%3A//www.shiyanlou.com/courses/558& target=&_blank& rel=&nofollow noreferrer&&C/C++ - C++ 实现太阳系行星系统&/a&&/p&&p&项目使用 C++实现 OpenGL GLUT 实现一个简单的太阳系行星系统,将涉及一些三维图形技术的数学基础、OpenGL 里的三维坐标系、OpenGL 里的光照模型、GLUT 的键盘事件处理。 &br&&/p&&p&&figure&&img data-rawheight=&401& data-rawwidth=&697& src=&https://pic1.zhimg.com/v2-eb9ed885feac4f38368fd0_b.png& class=&origin_image zh-lightbox-thumb& width=&697& data-original=&https://pic1.zhimg.com/v2-eb9ed885feac4f38368fd0_r.jpg&&&/figure&2、(会员项目) &a class=& wrap external& href=&http://link.zhihu.com/?target=https%3A//www.shiyanlou.com/courses/557& target=&_blank& rel=&nofollow noreferrer&&C/C++ - C++ 实现银行排队服务模拟&/a&&/p&&p&一个类似但是免费的项目地址: &a href=&http://link.zhihu.com/?target=http%3A//www.cnblogs.com/carsonzhu/p/5528901.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&小项目分析之C++ 实现模拟银行排队&/a&&br&&/p&&p&项目使用 C++对银行排队服务进行模拟,以事件驱动为核心思想,手动实现模板链式队列、随机数产生器等内容,进而学习概率编程等知识。作为可选进阶,这个模型同时还能稍加修改的应用到 CPU 资源争夺模型中。
&/p&&figure&&img data-rawheight=&290& data-rawwidth=&965& src=&https://pic2.zhimg.com/v2-06af4f89010eecbb2a5579_b.png& class=&origin_image zh-lightbox-thumb& width=&965& data-original=&https://pic2.zhimg.com/v2-06af4f89010eecbb2a5579_r.jpg&&&/figure&&br&3、(会员项目)
&a class=& wrap external& href=&http://link.zhihu.com/?target=https%3A//www.shiyanlou.com/courses/565& target=&_blank& rel=&nofollow noreferrer&&C/C++ - 100 行 C++ 代码实现线程池&/a& 一个类似但是免费的项目地址: &a href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/michael_kong_nju/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&C++实现线程池&/a&&br& 项目使用 C++ 及大量 C++11新特性设计并实现一个线程池库。 &br&&figure&&img data-rawheight=&573& data-rawwidth=&1038& src=&https://pic4.zhimg.com/v2-42c8bd222b69e77b0505a7_b.png& class=&origin_image zh-lightbox-thumb& width=&1038& data-original=&https://pic4.zhimg.com/v2-42c8bd222b69e77b0505a7_r.jpg&&&/figure&&br&&p&4、(会员项目)
&a class=& wrap external& href=&http://link.zhihu.com/?target=https%3A//www.shiyanlou.com/courses/559& target=&_blank& rel=&nofollow noreferrer&&C/C++ - C++实现第一人称射击游戏&/a&&/p&&p&一个类似但是免费的项目地址:&a class=& wrap external& href=&http://link.zhihu.com/?target=http%3A//blog.csdn.net/archimekai/article/details/& target=&_blank& rel=&nofollow noreferrer&&飞行射击游戏的C++实现:一次课程作业&/a&&/p&&p&项目使用C++和 OpenGL 实现一个第一人称射击类游戏,涉及键盘鼠标的处理、三维视角变换处理、素材加载渲染等。&/p&&p&5、(免费项目) &a class=& wrap external& href=&http://link.zhihu.com/?target=https%3A//www.shiyanlou.com/courses/568& target=&_blank& rel=&nofollow noreferrer&&C/C++ - C++ 开发 Web 服务框架&/a&&/p&&p&服务器开发中 Web 服务是一个基本的代码单元,将服务端的请求和响应部分的逻辑抽象出来形成框架,能够做到最高级别的框架级代码复用。项目将综合使用 C++11 及 Boost 中的 Asio 实现 HTTP 和 HTTPS 的服务器框架。&/p&&p&6、 &a class=& wrap external& href=&http://link.zhihu.com/?target=https%3A//www.shiyanlou.com/courses/569& target=&_blank& rel=&nofollow noreferrer&&C/C++ - C++ 打造 Markdown 解析器&/a&&/p&&p&Markdown 几乎成为了程序员编写文档的标配,Markdown 的相关语法简单,解析 Markdown 文本能够加深日后编写编译器中词法分析的理解,本项目将使用 C++ 实现 Markdown 解析器,并将解析的内容生成为 HTML。&/p&&figure&&img data-rawheight=&260& data-rawwidth=&680& src=&https://pic1.zhimg.com/v2-fbc2dcc0a2d68_b.png& class=&origin_image zh-lightbox-thumb& width=&680& data-original=&https://pic1.zhimg.com/v2-fbc2dcc0a2d68_r.jpg&&&/figure&
学习编程专栏连载编程新手练手项目系列之C/C++项目篇,同样也欢迎热爱学习、对Java、Python、前端感兴趣的朋友学习翻阅上三两篇内容。(欢迎大家进行项目的投稿)此C/C++篇为供稿篇
&p& 话不多说,直接上一波走心的干货:&/p&&ol&&li&&a href=&//link.zhihu.com/?target=https%3A//www.shiyanlou.com/courses/185& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Java开发简单的计算器&/a& &/li&&li&&a href=&//link.zhihu.com/?target=https%3A//www.shiyanlou.com/courses/54& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&结合七牛搭建个人相册&/a& &/li&&li&&a href=&//link.zhihu.com/?target=https%3A//www.shiyanlou.com/courses/328& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&纯 CSS 打造网页版「大白」&/a&&/li&&li&&a href=&//link.zhihu.com/?target=https%3A//www.shiyanlou.com/courses/197& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&基于 JavaScript 实现玫瑰花&/a& &/li&&li&&a href=&//link.zhihu.com/?target=https%3A//www.shiyanlou.com/courses/361& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&基于HTML5 Canvas实现小游戏&/a& &/li&&li&&a href=&//link.zhihu.com/?target=https%3A//www.shiyanlou.com/courses/161& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&网页版拼图游戏&/a& &/li&&li&&a href=&//link.zhihu.com/?target=https%3A//www.shiyanlou.com/courses/306& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&网页版别踩白块游戏&/a& &/li&&li&&a href=&//link.zhihu.com/?target=https%3A//www.shiyanlou.com/courses/321& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&校花评比排名项目&/a& &/li&&li&&a href=&//link.zhihu.com/?target=https%3A//www.shiyanlou.com/courses/702& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&手把手教你实现 Google 浏览器拓展插件&/a& &/li&&li&&a href=&//link.zhihu.com/?target=https%3A//www.shiyanlou.com/courses/62& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&网页版2048&/a& &/li&&li&&a href=&//link.zhihu.com/?target=https%3A//www.shiyanlou.com/courses/133& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&基于 HTML5 实现刮刮乐效果&/a&&/li&&li&&a href=&//link.zhihu.com/?target=https%3A//www.shiyanlou.com/courses/113& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Java和WebSocket开发网页聊天室&/a& &/li&&li&&a href=&//link.zhihu.com/?target=https%3A//www.shiyanlou.com/courses/930& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Java实现个人博客&/a& &/li&&li&&a href=&//link.zhihu.com/?target=https%3A//www.shiyanlou.com/courses/260& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Java 实现日记软件&/a& &/li&&li&&a href=&//link.zhihu.com/?target=https%3A//www.shiyanlou.com/courses/160& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Java实现MD5文件校验&/a& &/li&&li&&a href=&//link.zhihu.com/?target=https%3A//www.shiyanlou.com/courses/576& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Java实现简单的支付平台业务流程&/a& &/li&&li&&a href=&//link.zhihu.com/?target=https%3A//www.shiyanlou.com/courses/824& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&SSM + easyUI 搭建简易的人事管理系统&

我要回帖

更多关于 软件移动到sd卡 的文章

 

随机推荐