怎样写一个程序能够输入输出设备209输出235

《老何的1001夜》,Qunar小伙伴们都懂的前言这个问题其实可以这么问,我想用最快的方法写一个自己的 tcp socket 服务器,测试一些东西,应该如何实现?或者是:我能用脚本实现一个最简单的http server吗?这是一个相对现在的小年轻稍微有些挑战的话题,不过对老*nix用户来说,这个是一个很简单的实现。所以我抛出来,先提问,然后给出实现,看看shell、脚本、Unix的魅力和威力。分析unix 环境里的shell、各种脚本语言的功能非常齐全,可以干很多的事情。最擅长的事情是处理文件。这里的文件包括标准输入和标准输出。尤其是在管道中,shell的强悍无与伦比。那么我们按照这个逻辑,可以这样设想:写一个文件处理的脚本这个脚本从标准输入读取请求这个脚本向标准输出写出响应这样就有了一个像TCP服务器的处理程序了,那么,我们有什么办法处理来自 tcp socket的数据,并且吧它重定向到一个程序的标准输入输出吗?答案是有的。这就是我们下面实现部分要介绍的东西。实现在 Unix 世界里,有个叫 inetd 的东西(维基百科介绍inetd )。这个东西,是可以把一个tcp socket的数据流,重新定向到一个命令的标准输入和标准输出的”超级进程“。这个超级进程是如此NB,以至于大多数ftp服务器,都是它启动的。实例inetd以下操作均需要root权限,所以,最好在自己的机器上试验。配置 /etc/services在文件末位添加下面行:laser 54321/tcp
#laser test配置 /etc/inetd.conf在文件末位添加下面行:# laser test
laser stream tcp nowait root /root/laser.sh axinetd有很多系统,尤其是 RPM、deb包管理系列的 Linux 发行版,已经开始用 xinetd 替换 inetd,xinetd 的配置文件稍微有点区别,等我找到一个机器来给大家举例。在 /etc/xinetd.d/ 目录中添加文件书写简单的小应用代码#! /bin/bash
echo & hello $A!&;把文件保存为 /root/laser.sh。然后:chmod +x /root/laser.sh重启服务针对不同系统,可以:sudo killall -HUP inetd或者/etc/rc.d/rc.inetd restart测试然后就可以用 telnet 测试了:bash-4.2$ telnet 192.168.126.241 54321
Trying 192.168.126.241...
Connected to 192.168.126.241.
Escape character is '^]'.
!hello laser思考句柄/fd的实质这个事情看上去有点像一个小游戏,实际上,我们很多时候都忘记了 *nix 系统里面自带的大量工具、应用。我依稀记得早年刚上班的时候,有不少银行的业务系统就是用脚本配合 inetd 实现的 TCP 服务。在这里我只是希望通过这样一个很有趣的例子,来陈述基础知识和逻辑的结合是多么的重要。这里的逻辑和知识无非是这么一个思维过程:tcp socket 在 unix 的程序里头表现为一个句柄(fd)unix shell 程序可以处理文件,而文件在程序里头的的实质就是句柄我们有没有什么东西可以在文件和socket之间映射的?思考结果是 inetd 可以在标准输入输出和 tcp socket 之间映射,那么跟着的问题就是我们的 shell 能否处理标准输入输出?上面问题的答案显而易见,然后就是,shell里头什么命令处理标准输入输出?上面问题的答案是 shell 内置命令 read 和非常非常多的命令都会输出到标准输入于是我们就有了解法。后记这个例子是我六七年前左右做一面的时候面试别人的问题。如果不熟悉实际方法,但是有比较好的基础的同学,会被我一系列问题诱导出来这个方法,并且在诱导过程中评估候选人的 *nix 基础知识是否牢固。现在不当一面了,能碰到这个问题的人估计很少了。文章转自公司wiki《老何的1001夜》,如需转载请注明出处 
 文章为作者独立观点,不代表微头条立场
