淘客熙熙

主题:【原创】猛批烂书 程序员面试宝典 上 -- 晨池

共:💬64 🌺96 新:
全看树展主题 · 分页首页 上页
/ 5
下页 末页
家园 如果永远返回1,他们的编程风格还能得一分

实际当n==1的时候,根本就没有返回,所以永远返回一个不确定的数字,他们连编程风格这一分也拿不到

永远别推测他们有多烂,他们永远比你想象的更烂

家园 哈哈,你不是第一个认错的

也不是最后一个,晨枫又白打了几个喷嚏,看帖不仔细害人害己不是?嘿嘿,花慰你一下

确实最大的问题是CDemo没有拷贝构造,不过在栈里面先申请再释放,确实很无聊,就是脱裤子放屁。

家园 是啊,不知道为什么好多人搞混了,我也乐得狐假虎威一把

有次我在晨枫的帖子里,忍不住问了个问题,枫大一如既往的有问有答,我觉得如沐春风就多说了点,于是一问一答几个来回

有人纳闷:晨枫为什么要在自己帖子里自问自答呢?

可惜找不到了,不然链接放上来凑个热闹多好

家园 他们那本书里面,例子程序几乎是低级错误世博会

真是叹为观止!

家园 惭愧惭愧

俺是06年就看过这本书的,当时找到了错误就记在旁边的空白处。虽然密密麻麻的也找了不少,但是楼主指出的致命BUG却一个都没发现。看完该书还推荐给同学(当然了,是俺的修订版),丢人啊丢人。

这本书对于刚出校门,且有一点编程水平的人,还是有点用处的。至少能知道面试会考些啥,权当他是一个面试习题集吧。对于刚毕业的大学生,想把这些题目都搜集全,也是颇费精力的。

作者的水平,自然就别提了,看看作者介绍就知道了,确实就是楼主说的“小唐骏”。

家园 如果是一本习题集,倒还真可以

答案也可以看,就是不能看解析,我工作好几年了,如果是刚刚毕业或者大四时候,还看不懂呢(那时候我不懂C++。。。)

这本书,四年前就出来荼毒生灵了?!

家园 谢花。

先谢您的花。不过面试题嘛,还真不好计较。看他想考什么了。

不过您的主题帖中有一点让我感兴趣,因此还想请教一下,望不吝赐教。

我在工作中有遇到问题就是利用了Test b()这样形式的语法来解决的,简化了程序设计框架也降低了程序当中出错的可能性。

我试着想了一想,用一个函数申明如何简化程序设计框架,可惜没想通。能给个实例么?

家园 用哪一个应该是看需求

从内存管理上来说,在堆上分配内存是不是更好?在我工作中的coding standard要求必须用new构造对象。

家园 没记错的话,STL vector使用array实现的~~

STL cmath的pow用了就踩雷,2的3次方2返回 7.999999999999999~~

家园 学生求科普

CPP的指针一般用在什么地方?

手动动态数组和class继承吗?

默默地ACM的题目基本上用不到pointer~学过之后就没怎么用到过

家园 不是这样的

vector管理的对象(CDemo)的内存无论用1还是2的写法都是在堆上分配的,但a1本身在这两个写法中是有区别的。这个例子的错误之处就在a1本身的这个区别上。在绝大多数情况下,a1本身必须要放到栈上,目的是自动管理堆上内存的分配和释放,实现类似garbage collection的功能。这个例子恰恰需要这样的功能。在c++里面叫做smart pointer。不过我非常不喜欢smart pointer,因为这个玩意在绝大多数情况下,被用成了给脱裤子放屁的写法加一层保护......而且,需要在堆分配内存的情况,一般都是使用大块的内存,也就是要当成数组使用,而不是当成指针使用。但这个smart pointer却没有任何帮助数组使用书写方便的功能。

栈的大小,缺省情况下32位系统预留1MB。16位系统应当是8~16KB吧

家园 很难有个列表

指针是c/c++一个非常强大的工具,在很多实现的时候都用。一定要列个列表就比较困难了。大致的情况,指针最常用的地方大概有:

1、函数数组形参

主要是类似char *, unsigned char *这样的情况。在需要速度的程序中,这个很常用,比如图像、视频处理。

2、返回大结构或数组

c++下这个很多情况下可以用引用代替指针。

3、实现类似虚继承或可替换基类的架构

如果要实现老师虚继承的继承关系,但又不想用编译器的功能,或编译器没有此功能,可以用指向基类的指针做类成员变量来模拟。要实现类似可替换基类的架构,也必须使用指针。

当然还有很多时候用指针会方便。但对于初学者来说,1和2应当就够了。在完全理解指针前,不宜开发其它用处。

家园 现在的编译器,不会让这种错误通过的。
家园 呃 没在意,居然没有return- -!
家园 错误是没有的,没有所谓a1必须要放到栈上的说法。

两个例子的区别就是,1里的vector a1是在栈上

构造的,而2里的vetor a1是在堆上构造的。

1里的a1在函数出栈的时候会自动调用vector类的析构函数,释放他分配的内存,同样2里的a1,在调用delete的时候,也会调用vector类的析构函数,释放他分配的内存。

错误是没有的,当然从写法上来说是1比较好,在这种情况里2有点所谓的脱裤子放屁,而且如果你忘了写delete内存就泄露了,可1不会有这种情况,因为C++编译器在函数出栈的时候会自动调用所有临时对象的析构函数。

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


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

Copyright © cchere 西西河