k******r 发帖数: 2300 | 1 用hash table,比方定义 int hTable[256], 然后初始化, . 然后再读字符串, 第一
个字符a,那么 if(
int hTable[256];
hTable['a'] = 0, ..., hTable['z']=0;
char c;
int len = 0;
int maxLen = 0;
while(c=read(str))
{
if(hTable[c]==0)
{
hTable[c]++;
len++;
}
else
{
if(maxLen
{
maxLen = len;
}
len=0;
hTable['a'] = 0, ..., hTable['z']=0;
hTable[c]++;
len++;
}
}
if(maxLen
{
maxLen = len;
len=0;
}
没作调试,可能有BUG,时间度大概是O(N),就是个大概... 阅读全帖 |
|
c*****n 发帖数: 96 | 2 Assuming each item in the hash table is an array of size 2, the first
element is the left child key, the second one is right node key
Node BuildTree (string nodeKey, HashTable hTable)
{
if (node == null)
return null;
Node node = new node(nodeKey);
// build left sub tree
node.lchild = BuildTree(hTable[nodeKey][0], hTable);
// build right sub tree
node.rchild = BuildTree(hTable[nodeKey][1], hTable);
return node;
}
contruct |
|
|
|
C***y 发帖数: 2546 | 5 假设你有个rw lock class
class rwlock{
pubic:
void getReadLock();
void releaseReadLock();
void getWriteLock();
void releaseWriteLock();
};
然后你可以在你的hash table的class里面加个 rwlock的data member
class htable{
private:
rwlock m_lock;
};
在find方法里可以用r lock,insert 方法里面用w lock
void htable::find(...)
{
m_lock.getReadLock();
.
.
.
m_lock.releaseReadLock();
}
void htable::insert(...)
{
m_lock.getWriteLock();
.
.
.
m_lock.releaseWriteLock();
}
get 和release可以用一个auto class包装起来,这样你就不用手动调用release了 |
|
S********0 发帖数: 5749 | 6 从去年11月份开始,一直在本版向各位大牛取经学习。 最近刚刚接了M家的offer,job
hunting终于告一段落,虽然失败了很多,面试拿的也少,但对于一个非cs phd的背景
,已经很知足了。我背景是engineering,主要就是写code,做模拟,能转行主要是因
为学了些并行计算的东西,研究中写了大量的code,读了我们这个领域的一个famous
open source code,从professional programmer里学到了很多实践经验。 虽然有些经
验,但实际找工作工程中大多数公司理都不会理我,Airbnb一个recruiter跟我说过一
些,大概意思就是说每天收到太多简历,对于非CS学生,仅仅从从简历上很难看出什么
, 所以非CS学生争取能多修几门cs的课,把keyword放上去。不然就像我一样,就是内
推也被拒或者石沉大海,这里面包括了很多本版好心的人帮我内推的,有ebay,
linkedin, twitter, oracle 等。 在这里也想对帮助过我的人说声谢谢,以后我也会
帮助国人。
leetcode是从去年11月份yahoo是onsite失败后开始刷的... 阅读全帖 |
|
f*******t 发帖数: 7549 | 7 1.row key是byte[],不管你里面想写什么,最终都要转成它。
2.可以,scan.setStartRow(),scan.setStopRow()
3.hbase以及所有BigTable衍生数据库性能最差的操作是random get,二分查找一个
keyvalue复杂度是O(logN)。数据大了hbase的block cache效率还是不够高。实际应用
中请尽量多使用scan,避免random get,实在不行可能得上memcache和其它优化。另外
hbase会对邻近的数据编码以节省存储空间,random get在读取每个keyvalue的时候都
要解码整个block,性能损失很大。
4和5是同一个问题。每个client的htable.multiput会把不同region的数据分开提交给
对应的服务器。这样如果有多个client,各服务器的负载更平均,对hbase cluster的
整体性能肯定有帮助。
6.你想问的是分成很多个小段的scan吗?scan的时候server会对每个client生成
scanner object,读取的时候互相之间可能有lock contenti... 阅读全帖 |
|