❶ 基金中的 high water mark什么意思
对冲基金与公募基金的重要区别之一就是高水位线条款(high water marks, 以下简称HWM),这是以美国为代表的西方私募资产管理业,特别是对冲基金业管理费设计的一个关键技术条款。HWM条款可能是对冲基金成功的重要制度保证之一。
平庸对冲基金经理的克星
在西方对冲基金的实际运作中,基于HWM条款的业绩报酬在每个季度、每半年或者每年支付一次。以每年支付一次业绩报酬为例,若投资者投资100万元,在第一年末得到10%的收益,资产变成110万元,如果业绩报酬的提取比例是20%,那么基金经理获得的业绩报酬就是2万元。第二年投资亏损,资产变成105万元,则不能提取业绩报酬。到了第三年,资产增值到120万元,由于HWM条款的规定,投资者不用为第三年末相比第二年末的15万元资产增值支付业绩报酬,只需从超过历史资产价值最高水平的110万元的10万元中计提业绩报酬,相应业绩报酬为5万元,投资者不需要为资产第二次达到110万元支付业绩报酬。也就是说,如果对冲基金在某一期发生了亏损,由于HWM条款规定了不得重复提取业绩报酬,下一期的收益必须在弥补了上一期的亏损,并且使得基金净值达到历史最高水平之后,基金经理才可以从超过历史最高水平的资产增值中提取业绩报酬。 因此HWM条款充分体现了管理费制度对基金经理的激励约束和对投资者的保护功能。
研究表明,HWM条款在对冲基金中确实发挥着积极作用。首先,HWM条款中规定,如果发生亏损,需要弥补了所有亏损之后对冲基金才能够提取业绩报酬,所以在面临亏损时,投资者的利益得到了比较充分的保障。其次,HWM条款有识别好坏基金经理的作用。Aragon和Qian(2007)采用博弈论的方法,通过实证检验发现,在信息不对称的情况下,优秀的对冲基金经理人更愿意采用HWM条款,因为优秀的对冲基金经理自信也确实能够实现更高的投资回报,导致的结果是HWM条款中规定的用盈利来补亏的情况很少发生。相比之下,表现平庸的对冲基金经理不敢采用HWM条款,因为若使用该条款,假设某一年度基金净值由于市场系统因素大幅度上升(而非基金经理的管理水平导致),则大牛市之后,对于平庸的基金经理来说,未来很难超越历史最高的基金净值,HWM条款限制了平庸基金经理未来的业绩报酬收入。
但是,HWM条款也有一些消极影响。在合同即将结束时,最后一期的损失不再需要用未来盈余弥补,不再会影响到投资管理人未来的业绩报酬,所以投资管理人会因为HWM条款的存在而在最后期限中无限增大风险。当对冲基金投资业绩较差、远低于历史最高净值的情况出现时,此时基金经理会使得基金投资组合的波动率显著增大,风险增大,导致客户进行赎回的比例也增大,使对冲基金更容易破产。
改良HWM条款有助基金激励
我国开放式基金中,采取类似HWM条款的主要是博时价值增长基金(采用“价值增长线”条款)和海富通收益增长基金(采用“收益增长线”条款)。另外,博时价值增长的复制基金——博时价值增长贰号采用了“价值增长线”,天治财富增长基金采用的是“动态资产保障线”,后两者只作为基金资产的保底目标,均未与管理费挂钩。
增长线由规定的公式定期计算,只增不减。如果未来的基金单位资产净值低于预先设定的价值增长线,基金管理人将从下一日开始暂停收取基金管理费,直至单位资产净值回到增长线之上。增长线条款与美国对冲基金中的HWM条款有相似之处,都是设定一条只增不减的基准线,区别在于价值增长线作为固定管理费的提取标准,因此具有严格的惩罚机制——当基金单位净值低于价值增长线时,基金将得不到任何管理费。而HWM条款是业绩报酬的提取基准,当基金净值低于HWM时,基金经理只是不能获得业绩报酬,并不影响固定管理费的提取,惩罚机制相对较弱。
既然设定了类似HWM的条款,那么博时增长和海富通收益在同类基金中的表现如何呢?我们采用三个经典的基金业绩衡量指标Sharpe比率、Treynor比率和Jensen比率,将这两只基金置身于同类开放式混合型基金中进行了比较。
经比较发现,博时增长和海富通收益这两只基金的表现都不理想,在同类基金中都排在偏后的位置。同时,晨星2009年5月披露的开放式基金业绩两年和三年的星级排行榜中,这两只基金得到的评级也较低。海富通收益在两年和三年的评级中仅获得一星,博时增长两年的业绩水平虽然得到四星级的评级,但是三年的评级只有三星。产生这种状况的原因是复杂的,我们认为其中的重要原因在于,由于价值增长线条款的存在,基金经理在市场状况好的时候过于保守。因为如果基金净值增长很快,就会提高增长线水平,一旦市场状况变差,基金净值低于增长线的可能性就会大大增加,所以基金经理在牛市中由于担忧失去未来的管理费收入,放弃了进一步获利的机会。
可以印证的事实是,在市场低迷的情况下,两只基金都出现过无法获得管理费收入的情况。比如博时增长2003年是所有开放式基金净值增长率的第一名,但在2005年的熊市中不得不暂停收取管理费,2008年年中再次停收。至2009年5月,该基金净值一直低于价值增长线,无法获得管理费收入。海富通收益也曾在2005年中止提取管理费。基金公司也许意识到了停收管理费的风险,这种价值增长线条款等于是自念“紧箍咒”,自海富通收益之后,国内的开放式基金再也没有一家采用类似条款。
HWM条款虽然有相当的优势,但对于现阶段的公募基金来说,由于投资者的不确定性、社会公众性和风险承受力有限,引入HWM条款时,不应用作是否收取固定管理费的标准,而应作为业绩报酬的提取标准。否则,基金管理者可能在牛市中表现过度保守,在市场低迷的情况下得不到任何管理费收入,投资者不能得到合理回报。基金管理公司从事专户理财或者一对多的理财服务时,完全可以采用标准的高水位线条款,具体设计可由基金公司和客户协商决定。
❷ 浅析nodejs的buffer比较怎么比较的
Buffer结构
Buffer是一个典型的Javascript和C++结合的模块,性能相关部分用C++实现,非性能相关部分用javascript实现。
Node在进程启动时Buffer就已经加装进入内存,并将其放入全局对象,因此无需require
Buffer对象:类似于数组,其元素是16进制的两位数。
Buffer内存分配
Buffer对象的内存分配不是在V8的堆内存中,在Node的C++层面实现内存的申请。
为了高效的使用申请来得内存,Node中采用slab分配机制,slab是一种动态内存管理机制,应用各种*nix操作系统。slab有三种状态:
(1) full:完全分配状态
(2) partial:部分分配状态
(3) empty:没有被分配状态
Buffer的转换
Buffer对象可以和字符串相互转换,支持的编码类型如下:
ASCII、UTF-8、UTF-16LE/UCS-2、Base64、Binary、Hex
字符串转Buffer
new Buffer(str, [encoding]),默认UTF-8
buf.write(string, [offset], [length], [encoding])
Buffer转字符串
buf.toString([encoding], [start], [end])
Buffer不支持的编码类型
通过Buffer.isEncoding(encoding)判断是否支持
iconv-lite:纯JavaScript实现,更轻量,性能更好无需C++到javascript的转换
iconv:调用C++的libiconv库完成
Buffer的拼接
注意 "res.on('data', function(chunk) {})",其中的参数chunk是Buffer对象,直接用+拼接会自动转换为字符串,对于宽字节字符可能会导致乱码产生
解决方法:
(1) 通过可读流中的setEncoding()方法,该方法可以让data事件传递不再是Buffer对象,而是编码后的字符串,其内部使用了StringEncoder模块。
(2) 将Buffer对象暂存到数组中,最后在组装成一个大Buffer让后编码转换为字符串输出。
Buffer在文件I/O和网络I/O中广泛应用,其性能举足轻重,比普通字符串性能要高出很多。
Buffer的使用除了与字符串的转换有性能损耗外,在文件读取时候,有一个highWaterMark设置对性能影响至关重要。
a,highWaterMark设置对Buffer内存的分配和使用有一定影响。
b, highWaterMark设置过小,可能导致系统调用次数过多。
什么时候该用buffer,什么时候不该用 ------ 纯粹的javascript支持unicode码而对二进制不是很支持,当解决TCP流或者文件流的时候,处理流是有必要的,我们保存非utf-8字符串,2进制等等其他格式的时候,我们就必须得使用 ”Buffer“ 。
❸ high-water mark是什么意思
基金中的
high
water
mark意思就基金高水标。
附注:
来源于huttenlocher先生在2009年第三季度,超过了他所谓的高水位线的投资收益弥补投资者的损失,使基金恢复充电费用投资利润。
❹ oracle删5千万数据要多长时间
这个要看你怎么删了
单表还是多表数据
要不要保留回滚
或者要不要保留表结构等等
delete
from
表名
删除数据
表结构还在
可以rollback
需要提交后完成删除动作
drop
table
表名
删除表
表结构与数据全部删除
truncate
table
表名
删除数据
保留表结构
不能回滚
相同点:truncate和不带where子句的delete,
以及drop都会删除表内的数据
不同点:
一.
truncate和
delete只删除数据不删除表的结构(定义)
drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index);
依赖于该表的存储过程/函数将保留,但是变为invalid状态.
二.delete语句是DML,这个操作会放到rollback
segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发.
truncate,drop是DDL,
操作立即生效,原数据不放到rollback
segment中,不能回滚.
操作不触发trigger.
三.delete语句不影响表所占用的extent,
高水线(high
watermark)保持原位置不动
显然drop语句将表所占用的空间全部释放
truncate
语句缺省情况下见空间释放到
minextents个
extent,除非使用reuse
storage;
truncate会将高水线复位(回到最开始).
四
速度,一般来说:
drop>
truncate
>
delete
五.安全性:小心使用drop
和truncate,尤其没有备份的时候.否则哭都来不及
❺ netty3.6.2中写数据的过程,以及写数据写不出去后怎么处理
netty写数据的时候,会先放到一个缓存队列AbstractNioChannel.writeBufferQueue中,这个队列是WriteRequestQueue
Java代码
public void eventSunk(
ChannelPipeline pipeline, ChannelEvent e) throws Exception {
if (e instanceof ChannelStateEvent) {
……
} else if (e instanceof MessageEvent) {
MessageEvent event = (MessageEvent) e;
NioSocketChannel channel = (NioSocketChannel) event.getChannel();
boolean offered = channel.writeBufferQueue.offer(event);//写到channel的writeBufferQueue
assert offered;
channel.worker.writeFromUserCode(channel);
}
}
WriteRequestQueue的offer方法中会根据缓存消息的总大小(字节数)判断是否超过了高水位线highWaterMark,如果第一次超过了超过高水位线,就会fireChannelInterestChanged;后边如果仍然一直往队列放数据,缓存的消息的大小持续超过高水位线的时候,不会再fireChannelInterestChanged。
Java代码
public boolean offer(MessageEvent e) {
boolean success = queue.offer(e);
assert success;
int messageSize = getMessageSize(e);
int newWriteBufferSize = writeBufferSize.addAndGet(messageSize);
int highWaterMark = getConfig().getWriteBufferHighWaterMark();
if (newWriteBufferSize >= highWaterMark) {
if (newWriteBufferSize - messageSize < highWaterMark) {
highWaterMarkCounter.incrementAndGet();
if (!notifying.get()) {
notifying.set(Boolean.TRUE);
fireChannelInterestChanged(AbstractNioChannel.this);
notifying.set(Boolean.FALSE);
}
}
}
return true;
}
fireChannelInterestChanged这个会调到SimpleChannelUpstreamHandler.handleUpstream,触发SimpleChannelUpstreamHandler.channelInterestChanged,可以通过继承这个方法来自定义做些事情。高水位的值可以通过Bootstrap设置,最终会调到DefaultNioSocketChannelConfig.setOption。writeBufferHighWaterMark默认值为64K
Java代码
public boolean setOption(String key, Object value) {
if (super.setOption(key, value)) {
return true;
}
if ("writeBufferHighWaterMark".equals(key)) {
setWriteBufferHighWaterMark0(ConversionUtil.toInt(value));
} else if ("writeBufferLowWaterMark".equals(key)) {
setWriteBufferLowWaterMark0(ConversionUtil.toInt(value));
} else if ("writeSpinCount".equals(key)) {
setWriteSpinCount(ConversionUtil.toInt(value));
} else if ("".equals(key)) {
(() value);
} else if ("receiveBufferSizePredictor".equals(key)) {
setReceiveBufferSizePredictor((ReceiveBufferSizePredictor) value);
} else {
return false;
}
return true;
}
然后在write0的时候会从队列拉数据,拉数据的时候,如果发现本次拉的数据会导致缓存的数据大小(字节)从低水位writeBufferLowWaterMark之上,掉到了低水位之下,即跨过了低水位,会再次触发fireChannelInterestChanged事件。writeBufferLowWaterMark默认值为32K
Java代码
public MessageEvent poll() {
MessageEvent e = queue.poll();
if (e != null) {
int messageSize = getMessageSize(e);
int newWriteBufferSize = writeBufferSize.addAndGet(-messageSize);
int lowWaterMark = getConfig().getWriteBufferLowWaterMark();
if (newWriteBufferSize == 0 || newWriteBufferSize < lowWaterMark) {
if (newWriteBufferSize + messageSize >= lowWaterMark) {//本次拉取,是的缓存数据大小掉到了低水位之下
highWaterMarkCounter.decrementAndGet();
if (isConnected() && !notifying.get()) {
notifying.set(Boolean.TRUE);
fireChannelInterestChanged(AbstractNioChannel.this);
notifying.set(Boolean.FALSE);
}
}
}
}
return e;
}
超过高水位和低于低水位都会触发fireChannelInterestChanged,怎么区分呢?通过AbstractChannel. isWritable(),如果channel的interestOps里边有注册过OP_WRITE,则是不可写的,否则是可写的
Java代码
public boolean isWritable() {
return (getInterestOps() & OP_WRITE) == 0;
}
public int getInterestOps() {
if (!isOpen()) {
return Channel.OP_WRITE;
}
int interestOps = getRawInterestOps();
int writeBufferSize = this.writeBufferSize.get();
if (writeBufferSize != 0) {
if (highWaterMarkCounter.get() > 0) {//还记得这个值,放数据到发送队列的时候值+=1,从队列拉数据出来的时候值-=1
int lowWaterMark = getConfig().getWriteBufferLowWaterMark();
if (writeBufferSize >= lowWaterMark) {//缓存队列数据量,超过高水位,也超过了低水位,意味着高水位>低水位,此时等于注册写操作
interestOps |= Channel.OP_WRITE;
} else {
interestOps &= ~Channel.OP_WRITE;//缓存队列数据量,超过高水位但是低于低水位,意味着低水位>高水位,此时等于没有注册写操作
}
} else {//超过高水位counter<=0,意味着当前数据量小于高水位
int highWaterMark = getConfig().getWriteBufferHighWaterMark();
if (writeBufferSize >= highWaterMark) {//这里,缓存数据量仍然高于高水位.....并发?按道理说channel的处理是单线程处理的,此时等于注册写操作
interestOps |= Channel.OP_WRITE;
} else {
interestOps &= ~Channel.OP_WRITE;
}
}
} else {
interestOps &= ~Channel.OP_WRITE;//写队列没数据,没有注册写操作
}
return interestOps;
}
即,如果超过高水位isWritable()==false,低于低水位isWritable()==true,低水位优先级高于高水位,即如果 当前水位>低水位 则不可写,否则可写
如果在通过netty向某机器写数据,但是写很缓慢,则会导致数据都缓存到netty的发送队列中,如果不做控制,可能会导致full gc/cms gc频繁,甚至最终OOM。所以可以考虑用高水位和低水位的值来控制netty的缓存队列,即用AbstractChannel.isWritable来控制是否继续写,如果AbstractChannel.isWritable==false,则丢弃数据,或者记录发送数据的状态,待后续缓存数据队列水位下降到安全水位后再发送。
❻ oracle中delete,truncate 和 drop的区别
语法
delete from aa
truncate table aa
区别
1.delete from后面可以写条件,truncate不可以。
2.delete from记录是一条条删的,所删除的每行记录都会进日志,而truncate一次性删掉整个页,因此日至里面只记录页释放,简言之,delete from更新日志,truncate基本不,所用的事务日志空间较少。
3.delete from删空表后,会保留一个空的页,truncate在表中不会留有任何页。
4.当使用行锁执行 DELETE 语句时,将锁定表中各行以便删除。truncate始终锁定表和页,而不是锁定各行。
5.如果有identity产生的自增id列,delete from后仍然从上次的数开始增加,即种子不变,而truncate后,种子会恢复初始。
6.truncate不会触发delete的触发器,因为truncate操作不记录各个行删除。
总结
1.truncate和 delete只删除数据不删除表的结构(定义)
drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index); 依赖于该表的存储过程/函数将保留,但是变为invalid状态。
2.delete语句是dml,这个操作会放到rollback segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发
truncate,drop是ddl, 操作立即生效,原数据不放到rollback segment中,不能回滚. 操作不触发trigger。
3.delete语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动
显然drop语句将表所占用的空间全部释放
truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage; truncate会将高水线复位(回到最开始)。
4.速度,一般来说: drop> truncate > delete。
5.安全性:小心使用drop 和truncate,尤其没有备份的时候.否则哭都来不及。
6.使用上,想删除部分数据行用delete,注意带上where子句. 回滚段要足够大. 想删除表,当然用drop
想保留表而将所有数据删除. 如果和事务无关,用truncate即可. 如果和事务有关,或者想触发trigger,还是用delete
如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据。
❼ 详解MySQL中DROP,TRUNCATE 和DELETE的区别
truncate和不带where子句的delete,
以及drop都会删除表内的数据
1.
truncate和
delete只删除数据不删除表的结构(定义)
drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index);
依赖于该表的
存储过程/函数将保留,但是变为invalid状态.
2.delete语句是dml,这个操作会放到rollback
segement中,事务提交之后才生效;如果有相应的trigger,
执行的时候将被触发.
truncate,drop是ddl,
操作立即生效,原数据不放到rollback
segment中,不能回滚.
操作不触发
trigger.
3.delete语句不影响表所占用的extent,
高水线(high
watermark)保持原位置不动
显然drop语句将表所占用的空间全部释放
truncate
语句缺省情况下见空间释放到
minextents个
extent,除非使用reuse
storage;
truncate
会将高水线复位(回到最开始).
4.速度,一般来说:
drop>
truncate
>
delete
5.安全性:小心使用drop
和truncate,尤其没有备份的时候.否则哭都来不及.
使用上,想删除部分数据行用delete,注意带上where子句.
回滚段要足够大.
想删除表,当然用drop
想保留表而将所有数据删除.
如果和事务无关,用truncate即可.
如果和事务有关,或者想触发trigger,还
是用delete.
如果是整理表内部的碎片,可以用truncate跟上reuse
stroage,再重新导入/插入数据/
❽ 播放流媒体时如何显示出缓冲状态,即百分比
这个大概应该这样:1. 数据在缓冲,你暂停了。此时缓冲区没数据了,界面显示0%2. 网络好了,开始收到数据了,缓冲区开始有数据了,你应该设定一个缓冲区充盈度,及当我收到多少数据后开始播放。用你当前收到的数据,除以你设定的充盈度,就是百分比3. 当到达100%,就是你设定的缓冲区满了,就可以播放了不知道这样说你是否明白
❾ 数据库中 drop database与Delete Database的区别是什么
sql中delete,drop
,truncate都代表删除,但3者又有一些区别
1.
truncate和
delete只删除数据不删除表的结构(定义)
drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index);
依赖于该表的存储过程/函数将保留,但是变为invalid状态.
2.delete语句是dml,这个操作会放到rollback
segement中,事务提交之后才生效;如果有相应的trigger,执行的时候将被触发.
truncate,drop是ddl,
操作立即生效,原数据不放到rollback
segment中,不能回滚.
操作不触发trigger.
3.delete语句不影响表所占用的extent,
高水线(high
watermark)保持原位置不动
显然drop语句将表所占用的空间全部释放
truncate
语句缺省情况下见空间释放到
minextents个
extent,除非使用reuse
storage;
truncate会将高水线复位(回到最开始).
4.速度,一般来说:
drop>;
truncate
>;
delete
5.安全性:小心使用drop
和truncate,尤其没有备份的时候.否则哭都来不及
使用上,想删除部分数据行用delete,注意带上where子句.
回滚段要足够大.
想删除表,当然用drop
想保留表而将所有数据删除.
如果和事务无关,用truncate即可.
如果和事务有关,或者想触发trigger,还是用delete.
如果是整理表内部的碎片,可以用truncate跟上reuse
stroage,再重新导入/插入数据
在实际应用中,三者的区别是明确的。
当你不再需要该表时,
用
drop;
当你仍要保留该表,但要删除所有记录时,
用
truncate;
当你要删除部分记录时(always
with
a
WHERE
clause),
用
delete.
而alter是对表结构的修改.
希望对你理解有帮助。