西西河

主题:【原创】编程心得 -- 荆棘探兴

共:💬198 🌺258
分页树展主题 · 全看首页 上页
/ 14
下页 末页
          • 同感
            家园 东湖是学计算机的?

            俺不是计算机专业的,就是觉得好玩。

            我记得当时很多病毒是改command.com里面的INT 21,好像这是DOS里面主要的文件操作中断入口。

            IO.sys和MSDOS.sys看得我倒吸一口冷气:程序还有写得那么好的。现在想起来,很多是各种各样的trick,各个行业里面总有很多这种技巧的。记得有个重写整个内存再读取来检验内存硬件OK的检验程序,写得非常短小高效。command.com没坚持看完,里面有很多程序性处理的东西,比较boring.

        • 家园 佩服,佩服
          • 家园 呵呵,不敢

            看过MS DOS汇编的好处是,对单进程的操作系统了解的比较清楚;对DOS时代的病毒也比较了解,包括改写BOOT区的小球病毒,还有很多截获command.com里面INT 21的病毒。

            DOS汇编是写得非常漂亮的,它使用了高级语言无法使用的技巧。比如说,刚执行过的代码区可以覆盖重写成数据区,以达到占用尽可能少内存的目的。

      • 家园 严重同意一定要动手。

        便动手边看书的方法比较好。

    • 家园 推荐几本c++程序员的书

      入门:Thinking in C++

      学徒:c++ faq lite

      上岗:effective c++

      我曾经是个程序员,现在的工作仍然需要经常编程。面试过许多人,不少人都坚信自己是个不错的程序员,不过随便问两句就发现基础很不牢靠。强烈建议大家如果还是要吃c++这碗饭的话,这几本书一定要翻一下。第三本网上不能合法地全文下载,不过非法的很容易找到。

      我面试的时候必出这么道题:

      不许用STL,实现一个类 string,封装库函数strcat。这个类可以这么调用:

      string s1("abcde"),s2("1234567"),s3;

      s3=s1+s2; //now s3 should represent sth like "abcde1234567"

      看起来简直不值一提。实际中能把这道做得好的却很少。

      • 家园 您的题太难了.说实在的,在美国面世人,

        能把stl(map啥的)实现说个大概的已经是高手了,能说清一些boost的实现的简直就是神人。你这题看来简单,但真的写一个string的函数,三十分钟后保证写的和GCC里的实现差不多(至少要素都考虑到了)的人是很少见的。

        我猜美国70%的职业C++程序员没有认真读过stl的实现。其实那是个很好的练习。

      • 家园 这题唯一值得看的的是string buffer问题

        就是当处理

        for (...) {

        s = s + s0;

        }

        连续内存搬迁的效率问题

        题目没写清楚,完全可以写出一段实际运行很差的但是符合出题要求的代码。最好出题时注明一下不用考虑。否则一个有能力的程序员会很难受。

        • 家园 合格的程序员应该知道需要考虑什么

          而不是等着别人提要求。你愿意和一个不长脑子,推一下走一步的人共事吗?

          我在另一篇文章里提出了参考答案,有兴趣的话可以对照一下看看我们各有什么不足:

          http://www.ccthere.com/article/1693075

          • 家园 你的这个大致看了看

            明显错误是没看到,做题目没问题,但是不实用。

            1.你把string分成char, uchar16, uchar32之后,做是好做了,用就不好用了。实际应该在string内部统一,考虑效率,用utf8是个好办法

            2.你的string没有留buffer,也没有内存对齐,如果实际有很多append(ch),内存拷贝效率很低。书上说就算一次append一行的话,搬350k文件实际要实际搬50G。

            实际的串类我倒真写过,头文件10k,源90k,整100k,花了整1个星期。

            • 家园 合格的程序员知道如何取舍各个层级的需求

              在面试中这道题最多给你30分钟。即使你能把100k的代码都背下来,也没有时间都写出来。而且,任何设计都是首先要求做对,其次才是做快、做省。就你第一个帖子和这个帖子中的内容来说,在做对这个层次上考虑的还有失草率。有的地方(比如提到utf8)也暴露了一些概念错误。

              • 家园 别扯了

                我就是随口说说我做串类的时候考虑到的问题,没想针对你什么。既然你不服,我只好再看一眼你的代码,发现你懂的确实不多:

                1.//following helper functions to decide which version function in library to call in compile time.

                你这里不写注释倒还好,写了就说明你的理解有问题,你的帮助函数全部是需要编译的,所谓编译时决定,你应该用模板特化,要不你就不要提编译时决定,当然反正按你的理论,能用就行。

                2.常用的swap trick你也不会,基本上我确定你也没有看过boost代码。

                我的看法,谈工程可以,谈语言,c++,你要学的还很多。

                • 家园 没劲

                  其实对于一个连utf8是什么层次的概念都不清楚却拿出来唬人的人,我的第一篇回复就是多余的。而且你首先考虑的是怎么提高某种情境下的效率而不是保证设计的界面和实现是否正确和合理。所以我们可能根本就没有对话的基础。

                  你这篇帖子的两个新论点,第一个错,看起来你都不明白编译和调用的区别。第二个倒不能说错,可是很无聊。"copy & swap"不是解决self assignment和exception safty的唯一选择。在示例中选用的方法同样广泛采用,而且相比更便于没有注意到那些地方的初学者理解。

      • 家园 ...............
      • 家园 英文好,读原版

        候捷翻译的也可以

      • 家园 这个题是很难的,特别是异常处理处理之类的东东。很多

        看似很简单的问题其实很难,比如你就问一下C里面printf到底是如何实现的我就不大说得上来。

分页树展主题 · 全看首页 上页
/ 14
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河