的最新文章
今天分享的不是技术干货,但却非常实在。尽管听过很多道理,依然过不好这一生,但是道理仍然要听。今明两天给大家推送一组来自淘宝核心系统研发部数据库组的好文~~今天继续给大家推送来自淘宝核心系统研发部数据库组的好文~~今天,给大家推送的是新浪微博推荐架构的演进,从产品目标、算法需求以及技术发展等维度为读者呈现一个完整的发展脉络。程序员是个怎样的个体如何定义,程序员们每天都在做什么,作为一个职业程序员该有怎样的认知,如何进阶成更好的程序员?本文通过一个简单的案例,向你展示一下在用 strace 诊断问题时的一些套路。用Python绘制NBA投篮图表,方法大介绍!以机器学习在计算机视觉和图像领域的人脸识别应用作为一个例子,来陪着大家看看这场热潮、浮华背后有哪些被专家学者们忽视或轻视,但却有着根本性重要的东西,并同时提出本领域的若干值得展开的创新性研究方向。对于计划出租房屋的房主,你应该将房屋的租金设定为多少呢?或者对于租房的顾客而言,应该给自己的租房支付多少呢?不管是对于一次有计划的远足,还是一次说走就走的旅行,为租房付出多少才真正合适呢?随着需求的多元化和终端设备的多元化,前端技术在 web 舞台上一直展现着优美的身姿,她在进化、在演变,几乎每隔一两个月就能听到新的前端技术出来,所以学是学不过来的,前端的学习就两个字:”理解为什么”。你可以共享自己的图书,借阅别人共享的图书了。快来共享图书,寻找与你有共同阅读兴趣的小伙伴吧!——要么读书,要么旅行,身体和心灵得有一个在路上...去哪儿图书馆,助你开启愉快的阅读之旅!在线课程客户端上线啦!C 语言之父离世 4 周年,发一篇四年前译文,纪念下。超过100种的NoSQL数据库,我们应该如何选择?Celery (芹菜)是基于Python开发的分布式任务队列。它支持使用任务队列的方式在分布的机器/进程/线程上执行任务调度。网上疯传林达华的这篇文章,会让你对数学有一个整体的把握。如网上所评,这篇文章的内容偏分析,对于代数拓扑、代数几何等现代数学的重要分支都没有介绍。然而,瑕不掩玉,值得一读。提到Linus Torvalds,我们会想起Linux。提到雷军,我们会想起WPS和小米。提到Bill
Gates.......本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。关键词:更全、更快、更准设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。Python1. Theano是一个python类库,用数组向量来定义和计算数学表达式。它使得在Python评价架构好坏是一个很主观的东西。架构,单单这两个字就很有份量。架构的目标是可维护性,而性能同样不可缺。代码将原本表现为一个整体的存在范畴打成粉碎
硅谷在着眼世界,政府、产业、社会服务、性、农业:他们都想插手...Python很难跟Java连通,跟C却是严丝合缝
用Python的人,一般都挺酷的...硬件曾经是棵摇钱树,直到免费软件的出现
人们一直设法降低程序编写的难度,但至今我们仍离不开软件的开发者...一门编程语言就是一个对算法进行编码、命名和组织的系统
“不要自我重复”,是编程界的口头禅...一个程序员的职业生涯成败取决于能否证明自己对一种或多种语言的把握力
咨询公司RedMonk给出的一份榜单将JavaScript放在第一位,而后是Java...撰文:Paul Ford翻译:经雷科技大会是个全面展现地位的地方,权力和尊卑的关系在这里确立关于科技大会还有为什么会有这么多语言
软件工程师的鄙视链到底有多惨烈、多残酷呢程序员相轻的现象可是非常严重的
C++ 工程师鄙视 Java 和 C# 工程师...“软件工程师常给外界留下难沟通的印象,大牛也收到过类似评价。作为前端大牛,Nicholas C.Zakas...按下的键被松开,电脑就收到了信号,进一步传送到自己内部
电脑从记忆中取出“a”的图像,把这些线和圆在像素方块里呈现京东618期间总结过的一些设计原则和遇到的一些坑的分享~很多东西都已变成了电脑,或即将变成电脑;
电脑用的太多,你就会被它改变Nginx作为一个非常流行和成熟的Web Server和Reserve Proxy Server,网上有大量的性能优化教程,但是不同的业务场景千差万别,什么配置是最适合自己的,需要大量的测试和实践以及不断的优化改进。对于黑客来说,关着的门就是一种挑衅,而锁着的门则是一种侮辱
他们无比聪明,可是又有着某种程度的社交障碍独家重磅:去哪儿网MySQL语法审核工具Inception正式开源本文从四个方面描述 cgroups 的原理及用法老何推荐给qunar同学的
提问的智慧老何推荐给quna同学们
提问的智慧老何推荐给qunar同学们
提问的智慧本文翻译自 35+ Use Cases For Choosing Your Next NoSQL Database,现在我们站在各个用例的角度上来考虑那种系统适合于这些用例。QunarTLQunar技术沙龙是去哪儿网工程师小伙伴以及业界小伙伴们的学习交流平台。我们会分享Qunar和业界最前沿的热门技术趋势和话题,为中高端技术同学提供一个自由的技术交流和学习分享平台。热门文章最新文章QunarTLQunar技术沙龙是去哪儿网工程师小伙伴以及业界小伙伴们的学习交流平台。我们会分享Qunar和业界最前沿的热门技术趋势和话题,为中高端技术同学提供一个自由的技术交流和学习分享平台。(点击上方蓝字,可快速关注我们)在我之前的文章让我们编写一个内核,讲述了如何搭建一个初级的x86内核,该内核使用GRUB启动,运行于保护模式,能在屏幕上输出字符串。今天,我将为该内核添加键盘驱动,这样它能够获取键盘上a-z和0-9字符输入并且输出到屏幕。本文使用的源代码可以在我的GirHub仓库-mkeykernel中获取。我们使用I/O端口来与I/O设备交互。这些端口只是x86 I/O总线上的具体地址,仅此而已。对该端口的读/写操作通过处理器内建的特定指令完成。端口读写read_port:
mov edx, [esp + 4]
retwrite_port:
edx, [esp + 4]
al, [esp + 4 + 4]
retI/O端口的访问使用x86指令集中的in和out指令。在read_port中,端口号被视为参数。当编译器调用你的函数时,它将所有的参数压入栈中。参数使用栈指针复制到寄存器edx中。寄存器dx是edx的低16位。这里的in指令读取dx指定端口并将结果输出到al中。寄存器al是eax的低8位。如果你还记得大学课程,函数的返回值存放于eax寄存器中。因此,read_port可以读取I/O端口数据。write_port非常类似。这里有两个参数:端口号和待写入数据。out指令将数据写入端口中。中断在我们开始编写任何设备驱动前,我们需要了解处理器是如何知道设备执行了一个事件。最简单的方法是轮询—始终保持对设备状态的监测。这样显然效率太低且不实用。因此中断机制被引入。中断是硬件或软件发送给处理器的一个信号,代表一个事件。使用中断,我们可以避免轮询,仅当我们关注的指定中断触发时才响应。可编程中断控制器(PIC)器件或芯片确保x86成为支持中断驱动的架构。该器件或芯片负责管理硬件中断并将中断发送至相应系统中断。当硬件设备上执行指定操作时,它会向与PIC芯片连接的指定中断引脚上发送一个中断请求(IRQ)脉冲。接着,PIC将接收到的IRQ转换成系统中断,并发送消息中止CPU当前执行的任何工作。接下来,由内核负责处理这些中断。如果没有PIC,我们就必须轮询系统中的所有设备来查看它们中是否有事件发生。下面以键盘为例。键盘依靠0×60和0×64 I/O端口工作。端口0×60输出数据(按了什么键),端口0×64输出状态。但是,你必须确切知道什么时候去读取这些端口。此处使用中断很简单。当按下一个键时,键盘会在IRQ1中断线上发送一个信号给PIC。PIC在初始化期间存储了一个偏移量。该设备将输入线号叠加偏移量就形成中断号。接着,处理器查询称为中断描述符表(IDT)的特定数据结构给出此中断号相对应的中断处理程序入口地址。接着,上述地址的事件处理代码会被执行。建立IDT表struct IDT_entry{unsigned short int offset_unsigneunsigned char type_unsigned short int offset_};struct IDT_entry IDT[IDT_SIZE];void idt_init(void){unsigned long keyboard_unsigned long idt_unsigned long idt_ptr[2];/* populate IDT entry of keyboard's interrupt */keyboard_address = (unsigned long)keyboard_IDT[0x21].offset_lowerbits = keyboard_address & 0IDT[0x21].selector = 0x08;/* KERNEL_CODE_SEGMENT_OFFSET */IDT[0x21].zero = 0;IDT[0x21].type_attr = 0x8e;/* INTERRUPT_GATE */IDT[0x21].offset_higherbits = (keyboard_address & 0xffff0000) && 16;/*
PIC2*Command 0x20
0xA1*//* ICW1 - begin initialization */write_port(0x20 , 0x11);write_port(0xA0 , 0x11);/* ICW2 - remap offset address of IDT *//** In x86 protected mode, we have to remap the PICs beyond 0x20 because* Intel have designated the first 32 interrupts as &reserved& for cpu exceptions*/write_port(0x21 , 0x20);write_port(0xA1 , 0x28);/* ICW3 - setup cascading */write_port(0x21 , 0x00);
write_port(0xA1 , 0x00);
/* ICW4 - environment info */write_port(0x21 , 0x01);write_port(0xA1 , 0x01);/* Initialization finished *//* mask interrupts */write_port(0x21 , 0xff);write_port(0xA1 , 0xff);/* fill the IDT descriptor */idt_address = (unsigned long)IDT ;idt_ptr[0] = (sizeof (struct IDT_entry) * IDT_SIZE) + ((idt_address & 0xffff) && 16);idt_ptr[1] = idt_address && 16 ;load_idt(idt_ptr);}IDT依靠IDT_entry组成的结构体数组实现。文章稍后会讨论键盘中断是如何映射到中断处理程序。首先,我们来了解PIC是如何工作的。现在的x86系统有2块PIC芯片,每一块有8条输入线。我们称其为PIC1和PIC2。PIC1接收IRQ0到IRQ7,PIC2接收IRQ8至IRQ15。PIC1使用0×20作为命令端口,0×21作为数据。PIC2使用0xA0作为命令端口,0xA1作为数据端口。PIC初始化使用8位命令字,该命令字叫做初始化命令字(ICW)。这些命令字的具体每一位语法参考此链接。在保护模式下,你需要发送给这两个PIC的第一条命令是初始化命令ICW1(0×11)。该指令让PIC等待数据端口的其他3条初始化字。这些指令告诉PIC以下信息:*它的偏移向量。(ICW2)*PIC是如何作为主/从设备的。(ICW3)*给出环境相关的附加信息。(ICW4)第二条初始化指令是ICW2,该指令会被写入每一个PIC的数据端口。该指令设置PIC的偏移量。该偏移量和输入线的数据相加可以得到中断号。PIC允许彼此之间输出到输入的级联。级联的建立使用ICW3,每一位代表相应IRQ的级联状态。至于现在,我们不使用级联并且所有位均设为0。ICW4设置附加环境参数。我们仅设置大部分低位来告诉PIC我们运行于80×86模式。Tang ta dang!! PIC初始化完成。每一个PIC内部有一个8位寄存器叫做中断屏蔽寄存器(IMR)。该寄存器中存放进入PIC的IRQ线的位图。当一位被置位时,PIC会忽略相应的请求。这意味着我们可以通过设置IMR中的数值的第n位为0或1来启用和禁止第n跳IRQ线。从数据端口读取的数据返回值存放在IMR寄存器中,向其中写入可设置寄存器。此处我们的代码中,在PIC初始化后,我们设置所有位为1,因此所有IRQ线都被禁用。我们稍后会启用键盘中断对应的线。至于现在,我们禁用所有的中断!!假设IRQ线开启,PIC可以通过IRQ线接收信号,并叠加偏移量转换成中断号。现在,我们需要填写IDT,这样键盘的中断号才能映射到我们编写的键盘处理程序的地址。那么键盘处理函数地址应该与IDT中哪一个中断号映射?键盘使用IRQ1。IRQ1是PIC1的输入线。我们已经将PIC1的偏移量初始化为0×20(参见ICW2)。为查找中断号,将1加上偏移量0×20,即0×21。所以在IDT中,键盘终端处理程序地址必须映射到0×21号中断。那么,接下来的任务就是填写IDT中的0×21中断。我们要将该中断映射到我们在汇编文件中编写的键盘处理函数。每一个IDT条目由64位组成。在IDT中断条目中,我们没有将中断处理程序地址作为一个整体存储。我们把它分成两个16位部分。低16位存储在IDT条目的前16位,高16位存储在IDT条目的最后16位。这样做的目的是为了保持与286兼容。你可以在很多地方看到Intel类似的巧妙设计!!在IDT条目中,我们还必须设置类型——这样做是为了捕获中断。我们还需给出内核代码段偏移量。GRUB引导为我们建立一个GDT。每一项GDT条目占8个字节,内核代码描述符是第二个段;所以它的偏移量是0×08(更多相关描述对本文过于冗余)。中断门由0x8e表示。中间剩余8位必须全部填充为0。这样,我们就填充了与键盘中断相对应的IDT条目。一旦IDT中需要映射完成,我们需要告诉CPU IDT的位置。该操作通过lidt汇编指令完成。lidt指令有一个操作数。该操作数必须是一个指向描述IDT描述符结构的指针。该描述符十分简单。它包含了IDT的字节空间和地址。我使用了一个数组来打包该数值。你也可以使用一个结构体来填写该数值。我们在变量idt_ptr中存放了指针,然后使用load_idt()函数传递指针给lidt指令。load_idt:mov edx, [esp + 4]lidt [edx]stiret此外,load_idt()函数使用sti指令启用中断。一旦IDT被建立并加载,我们可以使用前面讨论过的中断屏蔽启用键盘的IRQ线。void kb_init(void){/* 0xFD is
- enables only IRQ1 (keyboard)*/write_port(0x21 , 0xFD);}键盘终端处理函数既然我们已经通过IDT的0×21中断条目成功将键盘中断映射到键盘处理函数。那么,每次你按下键盘上的一个键,键盘处理函数必定会被调用。keyboard_handler:
keyboard_handler_mainiretd键盘处理函数仅仅是调用了另一个C函数并使用iret类指令返回。我们本可以在此处编写整个中断处理程序,但是相对汇编而言编写C代码要更容易——所以这里采用函数调用。当从中断处理程序返回中断之前的程序时,应该使用iret/iretd替换ret指令。这些指令会将中断调用前入栈的标志寄存器值出栈。void keyboard_handler_main(void) {/* write EOI */write_port(0x20, 0x20);status = read_port(KEYBOARD_STATUS_PORT);/* Lowest bit of status will be set if buffer is not empty */if (status & 0x01) {
keycode = read_port(KEYBOARD_DATA_PORT);
if(keycode & 0)
vidptr[current_loc++] = keyboard_map[keycode];
vidptr[current_loc++] = 0x07;
}}首先,我们通过向PIC通用端口写入指令发送EOI信号。只有这样,PIC才允许更多的中断请求。这里我们必须读取两个端口——0×60数据端口和0×64命令/状态端口。我们首先读取0×64端口获取状态。如果状态的最低位是0,这意味着缓冲区是空的,没有可读取数据。否则,我们要读取0×60数据端口。该端口将给出我们按下的键盘键码。每一个键码对应于键盘上的一个按键。keyboard_map.h头中定义了一个简单的字符数组来完成键码到对应字符的映射。该字符在屏幕上的输出与之前那篇文章中使用的技术相同。在本篇文章中,为了简洁,我仅仅处理了小写字母a-z和数字0-9。你可以轻松扩展到其他特殊字符,ALT,SHIFT,CAPS LOCK。你可以根据状态端口输出知道按键是否被按下或释放,并执行所需操作。你也可以将任意按键组合映射到特定功能,例如关机等。你可以编译内核,在实际机器或虚拟机(QEMU)上运行,和之前的文章(内核仓库)一样。开始输入!!原文出处:arjunsreedharan译文出处:伯乐在线 - ashiontang译文链接:/87399/『CPP开发者』分享 C 和 C++ 相关技术文章、工具资源、精选课程、热点资讯,欢迎关注。微信号:{ cppFans } (长按上图,弹出「识别二维码」后可快速关注)/tag/c/点击“阅读原文”,查看更多精彩文章。↓↓↓ 
 文章为作者独立观点,不代表微头条立场
