主题:【原创】猛批烂书 程序员面试宝典 上 -- 晨池
实际当n==1的时候,根本就没有返回,所以永远返回一个不确定的数字,他们连编程风格这一分也拿不到
永远别推测他们有多烂,他们永远比你想象的更烂
也不是最后一个,晨枫又白打了几个喷嚏,看帖不仔细害人害己不是?嘿嘿,花慰你一下
确实最大的问题是CDemo没有拷贝构造,不过在栈里面先申请再释放,确实很无聊,就是脱裤子放屁。
有次我在晨枫的帖子里,忍不住问了个问题,枫大一如既往的有问有答,我觉得如沐春风就多说了点,于是一问一答几个来回
有人纳闷:晨枫为什么要在自己帖子里自问自答呢?
可惜找不到了,不然链接放上来凑个热闹多好
真是叹为观止!
俺是06年就看过这本书的,当时找到了错误就记在旁边的空白处。虽然密密麻麻的也找了不少,但是楼主指出的致命BUG却一个都没发现。看完该书还推荐给同学(当然了,是俺的修订版),丢人啊丢人。
这本书对于刚出校门,且有一点编程水平的人,还是有点用处的。至少能知道面试会考些啥,权当他是一个面试习题集吧。对于刚毕业的大学生,想把这些题目都搜集全,也是颇费精力的。
作者的水平,自然就别提了,看看作者介绍就知道了,确实就是楼主说的“小唐骏”。
答案也可以看,就是不能看解析,我工作好几年了,如果是刚刚毕业或者大四时候,还看不懂呢(那时候我不懂C++。。。)
这本书,四年前就出来荼毒生灵了?!
先谢您的花。不过面试题嘛,还真不好计较。看他想考什么了。
不过您的主题帖中有一点让我感兴趣,因此还想请教一下,望不吝赐教。
我试着想了一想,用一个函数申明如何简化程序设计框架,可惜没想通。能给个实例么?
从内存管理上来说,在堆上分配内存是不是更好?在我工作中的coding standard要求必须用new构造对象。
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应当就够了。在完全理解指针前,不宜开发其它用处。
两个例子的区别就是,1里的vector a1是在栈上
构造的,而2里的vetor a1是在堆上构造的。
1里的a1在函数出栈的时候会自动调用vector类的析构函数,释放他分配的内存,同样2里的a1,在调用delete的时候,也会调用vector类的析构函数,释放他分配的内存。
错误是没有的,当然从写法上来说是1比较好,在这种情况里2有点所谓的脱裤子放屁,而且如果你忘了写delete内存就泄露了,可1不会有这种情况,因为C++编译器在函数出栈的时候会自动调用所有临时对象的析构函数。