l*********3 发帖数: 26 | 1 刚结束了Google电面,Software Engineer职位。
1. 要求存储gmail的日志,给定发信时间,发信人,收信人,要求设计数据库表,存储
日志,并给出制定访问的SQL语句。
2. 如何设计日期时间、发信人、收信人的数据存储方式,节省数据库空间?
3. 给定一段代码,改错,如下:
W * SSS :: getW ( int id ) const
{
Lock( lock_ );
iterator it = find ( id );
if ( it != end() ) {
return * it;
}
W * p = new W( id );
insert( p );
return p;
}
4. 如果同时有许多程序并发执行上述代码,而 find() 的hit percent=99.99%,如何
修改上面的代码改进效率?
大概就是这些,希望对大家有所帮助。求Bless。 |
j********x 发帖数: 2330 | |
w*z 发帖数: 75 | 3 错误时需要 unlock?
【在 l*********3 的大作中提到】 : 刚结束了Google电面,Software Engineer职位。 : 1. 要求存储gmail的日志,给定发信时间,发信人,收信人,要求设计数据库表,存储 : 日志,并给出制定访问的SQL语句。 : 2. 如何设计日期时间、发信人、收信人的数据存储方式,节省数据库空间? : 3. 给定一段代码,改错,如下: : W * SSS :: getW ( int id ) const : { : Lock( lock_ ); : iterator it = find ( id ); : if ( it != end() ) {
|
x***y 发帖数: 633 | 4 1. It seems that receiver is not necessary, as the sender can not send two
emails at the same time.
2. B
3.4.
W * SSS :: getW ( int id )
{
iterator it = find ( id );
if ( it != end() ) {
return * it;
}
Lock( lock_ );
W * p = new W( id );
insert( p );
Unlock(lock_); //not always work, better write a holder class
//tha lock in the constructor and unlocks in the des
return p;
} |
j*****u 发帖数: 1133 | 5 use a reader-writer lock instead of mutual exclusive lock so that readers do
n't block each other
【在 j********x 的大作中提到】 : bless : 最后一个怎么回答?
|
i**9 发帖数: 351 | 6 这个电面是不是跟lz的 background有关系,有点不太常规 |
l*****a 发帖数: 559 | 7 群发?
【在 x***y 的大作中提到】 : 1. It seems that receiver is not necessary, as the sender can not send two : emails at the same time. : 2. B : 3.4. : W * SSS :: getW ( int id ) : { : iterator it = find ( id ); : if ( it != end() ) { : return * it; : }
|
z****o 发帖数: 78 | 8 W * SSS :: getW ( int id )
{
Lock( lock_r );
if( reader == 0) Lock( lock_w)
reader++;
Unlock(lock_r );
iterator it = find ( id );
if ( it != end() ) {
W* p = *it;
Lock( lock_r );
reader--;
if( reader == 0 ) Unlock( lock_w);
Unlock( lock_r );
return p;
}
Lock( lock_w);
W * p = new W( id );
insert( p );
Unlock( lock_w);
return p;
} |
J******e 发帖数: 888 | |
w*****e 发帖数: 385 | 10 bless
【在 l*********3 的大作中提到】 : 刚结束了Google电面,Software Engineer职位。 : 1. 要求存储gmail的日志,给定发信时间,发信人,收信人,要求设计数据库表,存储 : 日志,并给出制定访问的SQL语句。 : 2. 如何设计日期时间、发信人、收信人的数据存储方式,节省数据库空间? : 3. 给定一段代码,改错,如下: : W * SSS :: getW ( int id ) const : { : Lock( lock_ ); : iterator it = find ( id ); : if ( it != end() ) {
|
|
|
j*******2 发帖数: 386 | 11 unlock写得太麻烦。直接goto 到一个__unlock label,然后在那个label 下面写一个
unlock就好了
还有一点就是 new (p)以后需要检查分配是否成功。
【在 z****o 的大作中提到】 : W * SSS :: getW ( int id ) : { : Lock( lock_r ); : if( reader == 0) Lock( lock_w) : reader++; : Unlock(lock_r ); : iterator it = find ( id ); : if ( it != end() ) { : W* p = *it; : Lock( lock_r );
|
b*******s 发帖数: 5216 | 12 Lock(lock)会不会是自动包装的lock
比如Mutex m;
Class Lock
{
public:
Lock(Mutex &) { //here we lock the mutex }
~Lock() { //here we release the mutex}
private:
Mutex & m;
} |
g*********s 发帖数: 1782 | 13 is the code in java?
【在 l*********3 的大作中提到】 : 刚结束了Google电面,Software Engineer职位。 : 1. 要求存储gmail的日志,给定发信时间,发信人,收信人,要求设计数据库表,存储 : 日志,并给出制定访问的SQL语句。 : 2. 如何设计日期时间、发信人、收信人的数据存储方式,节省数据库空间? : 3. 给定一段代码,改错,如下: : W * SSS :: getW ( int id ) const : { : Lock( lock_ ); : iterator it = find ( id ); : if ( it != end() ) {
|
M**u 发帖数: 10158 | 14 Java代码哪这么难看?
存储
【在 g*********s 的大作中提到】 : is the code in java?
|
b*******s 发帖数: 5216 | |
l*****a 发帖数: 559 | 16 同意。
【在 b*******s 的大作中提到】 : 觉得问题还是const和insert(p)
|
j********x 发帖数: 2330 | 17 ok. I thought this was implemented already in the macro :(
so that readers do
【在 j*****u 的大作中提到】 : use a reader-writer lock instead of mutual exclusive lock so that readers do : n't block each other
|