的最新文章
第 24 届国际 C 语言混乱代码大赛结果出炉了,之前两位常在该比赛中拿奖的童鞋:浙大的侯启明和 Google 的 Don Yang 又拿奖了。快速排序是目前基于关键字的内部排序算法中平均性能最好的,它采用了分治策略,这既是快速排序的优点也是它的缺点。C++ 之父 Bjarne Stroustrup 在 cfront 诞生 30 周年的访谈。本文将接着讲一下C++中多线程程序的开发.这里主要讲Windows平台线程的用法,创建线程要调用windows API的CreateThread方法。(点击上方公众号,可快速关注)作者: luoweifu网址: (点击上方公众号,可快速关注)作者: lxl 网址: http://www.solidot.org/stor(点击上方公众号,可快速关注)作者: luoweifu 网址: http://blog.jobbole.co这篇短文是讨论一个大多数程序员都感兴趣的一个话题:错误处理。错误处理是编程的一个“黑暗面”。它既是应用程序的“现实世界”的关键点,也是一个你想隐藏的复杂业务。这是一个国际象棋游戏程序,但是其大小仅仅是令人难以置信的487字节。 这是什么概念呢?要知道,在Wikipedia上关于国际象棋规则介绍的网页,其大小都有53162字节,是游戏程序大小的109倍之多。这篇文章讲的是常量合并,这是VC++编译器最简单的优化之一。
这种优化,是指编译器在编译时(编译期间)直接计算出表达式的结果,在生成的代码中直接用计算结果替换表达式。如今这个时代,Google 和 Stack Overflow 已经成为了很多开发者不可或缺的工具。但是最近,后者貌似名声坏了。一方面,是因为表面上特别、有时候会偏离适度的原则。在这个章节中,将为大家重点介绍类与函数的设计与声明,在细节中让代码的编写更加的有效合理。这里提到三个主要的观点:1. 子类不要覆写父类的非虚函数;2. 子类不要覆写从父类继承过来的默认参数;3:子类与父类之间的赋值问题。在 C 和 C++ 的代码编写中,往往有很多细则需要遵守,从而来更加的优化自己的代码。本文提出了在 C\C++ 代码编写中的27个建议,望大家相互学习。本文源自知乎《在真实工作中的编程是怎么样的,与学校里有什么不同?》问答帖下朱众的回答。作者已同意刊登转载。有伯乐在线读者评论:读起来好幽默生动,好温馨的感觉。大多数程序员都是从C开始学习编程的,因为C是用来写操作系统、应用程序最常用的语言。本文为你提供10个优秀的学习C语言的资源。对于一个命名良好,代码规范,设计简洁的系统,要想非常快的理解一个系统,最直接的方式就是 RTFC(Read The Fucking Code)。Stackoverflow上有人提出这样的问题:“实现位反转的最佳算法是什么”。你将如何回答?来阅读下看官们的精彩回答吧。这篇文章的目的是让每个程序员(特别是 C 程序员)说:我真的不懂 C。我想要让大家看到 C 语言的那些阴暗角落比我们想象中更近,甚至那些平常的代码中就包含着未定义的行为。2011 年,人们对乔布斯的去世记忆深刻,但这一年还有另一位本应获得同样关注的人物也与世长辞,他就是C语言之父丹尼斯·里奇(Dennis Ritchie)。以上都是是大多数在一线城市奋斗的人们所经历的可以忽略不计的一些事,我这里想聊聊为什么我们做IT的大多数都很累?我记不清我第一次看到一台电脑是什么时候了,但我确实记得当我被问到“长大以后你想做什么?”时,我的第一个念头是“在电脑上工作”。(点击上方公众号,可快速关注)作者: lxl网址: http://www.solidot.org/story本人在 2015 年校招拿了 BAT 以及网易游戏等 offer,而且基本上都给了 Special,那就从我的角度来谈谈今年校招的体会。(点击上方公众号,可快速关注)作者: lxl 网址: http://www.solidot.org/stor(点击上方公众号,可快速关注)作者: WinterIsComing网址: http://www.solido有时候有的候选人能拿到95%或更高的分数,然而在面试的时候表现得极为糟糕——我们后面发现他们雇人代考了技术测试。(点击上方公众号,可快速关注)作者: 安晓辉
网址: http://ink.csdn.net/articl真正的目标应该是学会思考的方式。换句话说,我们应该尝试教授计算机科学,而不是教着写代码。在本文中,我将介绍两者的不同,以及为什么后者是当下学编程浪潮成功的关键。让我们来谈谈代码审查(Code Review)。如果花几秒钟去搜索有关内容,你会发现许多论述代码审查好处的文章,还会发现许多介绍如何使用代码审查工具的文档,但能够在你审查他人代码时指导查什么的内容却很少见。如果你认为自己缺少下面的某些品质,千万别往心里去。我不是一时兴起才来探讨这些,其中的很多迹象来自于对其他程序猿的观察或阅读他们的代码。有些语言需要程序员来手动释放内存(回收垃圾),有些语言有垃圾回收机制(GC)。本文就来讨论GC实现的三种基本方式。根本上讲,我们每个人都能控制造成我们低效的因素。我不会和平对抗。我要不就强硬表态,要不就坐着任由其他人在我身边走动。对此我真不擅长应对。所以,我在处理外部低效因素方面没有好建议,但是我知道这一条:控制我能控制的。很多人认为新人或者说菜鸟不肯分享的原因总结为害怕被所谓的高手/大牛所打脸而害怕分享。从我的经历来说,我认为这并非核心原因,仅仅是次要原因之一。因此特意写此文与大家探讨一下。我前几天看了一本书,书中有这么一句话:“复杂的代码往往都是新手所写,只有经验老道的高手才能写出简单,富有表现力的代码”。此话虽然说的有点夸张,可是也说明了经验的重要性。既然未来的计算机程序将会大放光彩,那么势必需要更多的程序员。毕竟,创建自动汽车、自动化的医疗诊断系统、小贩机器人等等,都需要程序员的参与,不是吗?那么,现在正在、未来会发生什么变化呢?这里只想讨论一个:人机交互的革命,包括人机交互方式,和人机交互层次两方面的革命。好吧,就是Kinect, HoloLens、Cortana带来的新情况。函数重载的重要性不言而明,但是你知道C++中函数重载是如何实现的呢?虽然本文谈的是C++中函数重载的实现,但我想其它语言也是类似的,以此与大家交流。如果业界中不用高级算法和数据结构,那为什么还要学?我和我认识的人从未用过任何高级算法和数据结构,我们中的有些人已经在业界工作20年了。你是如何激励自己去学习高级算法和数据结构的呢?或许,参加编程比赛会有点用…(点击上方公众号,可快速关注)英文: Zenol译者: 伯乐在线 - 周昌鸿网址: http://blog.来自MDCC大会组委会的最新消息,MDCC 2015目前已经确认近百位技术精英将在本次大会中进行演讲,日程首度曝光。(点击上方公众号,可快速关注)英文: Zenol 译者: 伯乐在线 - 周昌鸿 网址: http://blocppFans关注 C 和 C++ 啦热门文章最新文章cppFans关注 C 和 C++ 啦

我要回帖

更多关于 120.209.30.235 9099 的文章

 

随机推荐