G****A 发帖数: 4160 | 1 in-person interview
Interviewer: how to std::cout some sentences before main() function.
Me: blahblah... global variable ....blahblah
Interviewer: global variable is close, but how exactly ...?
Me: .....
|
p*****p 发帖数: 379 | 2 void fun() { cout << "aa" << endl; }
static void *a = fun();
类似这样? |
A*****i 发帖数: 3587 | |
l***i 发帖数: 1309 | 4 constructor of a global object will be called before main()
class Object {
public:
Object();
};
Object::Object() {
cout << "my message\n";
}
// define a global object somewhere in .cc or .cxx or .cpp
Object obj;
int main()
{
}
This seems to be an exercise from Stroustrup's book |
G****A 发帖数: 4160 | 5 这个应该是interviewer想要得答案。 The class constructor of a global object。
又一次感觉自己好菜
【在 l***i 的大作中提到】 : constructor of a global object will be called before main() : class Object { : public: : Object(); : }; : Object::Object() { : cout << "my message\n"; : } : // define a global object somewhere in .cc or .cxx or .cpp : Object obj;
|
d**********x 发帖数: 4083 | 6 C++面试就那么几个经典问题翻来覆去的问。
类似的还有一个:如何不用循环、不用递归打印出1 2 3 4 5 6 7 8 9 ... n
【在 G****A 的大作中提到】 : 这个应该是interviewer想要得答案。 The class constructor of a global object。 : 又一次感觉自己好菜
|
l****i 发帖数: 396 | 7 还有些什么经典问题可以说说么?
【在 d**********x 的大作中提到】 : C++面试就那么几个经典问题翻来覆去的问。 : 类似的还有一个:如何不用循环、不用递归打印出1 2 3 4 5 6 7 8 9 ... n
|
d**********x 发帖数: 4083 | 8 像这种tricky的真不多。。
多数还是考考基本概念,effective cpp和exceptional cpp每个item能够解释就差不多了
略复杂点的比如解决singleton的初始化和摧毁顺序,exception在c++里面的应用与困
难之类的。。。
【在 l****i 的大作中提到】 : 还有些什么经典问题可以说说么?
|
B******5 发帖数: 4676 | 9 这咋搞?template?
【在 d**********x 的大作中提到】 : C++面试就那么几个经典问题翻来覆去的问。 : 类似的还有一个:如何不用循环、不用递归打印出1 2 3 4 5 6 7 8 9 ... n
|
d**********x 发帖数: 4083 | 10 和主帖问题同一个思路啊。。用构造函数
【在 B******5 的大作中提到】 : 这咋搞?template?
|
|
|
A*****i 发帖数: 3587 | 11 啥意思?不停的new, delete五次然后用一个static放在构造和析构里面让它++?
【在 d**********x 的大作中提到】 : 和主帖问题同一个思路啊。。用构造函数
|
d**********x 发帖数: 4083 | 12 差不多吧
不过new数组就可以了。
【在 A*****i 的大作中提到】 : 啥意思?不停的new, delete五次然后用一个static放在构造和析构里面让它++?
|
A*****i 发帖数: 3587 | 13 妈的还是不过关
我其实第一反应比那个new delete还傻逼,我想到的是继承十次……
【在 d**********x 的大作中提到】 : 差不多吧 : 不过new数组就可以了。
|
d**********x 发帖数: 4083 | 14 没事,这种都是属于知道就知道,不知道一般当场想不出的
一旦知道了,这一类问题也就都变成渣了
妈的还是不过关
我其实第一反应比那个new delete还傻逼,我想到的是继承十次……
【在 A*****i 的大作中提到】 : 妈的还是不过关 : 我其实第一反应比那个new delete还傻逼,我想到的是继承十次……
|
x*****0 发帖数: 452 | |
d*****n 发帖数: 23 | |
n****e 发帖数: 678 | |
i******t 发帖数: 22541 | |
e*****r 发帖数: 93 | 19 其实还能更简单一点
ostream& out=(cout<<"AA"<
【在 l***i 的大作中提到】 : constructor of a global object will be called before main() : class Object { : public: : Object(); : }; : Object::Object() { : cout << "my message\n"; : } : // define a global object somewhere in .cc or .cxx or .cpp : Object obj;
|
r*********n 发帖数: 4553 | 20 template metaprogramming?
【在 d**********x 的大作中提到】 : C++面试就那么几个经典问题翻来覆去的问。 : 类似的还有一个:如何不用循环、不用递归打印出1 2 3 4 5 6 7 8 9 ... n
|
|
|
d**********x 发帖数: 4083 | 21 也可以,编译时递归
【在 r*********n 的大作中提到】 : template metaprogramming?
|
r*********n 发帖数: 4553 | 22 面试官要真的想通过这些trick出难题,那真是无底洞啊
书上说template metaprogramming是Turing complete,想要什么样子的程序都可以用
编译器搞定。
对了,你说design pattern最多考到singleton吗?还有些很诡异的,比如factory,是
不是不容易考到。上次看到thinking in c++里面讲到Abstract factory 和
Polymorphic factory,头都大了。
【在 d**********x 的大作中提到】 : 也可以,编译时递归
|
d**********x 发帖数: 4083 | 23 不是的
我只是举一个例子。。。singleton一般人都知道,但是很多人不知道其中thread safe
怎么做,很多人不知道怎么顺序初始化并且约定销毁顺序。。。
design pattern是一定要懂的,不过不要痴迷。。。看看<> 或者
Head First吧。。。
【在 r*********n 的大作中提到】 : 面试官要真的想通过这些trick出难题,那真是无底洞啊 : 书上说template metaprogramming是Turing complete,想要什么样子的程序都可以用 : 编译器搞定。 : 对了,你说design pattern最多考到singleton吗?还有些很诡异的,比如factory,是 : 不是不容易考到。上次看到thinking in c++里面讲到Abstract factory 和 : Polymorphic factory,头都大了。
|
r*********n 发帖数: 4553 | 24 Thanks.
safe
【在 d**********x 的大作中提到】 : 不是的 : 我只是举一个例子。。。singleton一般人都知道,但是很多人不知道其中thread safe : 怎么做,很多人不知道怎么顺序初始化并且约定销毁顺序。。。 : design pattern是一定要懂的,不过不要痴迷。。。看看<> 或者 : Head First吧。。。
|
b***m 发帖数: 5987 | |
t*******i 发帖数: 4960 | 26 考这个有意思么?也就是害大家白花时间来准备。
一年前我把 c faq, effective c++, more effective c++ 都看了一遍,可是,现在
全还回去了。 平时也用不上。
【在 G****A 的大作中提到】 : in-person interview : Interviewer: how to std::cout some sentences before main() function. : Me: blahblah... global variable ....blahblah : Interviewer: global variable is close, but how exactly ...? : Me: ..... :
|
r*******6 发帖数: 99 | 27 singleton怎么摧毁?不是说singleton的destructor是private?
多了
【在 d**********x 的大作中提到】 : 像这种tricky的真不多。。 : 多数还是考考基本概念,effective cpp和exceptional cpp每个item能够解释就差不多了 : 略复杂点的比如解决singleton的初始化和摧毁顺序,exception在c++里面的应用与困 : 难之类的。。。
|
d**********x 发帖数: 4083 | 28 资源仍然是需要释放的。
设想一下,如果资源不是内存,而是外设的使用权或者引用计数呢
这些东西在程序退出的时候一定要返还给系统。所以这些singleton的设计者一定要提
供destroy方法。有的时候这些资源之间还有相互依赖的关系,就要约定摧毁顺序了。
比较糟糕的是这玩意的摧毁顺序有时和创建顺序不一致。。。
与困
【在 r*******6 的大作中提到】 : singleton怎么摧毁?不是说singleton的destructor是private? : : 多了
|
s********l 发帖数: 998 | 29 能具体说说 怎么写是对的吗?
多谢
【在 d**********x 的大作中提到】 : 资源仍然是需要释放的。 : 设想一下,如果资源不是内存,而是外设的使用权或者引用计数呢 : 这些东西在程序退出的时候一定要返还给系统。所以这些singleton的设计者一定要提 : 供destroy方法。有的时候这些资源之间还有相互依赖的关系,就要约定摧毁顺序了。 : 比较糟糕的是这玩意的摧毁顺序有时和创建顺序不一致。。。 : : 与困
|
d**********x 发帖数: 4083 | 30 保证创建顺序是搞一个函数,然后初始化的时候调用一次,挨个去getInstance
这样的问题是能够保证初始化顺序(如果是static变量的话,初始化顺序可能会乱),
但是就丢掉了lazy eval,会略微影响效率。
destroy一般是定义一个static函数注册到atexit,这样退出的时候就能调用到这些
destroy函数。需要注意的是仍然有可能在销毁多个singleton过程中有一些singleton
要重新构造,因为后面销毁的singleton有一定可能又会用到前面销毁的singleton。。。
另一个办法是将要销毁的singleton的destroy函数统一放到一个带优先级的队列里,按
照依赖顺序排好,然后做一个函数来依照这个队列销毁,注册到atexit。
至于singleton的初始化线程安全问题,先去google一下double locking,再搜索一下
memory barrier,就差不多了。
要提
了。
【在 s********l 的大作中提到】 : 能具体说说 怎么写是对的吗? : 多谢
|
|
|
s********l 发帖数: 998 | 31 多谢 多谢 很张知识
你说的注册到at exit 是说windows的注册表 还是什么啊?
singleton
。。
【在 d**********x 的大作中提到】 : 保证创建顺序是搞一个函数,然后初始化的时候调用一次,挨个去getInstance : 这样的问题是能够保证初始化顺序(如果是static变量的话,初始化顺序可能会乱), : 但是就丢掉了lazy eval,会略微影响效率。 : destroy一般是定义一个static函数注册到atexit,这样退出的时候就能调用到这些 : destroy函数。需要注意的是仍然有可能在销毁多个singleton过程中有一些singleton : 要重新构造,因为后面销毁的singleton有一定可能又会用到前面销毁的singleton。。。 : 另一个办法是将要销毁的singleton的destroy函数统一放到一个带优先级的队列里,按 : 照依赖顺序排好,然后做一个函数来依照这个队列销毁,注册到atexit。 : 至于singleton的初始化线程安全问题,先去google一下double locking,再搜索一下 : memory barrier,就差不多了。
|
j********x 发帖数: 2330 | 32 问道singleton直接就说我坚决抵制,下一步如果不同意直接表示贵司太烂,本人不去
也罢,摔电话走人。
免责声明:模仿有风险。。。
多了
【在 d**********x 的大作中提到】 : 像这种tricky的真不多。。 : 多数还是考考基本概念,effective cpp和exceptional cpp每个item能够解释就差不多了 : 略复杂点的比如解决singleton的初始化和摧毁顺序,exception在c++里面的应用与困 : 难之类的。。。
|
d**********x 发帖数: 4083 | 33 。。。
与困
【在 j********x 的大作中提到】 : 问道singleton直接就说我坚决抵制,下一步如果不同意直接表示贵司太烂,本人不去 : 也罢,摔电话走人。 : 免责声明:模仿有风险。。。 : : 多了
|
d**********x 发帖数: 4083 | 34 http://www.cplusplus.com/reference/cstdlib/atexit/
),
,按
一下
【在 s********l 的大作中提到】 : 多谢 多谢 很张知识 : 你说的注册到at exit 是说windows的注册表 还是什么啊? : : singleton : 。。
|
w****a 发帖数: 710 | 35 模板元编程?
【在 d**********x 的大作中提到】 : C++面试就那么几个经典问题翻来覆去的问。 : 类似的还有一个:如何不用循环、不用递归打印出1 2 3 4 5 6 7 8 9 ... n
|
w****a 发帖数: 710 | 36 template
struct Num
{
enum { Result = Num::Result + 1 };
static void print(){
printf("%d ",Result);
Num::print();
};
};
template <>
struct Num<1>
{
enum { Result = 1 };
static void print(){
printf("%d ",Result);
Num<2>::print();
};
};
template <>
struct Num<10>
{
enum { Result = 10 };
static void print(){
printf("%d ",Result);
};
};
////////////
Num<1> x;
x.print(); |
w****a 发帖数: 710 | |
w*******6 发帖数: 1897 | |
s********l 发帖数: 998 | |
G****A 发帖数: 4160 | 40 in-person interview
Interviewer: how to std::cout some sentences before main() function.
Me: blahblah... global variable ....blahblah
Interviewer: global variable is close, but how exactly ...?
Me: .....
|
|
|
p*****p 发帖数: 379 | 41 void fun() { cout << "aa" << endl; }
static void *a = fun();
类似这样? |
A*****i 发帖数: 3587 | |
l***i 发帖数: 1309 | 43 constructor of a global object will be called before main()
class Object {
public:
Object();
};
Object::Object() {
cout << "my message\n";
}
// define a global object somewhere in .cc or .cxx or .cpp
Object obj;
int main()
{
}
This seems to be an exercise from Stroustrup's book |
G****A 发帖数: 4160 | 44 这个应该是interviewer想要得答案。 The class constructor of a global object。
又一次感觉自己好菜
【在 l***i 的大作中提到】 : constructor of a global object will be called before main() : class Object { : public: : Object(); : }; : Object::Object() { : cout << "my message\n"; : } : // define a global object somewhere in .cc or .cxx or .cpp : Object obj;
|
d**********x 发帖数: 4083 | 45 C++面试就那么几个经典问题翻来覆去的问。
类似的还有一个:如何不用循环、不用递归打印出1 2 3 4 5 6 7 8 9 ... n
【在 G****A 的大作中提到】 : 这个应该是interviewer想要得答案。 The class constructor of a global object。 : 又一次感觉自己好菜
|
l****i 发帖数: 396 | 46 还有些什么经典问题可以说说么?
【在 d**********x 的大作中提到】 : C++面试就那么几个经典问题翻来覆去的问。 : 类似的还有一个:如何不用循环、不用递归打印出1 2 3 4 5 6 7 8 9 ... n
|
d**********x 发帖数: 4083 | 47 像这种tricky的真不多。。
多数还是考考基本概念,effective cpp和exceptional cpp每个item能够解释就差不多了
略复杂点的比如解决singleton的初始化和摧毁顺序,exception在c++里面的应用与困
难之类的。。。
【在 l****i 的大作中提到】 : 还有些什么经典问题可以说说么?
|
B******5 发帖数: 4676 | 48 这咋搞?template?
【在 d**********x 的大作中提到】 : C++面试就那么几个经典问题翻来覆去的问。 : 类似的还有一个:如何不用循环、不用递归打印出1 2 3 4 5 6 7 8 9 ... n
|
d**********x 发帖数: 4083 | 49 和主帖问题同一个思路啊。。用构造函数
【在 B******5 的大作中提到】 : 这咋搞?template?
|
A*****i 发帖数: 3587 | 50 啥意思?不停的new, delete五次然后用一个static放在构造和析构里面让它++?
【在 d**********x 的大作中提到】 : 和主帖问题同一个思路啊。。用构造函数
|
|
|
d**********x 发帖数: 4083 | 51 差不多吧
不过new数组就可以了。
【在 A*****i 的大作中提到】 : 啥意思?不停的new, delete五次然后用一个static放在构造和析构里面让它++?
|
A*****i 发帖数: 3587 | 52 妈的还是不过关
我其实第一反应比那个new delete还傻逼,我想到的是继承十次……
【在 d**********x 的大作中提到】 : 差不多吧 : 不过new数组就可以了。
|
d**********x 发帖数: 4083 | 53 没事,这种都是属于知道就知道,不知道一般当场想不出的
一旦知道了,这一类问题也就都变成渣了
妈的还是不过关
我其实第一反应比那个new delete还傻逼,我想到的是继承十次……
【在 A*****i 的大作中提到】 : 妈的还是不过关 : 我其实第一反应比那个new delete还傻逼,我想到的是继承十次……
|
x*****0 发帖数: 452 | |
d*****n 发帖数: 23 | |
n****e 发帖数: 678 | |
i******t 发帖数: 22541 | |
e*****r 发帖数: 93 | 58 其实还能更简单一点
ostream& out=(cout<<"AA"<
【在 l***i 的大作中提到】 : constructor of a global object will be called before main() : class Object { : public: : Object(); : }; : Object::Object() { : cout << "my message\n"; : } : // define a global object somewhere in .cc or .cxx or .cpp : Object obj;
|
r*********n 发帖数: 4553 | 59 template metaprogramming?
【在 d**********x 的大作中提到】 : C++面试就那么几个经典问题翻来覆去的问。 : 类似的还有一个:如何不用循环、不用递归打印出1 2 3 4 5 6 7 8 9 ... n
|
d**********x 发帖数: 4083 | 60 也可以,编译时递归
【在 r*********n 的大作中提到】 : template metaprogramming?
|
|
|
r*********n 发帖数: 4553 | 61 面试官要真的想通过这些trick出难题,那真是无底洞啊
书上说template metaprogramming是Turing complete,想要什么样子的程序都可以用
编译器搞定。
对了,你说design pattern最多考到singleton吗?还有些很诡异的,比如factory,是
不是不容易考到。上次看到thinking in c++里面讲到Abstract factory 和
Polymorphic factory,头都大了。
【在 d**********x 的大作中提到】 : 也可以,编译时递归
|
d**********x 发帖数: 4083 | 62 不是的
我只是举一个例子。。。singleton一般人都知道,但是很多人不知道其中thread safe
怎么做,很多人不知道怎么顺序初始化并且约定销毁顺序。。。
design pattern是一定要懂的,不过不要痴迷。。。看看<> 或者
Head First吧。。。
【在 r*********n 的大作中提到】 : 面试官要真的想通过这些trick出难题,那真是无底洞啊 : 书上说template metaprogramming是Turing complete,想要什么样子的程序都可以用 : 编译器搞定。 : 对了,你说design pattern最多考到singleton吗?还有些很诡异的,比如factory,是 : 不是不容易考到。上次看到thinking in c++里面讲到Abstract factory 和 : Polymorphic factory,头都大了。
|
r*********n 发帖数: 4553 | 63 Thanks.
safe
【在 d**********x 的大作中提到】 : 不是的 : 我只是举一个例子。。。singleton一般人都知道,但是很多人不知道其中thread safe : 怎么做,很多人不知道怎么顺序初始化并且约定销毁顺序。。。 : design pattern是一定要懂的,不过不要痴迷。。。看看<> 或者 : Head First吧。。。
|
b***m 发帖数: 5987 | |
t*******i 发帖数: 4960 | 65 考这个有意思么?也就是害大家白花时间来准备。
一年前我把 c faq, effective c++, more effective c++ 都看了一遍,可是,现在
全还回去了。 平时也用不上。
【在 G****A 的大作中提到】 : in-person interview : Interviewer: how to std::cout some sentences before main() function. : Me: blahblah... global variable ....blahblah : Interviewer: global variable is close, but how exactly ...? : Me: ..... :
|
r*******6 发帖数: 99 | 66 singleton怎么摧毁?不是说singleton的destructor是private?
多了
【在 d**********x 的大作中提到】 : 像这种tricky的真不多。。 : 多数还是考考基本概念,effective cpp和exceptional cpp每个item能够解释就差不多了 : 略复杂点的比如解决singleton的初始化和摧毁顺序,exception在c++里面的应用与困 : 难之类的。。。
|
d**********x 发帖数: 4083 | 67 资源仍然是需要释放的。
设想一下,如果资源不是内存,而是外设的使用权或者引用计数呢
这些东西在程序退出的时候一定要返还给系统。所以这些singleton的设计者一定要提
供destroy方法。有的时候这些资源之间还有相互依赖的关系,就要约定摧毁顺序了。
比较糟糕的是这玩意的摧毁顺序有时和创建顺序不一致。。。
与困
【在 r*******6 的大作中提到】 : singleton怎么摧毁?不是说singleton的destructor是private? : : 多了
|
s********l 发帖数: 998 | 68 能具体说说 怎么写是对的吗?
多谢
【在 d**********x 的大作中提到】 : 资源仍然是需要释放的。 : 设想一下,如果资源不是内存,而是外设的使用权或者引用计数呢 : 这些东西在程序退出的时候一定要返还给系统。所以这些singleton的设计者一定要提 : 供destroy方法。有的时候这些资源之间还有相互依赖的关系,就要约定摧毁顺序了。 : 比较糟糕的是这玩意的摧毁顺序有时和创建顺序不一致。。。 : : 与困
|
d**********x 发帖数: 4083 | 69 保证创建顺序是搞一个函数,然后初始化的时候调用一次,挨个去getInstance
这样的问题是能够保证初始化顺序(如果是static变量的话,初始化顺序可能会乱),
但是就丢掉了lazy eval,会略微影响效率。
destroy一般是定义一个static函数注册到atexit,这样退出的时候就能调用到这些
destroy函数。需要注意的是仍然有可能在销毁多个singleton过程中有一些singleton
要重新构造,因为后面销毁的singleton有一定可能又会用到前面销毁的singleton。。。
另一个办法是将要销毁的singleton的destroy函数统一放到一个带优先级的队列里,按
照依赖顺序排好,然后做一个函数来依照这个队列销毁,注册到atexit。
至于singleton的初始化线程安全问题,先去google一下double locking,再搜索一下
memory barrier,就差不多了。
要提
了。
【在 s********l 的大作中提到】 : 能具体说说 怎么写是对的吗? : 多谢
|
s********l 发帖数: 998 | 70 多谢 多谢 很张知识
你说的注册到at exit 是说windows的注册表 还是什么啊?
singleton
。。
【在 d**********x 的大作中提到】 : 保证创建顺序是搞一个函数,然后初始化的时候调用一次,挨个去getInstance : 这样的问题是能够保证初始化顺序(如果是static变量的话,初始化顺序可能会乱), : 但是就丢掉了lazy eval,会略微影响效率。 : destroy一般是定义一个static函数注册到atexit,这样退出的时候就能调用到这些 : destroy函数。需要注意的是仍然有可能在销毁多个singleton过程中有一些singleton : 要重新构造,因为后面销毁的singleton有一定可能又会用到前面销毁的singleton。。。 : 另一个办法是将要销毁的singleton的destroy函数统一放到一个带优先级的队列里,按 : 照依赖顺序排好,然后做一个函数来依照这个队列销毁,注册到atexit。 : 至于singleton的初始化线程安全问题,先去google一下double locking,再搜索一下 : memory barrier,就差不多了。
|
|
|
j********x 发帖数: 2330 | 71 问道singleton直接就说我坚决抵制,下一步如果不同意直接表示贵司太烂,本人不去
也罢,摔电话走人。
免责声明:模仿有风险。。。
多了
【在 d**********x 的大作中提到】 : 像这种tricky的真不多。。 : 多数还是考考基本概念,effective cpp和exceptional cpp每个item能够解释就差不多了 : 略复杂点的比如解决singleton的初始化和摧毁顺序,exception在c++里面的应用与困 : 难之类的。。。
|
d**********x 发帖数: 4083 | 72 。。。
与困
【在 j********x 的大作中提到】 : 问道singleton直接就说我坚决抵制,下一步如果不同意直接表示贵司太烂,本人不去 : 也罢,摔电话走人。 : 免责声明:模仿有风险。。。 : : 多了
|
d**********x 发帖数: 4083 | 73 http://www.cplusplus.com/reference/cstdlib/atexit/
),
,按
一下
【在 s********l 的大作中提到】 : 多谢 多谢 很张知识 : 你说的注册到at exit 是说windows的注册表 还是什么啊? : : singleton : 。。
|
w****a 发帖数: 710 | 74 模板元编程?
【在 d**********x 的大作中提到】 : C++面试就那么几个经典问题翻来覆去的问。 : 类似的还有一个:如何不用循环、不用递归打印出1 2 3 4 5 6 7 8 9 ... n
|
w****a 发帖数: 710 | 75 template
struct Num
{
enum { Result = Num::Result + 1 };
static void print(){
printf("%d ",Result);
Num::print();
};
};
template <>
struct Num<1>
{
enum { Result = 1 };
static void print(){
printf("%d ",Result);
Num<2>::print();
};
};
template <>
struct Num<10>
{
enum { Result = 10 };
static void print(){
printf("%d ",Result);
};
};
////////////
Num<1> x;
x.print(); |
w****a 发帖数: 710 | |
w*******6 发帖数: 1897 | |
s********l 发帖数: 998 | |
h****p 发帖数: 87 | |