各大直播平台主播的收入计算方式是怎样的?
直播网站到底如何盈利呢?先聊一聊最近直播界的跳槽新闻,原来在斗鱼做炉石传说的主播安德罗妮和他的夫人一起跳槽到了虎牙TV三年年薪1个亿,也就是夫妻两人一年3000万年薪。
另一个,英雄联盟前职业选手PDD从战旗跳槽到熊猫五年3个亿,也就是一年6000万,当然了,这些都是媒体爆出来的,有多少水分,是不是平台方故意做公关,它的真实性我们不去探究。
说主播的盈利模式,先要了解平台的盈利模式
直播平台本身的盈利模式无非是广告加礼物,这两个赢利点都需要流量的支撑。而对于传统秀场直播来说,靠这两个赢利点完全可以盈利了。但斗鱼、熊猫不行,他们的定位是泛娱乐,礼物转化率没有专门做秀场的平台强。而且他们的带宽费用远远比秀场平台要高,因为有很多的直播内容是游戏直播,必须全屏超清。
可以这么说,秀场直播可以自给自足的盈利,而像斗鱼、熊猫走的是泛娱乐的定位,他们更看重的是大流量,所以他们必须要融资才能生存下去。
而想要每轮融资顺利,流量就必须一直往上升,这样才是融资发展的良性循环。在这个商业模式里面,显然流量是核心。没有流量,什么都玩不转。
那提高流量最常规的办法呢?就是去做引流推广。但是我们发现,泛娱乐的直播平台都没有这么做,为什么呢?因为不划算。像秀场直播平台获取一个用户,它给你的平均利润是很高的,可以支撑引流的费用,但泛娱乐的直播平台不行,做引流推广不如“买人气主播”。因为人气主播自带粉丝流量,比如这个主播的固定粉丝人群有30万
我买这个主播,签约一年,就等于买了一年每天30万固定流量。
很多人一开始不相信这些主播能有这么高薪水,即便是相信了,也不觉得这个主播能创造这么大价值,觉得是整个行业的虚假繁荣。
我要告诉你,真的是“超值”的。比如55开,坊间传闻一年3000万年薪签约斗鱼,不管他这个薪水是真是假,我们就按3000万年薪给你算一笔账:
- 55开一般直播有250万观众,砍掉150万,算100万观众,就是100万个独立访客。
- 我们拿所有电商都在做的引流方式DSP举例子,算1毛钱获得一个UV,1毛钱的这个UV是非常非常垃圾的,都是一些垃圾流量,我们就按照这个来算。
- 1毛乘以100万等于10万,而55开每周开播5次,一年就是260天X10万是2600万。也就是说,如果用买流量的方式,要花2600万才能获得55开吸引的流量,你看这个数字 接近3000,我不知道是不是巧合。
那我们来看花2600万买流量斗鱼获得什么?
- 1毛钱的垃圾流量
- 0-15毛的平均停留时间
为什么我拿停留时间做指标呢,因为视频网站的观看时间是,衡量一个视频非常重要的指标。
那3000买55开斗鱼获得什么?
我们知道,一般55开都播5个小时左右,平均都有250万观众,不管这个观众来了又走,按照这个250万观众来算,55开吸引的一个UV观看时间是5个小时,是买流量的多少倍?1200倍
(有几个知友质疑我用的数据,我承认数据用的不精准,真实人气没有100万,我估计100万肯定是没有的,我的预估再30-50万左右,如果按照有些知友说的10万,结论也是没问题的。因为如果严格的算,按照买这种优质的停留时间在5小时的IP,每个肯定在5元以上,我已经缩小了50倍,所以不要纠结数据,给斗鱼留点面子)
所以光以买流量来算,都是超级的,等于买了一个"超级流量"。
除了超级流量呢,还有礼物和广告的收入。通过平台的运作,55开的礼物收入基本上可以填补直播平台年薪的支出(这里的礼物包含礼物和平台业务的广告等合作收入,不是单纯的礼物收入)。再加上广告收入,这其实是用低价买来流量,再倒手高价卖出去,也是很大的收益。
所以对平台来说,买人气主播,就是买了一个会赚钱的一个“超级员工”。
除了超级流量、超级员工之外呢,人气主播对平台来说还是超级影响力。光是3000万年薪这个事件本身就能吸引职业选手来这个平台做直播,也可能吸引一些非职业高端玩家来做直播,还能吸引秀场和娱乐的主播,因为这里人气旺。
所以买人气主播对平台来说肯定是超值的。
普通主播靠年薪能过日子吗?
也是在这种新闻事件的影响下呢,很多人都认为做主播很赚钱,动不动就年薪百万,都在想着“做高人气主播”,觉得也是一个创业出路。
但是跟这种新闻唱反调的,也有爆出很多直播平台拖欠工资的情况。有没有这种情况呢?据我的了解是有这种情况存在的。
你是不是有点迷糊了,为什么一边是大手笔砸千万买主播,另一边都是拖欠小主播工资的情况。我给你分析一下这里面的根本原因。
一个平台的主播,称的上一线的,只有万分之一,甚至更少。每个平台也就四五个一线主播,这些一线主播确实能给平台带来很大的收益,前面已经分析过了。
那收益大,平台给的资源当然就多,而且签约费那么高,平台肯定是想要赚回来的。这就导致了平台会力捧,高薪签约的主播,基本上会把80%的资源都用在一二线主播身上,因为他们收益大。平台会跟主播背后的团队共同造星,这很好理解。
那为什么直播平台对小主播又那么吝啬
最简单的道理,大部分小主播都不能让平台赚钱,反而是亏钱的,因为带宽费很高。
我们来看一下我画的一个图,横向轴是主播,有10000个主播。纵向轴是薪水,上面是高薪。黄色这条线呢,就是主播的薪水。
真正拿到高薪的主播是很少的,而且整个直播平台的主播,能有薪水拿的,可能不到5%,就是签约主播也不多的。你没有盈利价值,平台也不会去签你。
我们再来看蓝色这条线代表流量。不知道大家知不知道长尾理论,虽然大主播有大流量,但是毕竟一二线的,主播就那几个。虽然每个小主播的人气少,但是主播的数量多,整体的流量很庞大,占到一个平台总流量的大多数。
这些小主播对于平台来说,流量是有融资价值的、但不能直接盈利赚钱。
所以你现在可以理解了,对于大主播来说,平台在他们身上砸钱是有回报的。而对于大部分的小主播,平台是在赞助你直播。如果你的人气和吸金能力没到一定程度,你直播一次平台的账面盈利其实是亏一次。
但是平台也不能不要这些小主播,如果都是大主播,那就不叫直播平台了,叫”大咖秀“就行了,它商业模式就跨了,它就不是全民直播了。所以直播平台才需要融资,来填补这些不能直接盈利的小主播的亏损。
基于这些原因,我们得到几个道理:
第一、只有红的主播 才会更红。因为平台会力捧,小主播没有资源很难做高人气。
第二、大主播跟小主播薪水收入差距不成比例。不是说别人1000万年薪,你人气做到他的十分之一就是100万,根本不是这么回事。现在做直播,不要想着靠人气薪水赚钱 ,实际收入比你想象的要少很多。
这也就是我重点要讲的”人气底薪的变现模式 是最差的直播盈利模式”
为什么这么说呢,我们来看三种最常见的盈利模式:
第一种是时薪
直播平台会根据你每小时的直播人气支付你薪水。比如你每小时的人气在10万以上一小时的是多少钱。这种盈利模式,薪水跟人气是画等号的。也就是人气越多,薪水越高。
第二种是礼物
就是网友花钱买礼物送你,然后跟平台对半分,这种模式不依赖于人气。你的个人魅力更加重要。比如一个女孩子人气只有七八千,但是可能收入比十几万人气的游戏主播还高。
第三种是衍生副业
比如你接广告、卖东西做电商,很多大主播都会做,而且在整个电竞直播的初期,这种模式是主播很大的收入来源。但是电商这种模式,是衍生副业里面最初级的商业模式,如果你的电商是卖零食 、卖衣服收益是很低的。
比如1万个人看你的直播,有10%的人买你的东西(这个已经把一些新的观众算进去了,正常应该是在1%-3%之间),客单价算150元,那你做一年直播,营业额是15万,除掉货品成本30%、物流、人力、店铺装修等算40%,剩下有30%纯利润45000元。而一年花在这个45000元上的精力上是很大的,不如把这个精力用心做直播收益更大。
有些人会说 店铺可以找别人合作不用花精力,这种方式要么利润低、要么卖的产品没有竞争力转化率不高,而且还不容易把控销售流程,容易损伤到核心粉丝的利益,得不偿失,不如不做。
那为什么一些*主播都要做电商
一个原因是他们的商业视野不够开阔,毕竟对商业没有经验,能想到的最简单的就是卖淘宝。
第二是因为他们是*主播,观众都在百万以上,你乘以100倍,那一年纯利润有450万还是不错的,值得去做一做。而且他有一个边际效应,量越大、相对利润越高。
但是你人气不高的情况下,这种电商成为衍生副业其实不是一个好的商业模式,特别不适合小主播。你看哪个中小主播靠卖零食赚钱的,没有的。很多都是开起来倒掉了,目前也只有几个*主播做这个是真的赚钱的。
不是说电商模式不可取,而是卖零食收益太低。说个题外话,可以预见的未来,直播肯定能颠覆传统电视购物,或者直播加电商也是一个很大的趋势,就看谁能把他做的有意思。
什么盈利模式能最大化人气变现
衍生副业相比于人气底薪和礼物,它能创造的价值是最大的。但是你的思维不能局限。
我举一个例子,比如你是做炒股直播的,平均直播五六千人看,你的衍生副业是代客理财,,只做20万以上的客户。不管后续新观众进来,那5000个人里有1%的人成为你的客户,那就是50个客户,平均每个客户20万理财金额,就是1000万。
一年20万理财是是很少的,大爷大妈都拿的出来,如果他的业务做的还不错,这50个客户还能介绍身边的朋友成为他的客户,这就是一个好的衍生副业,或者说直播是副业、正业是理财。
所以你一定要定位一个高杠杆的人气变现模式,人气其实没那么重要,千万不要局限于做人气,你的商业模式要开阔一些,思路要广一些。
文艺点的回答:
梦想美得让人窒息,但现实却不是PPT。
一本正经的回答:
谁信谁傻逼!
“身价”或“签约价”并非主播个人拿到的真实收入。网传1700万身价签约某平台的主播Miss日前正式回应:“真实的数字远低于媒体之前的报道。在视频行业,大型节目合作涉及数十人的团队、大量的设备投资等等,千万级公司间合作并不稀奇。本人的所得并没有那么高。”也就是说,网络节目的人力、设备等成本高昂,合作所谈的价格需要涵盖如上成本,最终落入个人主播口袋的只是很少的一部分。据业内人士透露,目前*的主播年收入也就是300万,并且能上百万的并不多。
引自:揭秘直播行业真相:*主播收入300万 观看人数水分达70% 平台都靠融资撑
相较之下,位列2015年《福布斯》名人榜首位的范冰冰,年收入为1.28亿元,不及主播小智。而何炅、汪涵等知名娱乐主持人的年收入则在千万级别,远低于顶尖主播。
这些主播的收入同样令许多企业家甚至企业汗颜。工行董事长姜建清的年薪是200多万,沪深两市的上市公司中,46家2015年的年净利润不足1500万。
直播玩游戏比一线明星、甚至上市企业的收入还高,这样的对比明显不合理。如果事实如此,那明星还不如转型做直播,因为他们比网红更有号召力,直播相较拍戏也轻松很多。
引自: 网络主播年收入过亿?揭秘在造假和亏损中虚假繁荣的直播行业|界面新闻•JMedia
百姓知道上不应该有这种炒作的风气,客观真实的回答问题才是百姓知道之道,百姓知道平台不像直播平台的用户群体那么多屌丝脑残,听风就是雨,这里面大多数都是互联网行业里的人,营销软文能忽悠得了几个行里人,大家的真实感受其实都像上面的兄弟 @周宁远 说的一样
别来*主播年薪千万了,我信还不行嘛
是啊,我们大家都信了,现在的主播是千万富翁,亿万富翁,请接收我们穷屌丝的膜拜吧。不要往下看了,做你的亿万富翁好了。
----------------------------------------------------------智商分隔线----------------------------------------------------------
智障儿童从来不会仔细看下面这些内幕就跳出来说: XXX主播真的有千万收入!就好像他有了千万收入一样,然而连点真凭实据都拿不出来就在那吹以掩饰内心的不安,本着关爱智障儿童的那脆弱的小心灵以及他们泡沫般的心灵寄托,在家打个游戏就躺着成为千万富翁了,你还真是与世隔绝在虚拟世界呆太久了,我加了个分隔线以隔离智障和正常人。
回归理智,当你懂得用脑子思考而不是脚后跟,就会发现这个话题吹的漏洞百出。
我随便列举几个致命的痛点把网上的营销软文打回原形。
1. 你看到的不一定是真实的,平台制造虚假繁荣拉投资。
XX揭露斗鱼虚假人气事件,10.5倍真实人气。
XX与斗鱼撕逼视频曝光-在线播放-优酷网,视频高清在线观看
淘宝店出售刷人气软件
斗鱼tv协议 订阅 关注 龙珠悟空tv协议真实 在线人数观众 稳定
显示观看人数与真实人数倍数算法对于程序来说就是几段code的事嘛,这很简单,想有多大水分都可以。至于刷人气,抓肉鸡这个古老行业一直就隐秘而伟大的存在着,从刷票到DDOS攻击,在各个领域发挥着余热。
直播平台作假 + 主播刷人气 = X*真实人气
这个X要是真解出来会让你很心凉,你可以经常在某些直播平台看到某个直播间瞬间涨了1万人气然后过段时间瞬间又没了的现象。
2. 直播平台运营成本以及年盈利,你当开公司是过家家呢?
YY财报
YY高管解读财报:一季度游戏直播亏9000万元
网络视频行业运营成本
财报数据还原优土亏损内情:带宽成本超同行70% 为份额砍成本
作为一个做视频直播的互联网公司,服务器,办公场地,公司员工(尤其是程序员工资支出)这都是基础成本;
带宽!带宽!带宽! 重要的事情说三遍。带宽成本每年都是以亿为单位计算的,这不是开玩笑,加上中国糟糕的网络环境,CDN服务也要上。
有兴趣的可以自己算下,超清码率,一个直播间动不动几十万上百万的人气,带宽成本是多少,硬服务器硬件成本多少。
一位业内人士透露,一些直播平台的带宽取本月带宽峰值月结。那么按照目前行业内给出的2000万元/T/月的带宽成本,假设按照现在的标准,提供给用户720P的清晰度,相当于每位用户需要1.5M左右的带宽,那么如果峰值时有100万观众观看直播,就需要1.5T左右带宽。照此计算,该直播平台理论的带宽成本为每月3000万元左右。但由于直播会应用IDC、CDN等技术,也就是允许多人并发同时操作,实际占用的带宽和费用也低于这一数字,有的可能会除以3,为每月1000万元左右。
但如果峰值超过100万观众的话,这一成本还会水涨船高。以虎牙TV为例,其投资方欢聚时代2015年四季度财报显示,欢聚时代2015年第四季度来自虎牙直播的营收为人民币1.336亿元(约合2060万美元),第四季度带宽支出(包含虎牙直播与其他业务)为人民币1.611亿元(约合2490万美元),每月带宽开支超过5000万元人民币。
前YY执行副总裁曹津在接受媒体采访时表示,“以运营电竞直播比赛平台来说,目前宽带的成本大概占据了整体运营成本的40%,内容费用包括版权、赛事和战队的成本占比在30%-40%之间,20%为公司的运营成本。有的公司还需要在推广上再付出20%左右的成本,做下来很烧钱。”
不过,直播平台虽然运营成本高昂,但收入方式也较为多样。据了解,直播平台的收入主要有广告收入、用户打赏(包括礼物、道具等)、与游戏公司及外设厂商进行合作等。有业内人士透露,广告等收入并不能完全覆盖大多数直播平台的成本,许多直播平台目前还是依靠“融资”支撑。
引自:揭秘直播行业真相:*主播收入300万 观看人数水分达70% 平台都靠融资撑
内容成本就不说了,转播别人的直播是需要交版权钱的。给直播平台写软文打广告也是要钱的。
从财报数据上来看,刨除这些硬性成本,还能剩下多少钱给主播?
成本已经都这么高了,我们依然要给主播开出千万上亿年薪,再说开公司是赚钱的,你当是做慈善呢?你当投资人是傻B吗?
直播平台:我们为XX主播开出了每年千万的年薪。
吃瓜投资人:什么!你把我的血汗钱投资给了一个只会玩游戏的路人甲?你TM是个傻B吗?有那钱投资周杰伦一样的明星代言带来的效益不是更大?还我血汗钱!我TM掐死你!!!
直播平台:SKJDKFJ*&^$##HJKFGHJ
PS: 那些搞运营的家伙写软文有勇气往上亿吹的时候,看着每个月不足5位数的工资短信,有没有过黯然神伤?吹完牛想没想过人家主播交的个税够你一个运营赚几辈子了,呵呵。
3. 直播平台不健康的运营模式,满满的都是套路。
刷礼物的土豪其实内部运营人员
揭秘:视频直播秀场的那些“托儿”--百度百家
行业乱象被揭露
央视揭秘网络直播黑色产业链 映客等托儿打赏现象遭批
中国很多互联网公司都追求在最短的时间内实现盈利,不注重长期效益,尤其在互联网创业大潮的影响下,90%以上的创业公司都死了,剩下的就看烧钱还能烧多久,创业维艰一点不夸张,不少公司在没有多少用户的时候就想着怎么赚用户钱了。网页游戏的套路现在用到直播平台上了,我就不揭露网页游戏后台用于运营统计真实玩家充值多少的系统了,游戏里人民币玩家看到游戏公司专门开发一个运营系统用来耍你,你会不会砸键盘?游戏里的托已经是这个行业里完全公开的了,所以网页游戏火得快,死得也快,因为正常人只要不是傻X,不会被托坑第二次。只能想办法拉新手入坑,但是能骗到的人越来越少,这个模式就运作不下去了。
作为围观群众,我就静静地看着伪土豪刷礼物装逼。主播要真是千万年薪,还在乎刷的这点小礼物?
《让子弹飞》都白看了。
你得先让豪绅出钱,豪绅捐了,百姓才会跟着捐。钱到手后,豪绅的钱,如数奉还,百姓的钱,三七分。
转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消这种小把戏的最终的结果可想而知,能骗多久?
转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消转存失败重新上传取消
没油水可榨了,卷钱跑吧。像网页游戏一样,该关服的关服,该跑路的跑路。
一些专门培养网红主播的经纪公司,与直播平台私下商定协议,以超低的内部价格、甚至是0为代价,用傀儡账号给旗下的主播刷礼物。主播和平台虽然分文不得,却能引发趋同效应,既能惹得一些不明真相的“土豪”拿真金白银“对刷”,也能让更多观众关注这位主播。
类似的暗箱操作诞生于“秀场”起步时期,一直延续到今天。知情者称几乎每个平台、有一定流量的直播间内,都存在这样的“黄牛号”。
引自: 网络主播年收入过亿?揭秘在造假和亏损中虚假繁荣的直播行业|界面新闻•JMedia
4.利害相关:
炒作主播千万亿万年薪话题受益者:
- 天天熬夜满眼血丝的主播
- 用心险恶的直播平台运营工作人员
- 做空资本企图上市的直播平台
炒作主播千万亿万年薪话题受害者:
- 梦想自己能成为千万富翁入行后被套路的屌丝主播
- 人傻钱多被虚假数字忽悠的投资人
- 和内部托斗气刷礼物的吃瓜群众
----------------------------------------------------------小结----------------------------------------------------------
现在国内这些直播公司的运营团队真的是low到爆,好好的网上直播让这帮人搞得像传销一样,各个平台都在炒作拉投资招人,可惜资金又不足,不能像其他大公司一样大手笔的烧钱,只要资金链一断,就要面临着洗牌倒闭的危险。BAT级别的公司对于直播是否能真正盈利持观望态度,行业技术门槛低容易被复制,又有很多制约因素比如内容审核,何况某些直播平台主要靠女主播打擦边球赚钱,一旦跨越红线*部门就会介入监管,直接把违法直播平台关停直至涉及到法律责任(参考某播放器),硬件成本投入占比例过大,产业目前很难做大,现在泡沫又这么大,所以都没有投入很大资金到这个领域。目前的知名各大直播平台融资情况非常不乐观,有的平台融到的钱都不够一个小创业公司烧半年的。
我这里大胆的推测,不出一年时间,所有直播平台将面临大规模洗牌,*部门介入监管,融资的钱烧的差不多了,一旦其中某家平台涉黄触犯了法律红线,一死一大片,精明的投资人觉得有风险一定会撤资,何况现在直播平台都是靠着融资勉强撑着,那些梦想躺着玩游戏把钱赚了的小朋友们白日梦就破碎了。
在这里说了这么,其实就是希望直播平台能够健康发展,良性循环,不要急功近利,最值钱的是你的那些真实用户,而不是那些虚假的数字,得人心者得天下,在互联网行业里,得用户者得天下!虽然炒作是一种运营手段,但是泡沫终究是泡沫,泡沫破灭了还是回归到现实的,挖掘更多的盈利模式,放远眼光,才是正道。
上一篇: 快播王欣:AI是将转椅与高墙相连的关键
下一篇: 在探索*编程的路上,嗨,你也来吗!
推荐阅读
-
各大直播平台主播的收入计算方式是怎样的?
-
SSM三大框架基础面试题-一、Spring篇 什么是Spring框架? Spring是一种轻量级框架,提高开发人员的开发效率以及系统的可维护性。 我们一般说的Spring框架就是Spring Framework,它是很多模块的集合,使用这些模块可以很方便地协助我们进行开发。这些模块是核心容器、数据访问/集成、Web、AOP(面向切面编程)、工具、消息和测试模块。比如Core Container中的Core组件是Spring所有组件的核心,Beans组件和Context组件是实现IOC和DI的基础,AOP组件用来实现面向切面编程。 Spring的6个特征: 核心技术:依赖注入(DI),AOP,事件(Events),资源,i18n,验证,数据绑定,类型转换,SpEL。 测试:模拟对象,TestContext框架,Spring MVC测试,WebTestClient。 数据访问:事务,DAO支持,JDBC,ORM,编组XML。 Web支持:Spring MVC和Spring WebFlux Web框架。 集成:远程处理,JMS,JCA,JMX,电子邮件,任务,调度,缓存。 语言:Kotlin,Groovy,动态语言。 列举一些重要的Spring模块? Spring Core:核心,可以说Spring其他所有的功能都依赖于该类库。主要提供IOC和DI功能。 Spring Aspects:该模块为与AspectJ的集成提供支持。 Spring AOP:提供面向切面的编程实现。 Spring JDBC:Java数据库连接。 Spring JMS:Java消息服务。 Spring ORM:用于支持Hibernate等ORM工具。 Spring Web:为创建Web应用程序提供支持。 Spring Test:提供了对JUnit和TestNG测试的支持。 谈谈自己对于Spring IOC和AOP的理解 IOC(Inversion Of Controll,控制反转)是一种设计思想: 在程序中手动创建对象的控制权,交由给Spring框架来管理。IOC在其他语言中也有应用,并非Spring特有。IOC容器实际上就是一个Map(key, value),Map中存放的是各种对象。 将对象之间的相互依赖关系交给IOC容器来管理,并由IOC容器完成对象的注入。这样可以很大程度上简化应用的开发,把应用从复杂的依赖关系中解放出来。IOC容器就像是一个工厂一样,当我们需要创建一个对象的时候,只需要配置好配置文件/注解即可,完全不用考虑对象是如何被创建出来的。在实际项目中一个Service类可能由几百甚至上千个类作为它的底层,假如我们需要实例化这个Service,可能要每次都搞清楚这个Service所有底层类的构造函数,这可能会把人逼疯。如果利用IOC的话,你只需要配置好,然后在需要的地方引用就行了,大大增加了项目的可维护性且降低了开发难度。 Spring中的bean的作用域有哪些? 1.singleton:该bean实例为单例 2.prototype:每次请求都会创建一个新的bean实例(多例)。 3.request:每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP request内有效。 4.session:每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP session内有效。 5.global-session:全局session作用域,仅仅在基于Portlet的Web应用中才有意义,Spring5中已经没有了。Portlet是能够生成语义代码(例如HTML)片段的小型Java Web插件。它们基于Portlet容器,可以像Servlet一样处理HTTP请求。但是与Servlet不同,每个Portlet都有不同的会话。 Spring中的单例bean的线程安全问题了解吗? 概念用于理解:大部分时候我们并没有在系统中使用多线程,所以很少有人会关注这个问题。单例bean存在线程问题,主要是因为当多个线程操作同一个对象的时候,对这个对象的非静态成员变量的写操作会存在线程安全问题。 有两种常见的解决方案(用于回答的点): 1.在bean对象中尽量避免定义可变的成员变量(不太现实)。 2.在类中定义一个ThreadLocal成员变量,将需要的可变成员变量保存在ThreadLocal(线程本地化对象)中(推荐的一种方式)。 ThreadLocal解决多线程变量共享问题(参考博客):https://segmentfault.com/a/1190000009236777 Spring中Bean的生命周期: 1.Bean容器找到配置文件中Spring Bean的定义。 2.Bean容器利用Java Reflection API创建一个Bean的实例。 3.如果涉及到一些属性值,利用set方法设置一些属性值。 4.如果Bean实现了BeanNameAware接口,调用setBeanName方法,传入Bean的名字。 5.如果Bean实现了BeanClassLoaderAware接口,调用setBeanClassLoader方法,传入ClassLoader对象的实例。 6.如果Bean实现了BeanFactoryAware接口,调用setBeanClassFacotory方法,传入ClassLoader对象的实例。 7.与上面的类似,如果实现了其他*Aware接口,就调用相应的方法。 8.如果有和加载这个Bean的Spring容器相关的BeanPostProcessor对象,执postProcessBeforeInitialization方法。 9.如果Bean实现了InitializingBean接口,执行afeterPropertiesSet方法。 10.如果Bean在配置文件中的定义包含init-method属性,执行指定的方法。 11.如果有和加载这个Bean的Spring容器相关的BeanPostProcess对象,执行postProcessAfterInitialization方法。 12.当要销毁Bean的时候,如果Bean实现了DisposableBean接口,执行destroy方法。 13.当要销毁Bean的时候,如果Bean在配置文件中的定义包含destroy-method属性,执行指定的方法。 Spring框架中用到了哪些设计模式? 1.工厂设计模式:Spring使用工厂模式通过BeanFactory和ApplicationContext创建bean对象。 2.代理设计模式:Spring AOP功能的实现。 3.单例设计模式:Spring中的bean默认都是单例的。 4.模板方法模式:Spring中的jdbcTemplate、hibernateTemplate等以Template结尾的对数据库操作的类,它们就使用到了模板模式。 5.包装器设计模式:我们的项目需要连接多个数据库,而且不同的客户在每次访问中根据需要会去访问不同的数据库。这种模式让我们可以根据客户的需求能够动态切换不同的数据源。 6.观察者模式:Spring事件驱动模型就是观察者模式很经典的一个应用。 7.适配器模式:Spring AOP的增强或通知(Advice)使用到了适配器模式、Spring MVC中也是用到了适配器模式适配Controller。 还有很多。。。。。。。 @Component和@Bean的区别是什么 1.作用对象不同。@Component注解作用于类,而@Bean注解作用于方法。 2.@Component注解通常是通过类路径扫描来自动侦测以及自动装配到Spring容器中(我们可以使用@ComponentScan注解定义要扫描的路径)。@Bean注解通常是在标有该注解的方法中定义产生这个bean,告诉Spring这是某个类的实例,当我需要用它的时候还给我。 3.@Bean注解比@Component注解的自定义性更强,而且很多地方只能通过@Bean注解来注册bean。比如当引用第三方库的类需要装配到Spring容器的时候,就只能通过@Bean注解来实现。 @Configuration public class AppConfig { @Bean public TransferService transferService { return new TransferServiceImpl; } } <beans> <bean id="transferService" class="com.kk.TransferServiceImpl"/> </beans> @Bean public OneService getService(status) { case (status) { when 1: return new serviceImpl1; when 2: return new serviceImpl2; when 3: return new serviceImpl3; } } 将一个类声明为Spring的bean的注解有哪些? 声明bean的注解: @Component 组件,没有明确的角色 @Service 在业务逻辑层使用(service层) @Repository 在数据访问层使用(dao层) @Controller 在展现层使用,控制器的声明 注入bean的注解: @Autowired:由Spring提供 @Inject:由JSR-330提供 @Resource:由JSR-250提供 *扩:JSR 是 java 规范标准 Spring事务管理的方式有几种? 1.编程式事务:在代码中硬编码(不推荐使用)。 2.声明式事务:在配置文件中配置(推荐使用),分为基于XML的声明式事务和基于注解的声明式事务。 Spring事务中的隔离级别有哪几种? 在TransactionDefinition接口中定义了五个表示隔离级别的常量:ISOLATION_DEFAULT:使用后端数据库默认的隔离级别,Mysql默认采用的REPEATABLE_READ隔离级别;Oracle默认采用的READ_COMMITTED隔离级别。ISOLATION_READ_UNCOMMITTED:最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读。ISOLATION_READ_COMMITTED:允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生ISOLATION_REPEATABLE_READ:对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生。ISOLATION_SERIALIZABLE:最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。但是这将严重影响程序的性能。通常情况下也不会用到该级别。 Spring事务中有哪几种事务传播行为? 在TransactionDefinition接口中定义了八个表示事务传播行为的常量。 支持当前事务的情况:PROPAGATION_REQUIRED:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。PROPAGATION_SUPPORTS: 如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。PROPAGATION_MANDATORY: 如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。(mandatory:强制性)。 不支持当前事务的情况:PROPAGATION_REQUIRES_NEW: 创建一个新的事务,如果当前存在事务,则把当前事务挂起。PROPAGATION_NOT_SUPPORTED: 以非事务方式运行,如果当前存在事务,则把当前事务挂起。PROPAGATION_NEVER: 以非事务方式运行,如果当前存在事务,则抛出异常。 其他情况:PROPAGATION_NESTED: 如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于PROPAGATION_REQUIRED。 二、SpringMVC篇 什么是Spring MVC ?简单介绍下你对springMVC的理解? Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。 Spring MVC的工作原理了解嘛? image.png Springmvc的优点: (1)可以支持各种视图技术,而不仅仅局限于JSP; (2)与Spring框架集成(如IoC容器、AOP等); (3)清晰的角色分配:前端控制器(dispatcherServlet) , 请求到处理器映射(handlerMapping), 处理器适配器(HandlerAdapter), 视图解析器(ViewResolver)。 (4) 支持各种请求资源的映射策略。 Spring MVC的主要组件? (1)前端控制器 DispatcherServlet(不需要程序员开发) 作用:接收请求、响应结果,相当于转发器,有了DispatcherServlet 就减少了其它组件之间的耦合度。 (2)处理器映射器HandlerMapping(不需要程序员开发) 作用:根据请求的URL来查找Handler (3)处理器适配器HandlerAdapter 注意:在编写Handler的时候要按照HandlerAdapter要求的规则去编写,这样适配器HandlerAdapter才可以正确的去执行Handler。 (4)处理器Handler(需要程序员开发) (5)视图解析器 ViewResolver(不需要程序员开发) 作用:进行视图的解析,根据视图逻辑名解析成真正的视图(view) (6)视图View(需要程序员开发jsp) View是一个接口, 它的实现类支持不同的视图类型(jsp,freemarker,pdf等等) springMVC和struts2的区别有哪些? (1)springmvc的入口是一个servlet即前端控制器(DispatchServlet),而struts2入口是一个filter过虑器(StrutsPrepareAndExecuteFilter)。 (2)springmvc是基于方法开发(一个url对应一个方法),请求参数传递到方法的形参,可以设计为单例或多例(建议单例),struts2是基于类开发,传递参数是通过类的属性,只能设计为多例。 (3)Struts采用值栈存储请求和响应的数据,通过OGNL存取数据,springmvc通过参数解析器是将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过reques域传输到页面。Jsp视图解析器默认使用jstl。 SpringMVC怎么样设定重定向和转发的? (1)转发:在返回值前面加"forward:",譬如"forward:user.do?name=method4" (2)重定向:在返回值前面加"redirect:",譬如"redirect:http://www.baidu.com" SpringMvc怎么和AJAX相互调用的? 通过Jackson框架就可以把Java里面的对象直接转化成Js可以识别的Json对象。具体步骤如下 : (1)加入Jackson.jar (2)在配置文件中配置json的映射 (3)在接受Ajax方法里面可以直接返回Object,List等,但方法前面要加上@ResponseBody注解。 如何解决POST请求中文乱码问题,GET的又如何处理呢? (1)解决post请求乱码问题: 在web.xml中配置一个CharacterEncodingFilter过滤器,设置成utf-8; <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> (2)get请求中文参数出现乱码解决方法有两个: ①修改tomcat配置文件添加编码与工程编码一致,如下: <ConnectorURIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/> ②另外一种方法对参数进行重新编码: String userName = new String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8") ISO8859-1是tomcat默认编码,需要将tomcat编码后的内容按utf-8编码。 Spring MVC的异常处理 ? 统一异常处理: Spring MVC处理异常有3种方式: (1)使用Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver; (2)实现Spring的异常处理接口HandlerExceptionResolver 自定义自己的异常处理器; (3)使用@ExceptionHandler注解实现异常处理; 统一异常处理的博客:https://blog.csdn.net/ctwy291314/article/details/81983103 SpringMVC的控制器是不是单例模式,如果是,有什么问题,怎么解决? 是单例模式,所以在多线程访问的时候有线程安全问题,不要用同步,会影响性能的,解决方案是在控制器里面不能写成员变量。(此题目类似于上面Spring 中 第5题 有两种解决方案) SpringMVC常用的注解有哪些? @RequestMapping:用于处理请求 url 映射的注解,可用于类或方法上。用于类上,则表示类中的所有响应请求的方法都是以该地址作为父路径。 @RequestBody:注解实现接收http请求的json数据,将json转换为java对象。 @ResponseBody:注解实现将conreoller方法返回对象转化为json对象响应给客户。 SpingMvc中的控制器的注解一般用那个,有没有别的注解可以替代? 一般用@Controller注解,也可以使用@RestController,@RestController注解相当于@ResponseBody + @Controller,表示是表现层,除此之外,一般不用别的注解代替。 如果在拦截请求中,我想拦截get方式提交的方法,怎么配置? 可以在@RequestMapping注解里面加上method=RequestMethod.GET。 怎样在方法里面得到Request,或者Session? 直接在方法的形参中声明request,SpringMVC就自动把request对象传入。 如果想在拦截的方法里面得到从前台传入的参数,怎么得到? 直接在形参里面声明这个参数就可以,但必须名字和传过来的参数一样。 如果前台有很多个参数传入,并且这些参数都是一个对象的,那么怎么样快速得到这个对象? 直接在方法中声明这个对象,SpringMVC就自动会把属性赋值到这个对象里面。 SpringMVC中函数的返回值是什么? 返回值可以有很多类型,有String, ModelAndView。ModelAndView类把视图和数据都合并的一起的。 SpringMVC用什么对象从后台向前台传递数据的? 通过ModelMap对象,可以在这个对象里面调用put方法,把对象加到里面,前台就可以拿到数据。 怎么样把ModelMap里面的数据放入Session里面? 可以在类上面加上@SessionAttributes注解,里面包含的字符串就是要放入session里面的key。 SpringMvc里面拦截器是怎么写的: 有两种写法,一种是实现HandlerInterceptor接口,另外一种是继承适配器类,接着在接口方法当中,实现处理逻辑;然后在SpringMvc的配置文件中配置拦截器即可: <!-- 配置SpringMvc的拦截器 --> <mvc:interceptors> <!-- 配置一个拦截器的Bean就可以了 默认是对所有请求都拦截 --> <bean id="myInterceptor" class="com.zwp.action.MyHandlerInterceptor"></bean> <!-- 只针对部分请求拦截 --> <mvc:interceptor> <mvc:mapping path="/modelMap.do" /> <bean class="com.zwp.action.MyHandlerInterceptorAdapter" /> </mvc:interceptor> </mvc:interceptors> 注解原理: 注解本质是一个继承了Annotation的特殊接口,其具体实现类是Java运行时生成的动态代理类。我们通过反射获取注解时,返回的是Java运行时生成的动态代理对象。通过代理对象调用自定义注解的方法,会最终调用AnnotationInvocationHandler的invoke方法。该方法会从memberValues这个Map中索引出对应的值。而memberValues的来源是Java常量池 三、Mybatis篇 什么是MyBatis? MyBatis是一个可以自定义SQL、存储过程和高级映射的持久层框架。 讲下MyBatis的缓存 MyBatis的缓存分为一级缓存和二级缓存,一级缓存放在session里面,默认就有, 二级缓存放在它的命名空间里,默认是不打开的,使用二级缓存属性类需要实现Serializable序列化接口, 可在它的映射文件中配置<cache/> Mybatis是如何进行分页的?分页插件的原理是什么? 1)Mybatis使用RowBounds对象进行分页,也可以直接编写sql实现分页,也可以使用Mybatis的分页插件。 2)分页插件的原理:实现Mybatis提供的接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql。 举例:select * from student,拦截sql后重写为:select t.* from (select * from student)t limit 0,10 简述Mybatis的插件运行原理,以及如何编写一个插件? 1)Mybatis仅可以编写针对ParameterHandler、ResultSetHandler、StatementHandler、 Executor这4种接口的插件,Mybatis通过动态代理, 为需要拦截的接口生成代理对象以实现接口方法拦截功能, 每当执行这4种接口对象的方法时,就会进入拦截方法, 具体就是InvocationHandler的invoke方法,当然, 只会拦截那些你指定需要拦截的方法。 2)实现Mybatis的Interceptor接口并复写intercept方法, 然后在给插件编写注解,指定要拦截哪一个接口的哪些方法即可, 记住,别忘了在配置文件中配置你编写的插件。 Mybatis动态sql是做什么的?都有哪些动态sql?能简述一下动态sql的执行原理不? 1)Mybatis动态sql可以让我们在Xml映射文件内, 以标签的形式编写动态sql,完成逻辑判断和动态拼接sql的功能。 2)Mybatis提供了9种动态sql标签:trim|where|set|foreach|if|choose|when|otherwise|bind。 3)其执行原理为,使用OGNL从sql参数对象中计算表达式的值, 根据表达式的值动态拼接sql,以此来完成动态sql的功能。 #{}和${}的区别是什么? 1)#{}是预编译处理,${}是字符串替换。 2)Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值(有效的防止SQL注入); 3)Mybatis在处理${}时,就是把${}替换成变量的值。 为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里? Hibernate属于全自动ORM映射工具, 使用Hibernate查询关联对象或者关联集合对象时, 可以根据对象关系模型直接获取,所以它是全自动的。 而Mybatis在查询关联对象或关联集合对象时, 需要手动编写sql来完成,所以,称之为半自动ORM映射工具。 Mybatis是否支持延迟加载?如果支持,它的实现原理是什么? 1)Mybatis仅支持association关联对象和collection关联集合对象的延迟加载, association指的就是一对一,collection指的就是一对多查询。 在Mybatis配置文件中, 可以配置是否启用延迟加载lazyLoadingEnabled=true|false。 2)它的原理是,使用CGLIB创建目标对象的代理对象, 当调用目标方法时,进入拦截器方法, 比如调用a.getB.getName, 拦截器invoke方法发现a.getB是null值, 那么就会单独发送事先保存好的查询关联B对象的sql, 把B查询上来,然后调用a.setB(b), 于是a的对象b属性就有值了, 接着完成a.getB.getName方法的调用。 这就是延迟加载的基本原理。 MyBatis与Hibernate有哪些不同? 1)Mybatis和hibernate不同,它不完全是一个ORM框架, 因为MyBatis需要程序员自己编写Sql语句, 不过mybatis可以通过XML或注解方式灵活配置要运行的sql语句, 并将java对象和sql语句映射生成最终执行的sql, 最后将sql执行的结果再映射生成java对象。 2)Mybatis学习门槛低,简单易学,程序员直接编写原生态sql, 可严格控制sql执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发, 例如互联网软件、企业运营类软件等,因为这类软件需求变化频繁, 一但需求变化要求成果输出迅速。但是灵活的前提是mybatis无法做到数据库无关性, 如果需要实现支持多种数据库的软件则需要自定义多套sql映射文件,工作量大。 3)Hibernate对象/关系映射能力强,数据库无关性好, 对于关系模型要求高的软件(例如需求固定的定制化软件) 如果用hibernate开发可以节省很多代码,提高效率。 但是Hibernate的缺点是学习门槛高,要精通门槛更高, 而且怎么设计O/R映射,在性能和对象模型之间如何权衡, 以及怎样用好Hibernate需要具有很强的经验和能力才行。 总之,按照用户的需求在有限的资源环境下只要能做出维护性、 扩展性良好的软件架构都是好架构,所以框架只有适合才是最好。 MyBatis的好处是什么? 1)MyBatis把sql语句从Java源程序中独立出来,放在单独的XML文件中编写, 给程序的维护带来了很大便利。 2)MyBatis封装了底层JDBC API的调用细节,并能自动将结果集转换成Java Bean对象, 大大简化了Java数据库编程的重复工作。 3)因为MyBatis需要程序员自己去编写sql语句, 程序员可以结合数据库自身的特点灵活控制sql语句, 因此能够实现比Hibernate等全自动orm框架更高的查询效率,能够完成复杂查询。 简述Mybatis的Xml映射文件和Mybatis内部数据结构之间的映射关系? Mybatis将所有Xml配置信息都封装到All-In-One重量级对象Configuration内部。 在Xml映射文件中,<parameterMap>标签会被解析为ParameterMap对象, 其每个子元素会被解析为ParameterMapping对象。 <resultMap>标签会被解析为ResultMap对象, 其每个子元素会被解析为ResultMapping对象。 每一个<select>、<insert>、<update>、<delete> 标签均会被解析为MappedStatement对象, 标签内的sql会被解析为BoundSql对象。 什么是MyBatis的接口绑定,有什么好处? 接口映射就是在MyBatis中任意定义接口,然后把接口里面的方法和SQL语句绑定, 我们直接调用接口方法就可以,这样比起原来了SqlSession提供的方法我们可以有更加灵活的选择和设置. 接口绑定有几种实现方式,分别是怎么实现的? 接口绑定有两种实现方式,一种是通过注解绑定,就是在接口的方法上面加 上@Select@Update等注解里面包含Sql语句来绑定, 另外一种就是通过xml里面写SQL来绑定,在这种情况下, 要指定xml映射文件里面的namespace必须为接口的全路径名. 什么情况下用注解绑定,什么情况下用xml绑定? 当Sql语句比较简单时候,用注解绑定;当SQL语句比较复杂时候,用xml绑定,一般用xml绑定的比较多 MyBatis实现一对一有几种方式?具体怎么操作的? 有联合查询和嵌套查询,联合查询是几个表联合查询,只查询一次, 通过在resultMap里面配置association节点配置一对一的类就可以完成; 嵌套查询是先查一个表,根据这个表里面的结果的外键id, 去再另外一个表里面查询数据,也是通过association配置, 但另外一个表的查询通过select属性配置。 Mybatis能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区别? 能,Mybatis不仅可以执行一对一、一对多的关联查询, 还可以执行多对一,多对多的关联查询,多对一查询, 其实就是一对一查询,只需要把selectOne修改为selectList即可; 多对多查询,其实就是一对多查询,只需要把selectOne修改为selectList即可。 关联对象查询,有两种实现方式,一种是单独发送一个sql去查询关联对象, 赋给主对象,然后返回主对象。另一种是使用嵌套查询,嵌套查询的含义为使用join查询, 一部分列是A对象的属性值,另外一部分列是关联对象B的属性值, 好处是只发一个sql查询,就可以把主对象和其关联对象查出来。 MyBatis里面的动态Sql是怎么设定的?用什么语法? MyBatis里面的动态Sql一般是通过if节点来实现,通过OGNL语法来实现, 但是如果要写的完整,必须配合where,trim节点,where节点是判断包含节点有 内容就插入where,否则不插入,trim节点是用来判断如果动态语句是以and 或or 开始,那么会自动把这个and或者or取掉。 Mybatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式? 第一种是使用<resultMap>标签,逐一定义列名和对象属性名之间的映射关系。 第二种是使用sql列的别名功能,将列别名书写为对象属性名, 比如T_NAME AS NAME,对象属性名一般是name,小写, 但是列名不区分大小写,Mybatis会忽略列名大小写,
-
什么直播最赚钱?哪个平台的主播收入高?
-
小红书大产品部架构 小红书产品概览--经过性能、稳定性、成本等多个维度的详细评估,小红书最终决定选择基于腾讯云星海自研硬件的SA2云服务器作为主力机型使用。结合其秒级的快速扩缩、超强兼容和平滑迁移能力,小红书在抵御上亿次用户访问、保证系统稳定运行的同时,也实现了成本的大幅降低。 星海SA2云服务器是基于腾讯云星海的首款自研服务器。腾讯云星海作为自研硬件品牌,通过创新的高兼容性架构、简洁可靠的自主设计,结合腾讯自身业务以及百万客户上云需求的特点,致力于为云计算时代提供安全、稳定、性能领先的基础架构产品和服务。如今,星海SA2云服务器也正在为越来越多的企业提供低成本、高效率、更安全的弹性计算服务。 以下是与小红书SRE总监陈敖翔的对话实录。 问:请您介绍一下小红书及其主要商业模式? 小红书是一个面向年轻人的生活方式平台,在这里,他们发现了向上、多元的真实世界。小红书日活超过 3500 万,月活跃用户超过 1 亿,日均笔记曝光量达 80 亿。小红书由社交平台和在线购物两大部分组成。与其他线上平台相比,小红书的内容基于真实的口碑分享,播种不止于线上,还为线下实体店赋能。 问:围绕业务发展,小红书的系统架构经历了怎样的变革和演进? 系统架构变化不大,影响最深的是资源开销。过去三年,资源开销大幅增加,同比增长约 10 倍。在此背景下,我们努力进行优化,包括很早就开始使用 K8S 进行资源调度。到 18 年年中,绝大多数服务已经完全实现了容器化。 问:目前小红书系统架构中的计算基础设施建设和布局是怎样的? 我们目前的建设方式可以简单描述为星型结构。腾讯云在上海的一个区是我们的计算中心,承载着我们的核心数据和在线业务。在外围,我们还有两个数据中心进行计算分流,同时承担灾备和线上业务双活的角色。 与其他新兴电子商务互联网公司类似,小红书的大部分计算能力主要用于线下数据分析、模型训练和在线推荐等平台。随着业务的发展,对算力的需求也在加速增长。
-
腾讯视频直播 02-推流-美颜滤镜 同样,腾讯云提供了 setBeautyFilter 方法来设置美颜风格、磨皮程度、美白程度和泛红程度 //style 磨皮风格:0:平滑 1:自然 2:朦胧 //美容级别:0-9。值为 0 时关闭美颜效果。默认值:0,关闭美颜效果。 //美白级别:取值 0-9。值为 0 时,将关闭美白效果。默认值:0,关闭美白效果。 //ruddyLevel:取值范围为 0-9。值为 0 时关闭美白效果。默认值:0,关闭美白效果。 public boolean setBeautyFilter(int style, int beautyLevel, int whiteningLevel, int ruddyLevel);; public boolean setBeautyFilter(int style, int beautyLevel, int whiteningLevel, int ruddyLevel) 滤镜 setFilter 方法可以设置滤镜效果,滤镜本身是一个直方图文件。setSpecialRatio 方法可以设置滤镜的程度,从 0 到 1,越大滤镜效果越明显,默认值为 0.5。 Bitmap bitmap = BitmapUtils.decodeResource(getResources, R.drawable.langman); if (mLivePusher) if (mLivePusher ! = null) { mLivePusher.setFilter(bmp); } 控制摄像头 腾讯云 sdk 默认为前置摄像头(可以通过修改 TXLivePushConfig 的配置函数 setFrontCamera 来修改默认值),调用一次 switchCamera 就切换一次,注意切换摄像头前要确保 TXLivePushConfig 和 TXLivePusher 对象已经初始化。 mLivePushConfig.setFrontCamera(true); // 默认前置摄像头。 mLivePusher.switchCamera; //切换摄像头。 ⑦ 设置徽标水印 腾讯视频云目前支持两种设置水印的方式:一种是在流媒体 SDK 中设置水印,原理是在 SDK 中对视频进行编码前在画面中设置水印。另一种方式是在云端设置水印,即由云端解析视频并添加水印标识。 建议使用 SDK 添加水印,因为在云端添加水印会有问题。下面是添加水印的 SDK 介绍: //设置视频水印 mLivePushConfig.setWatermark(BitmapFactory.decodeResource(getResources,R.drawable.watermark), 10, 10); // 最后两个参数是视频的水印。 //最后两个参数是水印位置的 X 轴和 Y 轴坐标。 mLivePusher.setConfig(mLivePushConfig); 如果需要对水印图像的位置进行模型适配,则需要调用水印规范化接口。 /设置视频水印 mLivePushConfig.setWatermark(mBitmap, 0.02f, 0.05f, 0.2f); //参数为水印图像。 //参数包括水印图像的位图、水印位置的 X 轴坐标、水印位置的 Y 轴坐标和水印宽度。后三个参数的范围是 [0,1]。 // 最后两个参数是水印位置的 X 轴坐标和 Y 轴坐标。 mLivePusher.setConfig(mLivePushConfig); TXLivePushConfig 中的 setHardwareAcceleration 方法可以启用或禁用硬件编码。 if (mHWVideoEncode){ if (mLivePushConfig ! = null) { if (Build.VERSION.SDK_INT < 18){ Toast.makeText(getApplicationContext, "Hardware acceleration failed, current phone API level is too low (min 18)"、 Toast.LENGTH_SHORT).show; mHWVideoEncode = false; } } } } mLivePushConfig.setHardwareAcceleration(mHWVideoEncode ? TXLiveConstants.ENCODE_VIDEO_HARDWARE : TXLiveConstants.ENCODE_VIDEO_SOFTWARE); mLivePusher.setConfig(mLivePushConfig); // 如果您不确定何时启用硬件加速,建议将其设置为 ENCODE_VIDEO_AUTO。 // 默认情况下启用软件编码,但如果手机的 CPU 使用率超过 80% 或帧速率为 10,SDK 将自动切换到硬件编码。 ⑨ 后台推流 在常规模式下,一旦应用程序进入后台,摄像头捕捉数据的能力就会被 Android 禁用,这意味着 SDK 无法继续捕捉和编码音频和视频数据。如果我们什么都不做,故事就会按照下面的脚本发展: 阶段 1(背景剪切后 10 秒 ->)- CDN 无法将视频流传输给观众,因为没有数据,观众看到的是主帧。 阶段 2(10 秒-> 70 秒)--观众一方的播放器因无法接收到直播流而退出,房间里空无一人。 第 3 阶段(70 秒后)--服务器直接断开了推送流媒体的 RTMP 链接,主播需要重新打开直播才能继续。 主播可能只是短暂地接了一个紧急电话,但各云提供商的安全措施会迫使主播的直播提前结束。 1) 设置 setPauseFlag 在开始推流之前,使用 TXLivePushConfig 的 setPauseImg 接口设置一个等待图像,其含义建议为 "主播将暂时离开,稍后再回来"。
-
Grid++Report 锐浪报表开发常见问题解答集锦-报表设计 问:怎样在设计时打印预览报表? 答:为了及时查看报表的设计效果,Grid++Report 报表设计应用程序提供了四种查看视图:普通视图、页面视图、预览视图与查询视图。通过窗口下边的 Tab 按钮可以在四种视图中任意切换。在预览视图中查看报表的打印预览效果,在查询视图中查看报表的查询显示效果。如果在报表的记录集提供了数据源连接串与查询 SQL,在进入预览视图与查询视图时会利用数据源连接串与查询 SQL 从数据源中自动取数,否则 Grid++Report 将自动生成模拟数据进行模拟打印预览与查询显示。注意:在预览视图与查询视图中看到的报表运行结果有可能与在你程序中的最终运行结果有差异,因为在报表的生成过程中我们可以在程序中对报表的生成行为进行一定的控制。 问:怎样用 Grid++Report 设计交叉表? 答:Grid++Report 没有提供专门实现交叉表的功能,其它的报表构件提供的交叉表功能一般也比较死板和功能有限。利用 Grid++Report 的编程接口可以做出灵活多变,功能丰富的交叉表。示例程序 CrossTab 就是一个实现交叉表的例子程序,认真领会此例子程序,你就可以做出自己想要各种交叉表,并能提取一些共用代码,便于重复使用。 问:怎样设置整个报表的缺省字体? 答:设置报表主对象的字体属性,也就是设置了整个报表的缺省字体。如果改变报表主对象的字体属性,则没有专门的设置字体属性的子对象的字体属性也跟随改变。同样每个报表节与明细网格也有字体属性,他们的字体属性也就是其拥有的子对象的缺省字体。 问:怎样在打印时限制一页的输出行数? 答:设定明细网格的内容行的‘每页行数(RowsPerPage)’属性即可。另外要注意‘调节行高(AdjustRowHeight)’属性值:为真时根据页面的输出高度自动调整行的高度,使整个页面的输出区域充满。为假时按设计时的高度输出行。 问:怎样显示中文大写金额? 答:将对象的“格式(Format)”属性设为 “$$” 及可,可以设置格式的对象有:字段(IGRField)、参数(IGRParameter)、系统变量(IGRSystemVarBox)与综合文字框(IGRMemoBox),其中综合文字框是在报表式上设格式。 问:能否实现自定义纸张与票据打印? 答:Grid++Report 完全支持自定义纸张的打印,只要在报表设定时在页面设置中选定自定义纸张,并指定准确的纸张尺寸。当然要在最终输出时得道合适的打印结果,输出打印机必须支持自定义纸张打印。Windows2000/XP/2003 操作系统上可以在打印机上定义自定义纸张,也可以采用这种方式实现自定义纸张打印。 问:怎样实现 0 值不打印? 答:直接设置格式串就可以,在“数字格式”设置对话框中选定“0 不显示”,就会得到合适的格式串。也可以通过直接录入格式串来指定 0 不显示,但格式串必须符合 Grid++Report 的规定格式。另一种实现办法是在报表获取明细记录数据时,在 BeforePostRecord 事件中将值为零的字段设为空,调用字段的 Clear 方法将字段置为空。 问:怎样实现多栏报表? 答:在明细网格上设‘页栏数(PageColumnCount)’属性值大于 1 即可。通过 Grid++Report 的“页栏输出顺序”还可以指定多栏报表的输出顺序是“先从上到下”还是“先从左到右”。 问:如何实现票据套打? 答:Grid++Report 为实现票据套打做了很多专门的安排:报表设计器提供了页面设计模式,按照设定的纸张尺寸显示设计面板,如果将空白票据的扫描图设为设计背景图,在定位报表内容的输出位置会非常方便。报表部件可以设定打印类别,非套打输出的内容在套打打印模式下就不会输出。 问:Grid++Report 有没有横向分页功能? 答:回答是肯定的,在列的总宽度超过打印页面的输出宽度时,Grid++Report 可以另起新页输出剩余的列,如果左边存在锁定列,锁定列可以在后面的新页中重复输出,这样可以保证关键数据列在每一页都有输出。仔细体会 Grid++Report 提供的多种打印适应策略,选用最合适的方式。Grid++Report 的多种打印适应策略为开发动态报表提供了很好的支持。 问:怎样实现报表本页小计功能? 答:定义一个报表分组,将本分组定义为页分组,在本分组的分组头与分组尾上定义统计。页分组就是在每页产生一个分组项,在每页的上端与下端都会分别显示页分组的分组头与分组尾,页分组不用定义分组依据字段。 报表运行 问:怎样与数据库建立连接? 答:如果在设计报表时指定了数据集的数据源连接串与查询 SQL 语句,Grid++Report 采用拉模式直接从数据源取得报表数据,Grid++Report 利用 OLE DB 从数据源取数,OLE DB 提供了广泛的数据源操作能力。如果 Grid++Report 的数据来源采用推模式,即 Grid++Report 不直接与数据库建立连接,各种编程语言/平台都提供了很好的数据库连接方式,并且易于操作,应用程序在报表主对象(IGridppReport)的 FetchRecord 事件中将数据传入,例子程序提供了各种编程语言填入数据的通用方法,对C++Builder 和 Delphi 还进行了专门的包装,直接关联 TDataSet 对象也可以将 TDataSet 对象中的数据传给报表。 问:打印时能否对打印纸张进行自适应?支持表格的折行打印吗? 答:Grid++Report 在打印时采用多种适应策略,通过设置明细网格(IGRDetailGrid)的‘打印策略(PrintAdaptMethod)’属性指定打印策略。(1)丢弃:按设计时列的宽度输出,超出范围的内容不显示。(2)绕行:按设计时列的宽度输出,如果在当前行不能完整输出,则另起新行进行输出。(3)缩放适应:对所有列的输出宽度进行按比例地缩放,使总宽度等于页面的输出宽度。(4)缩小适应:如果列的总宽度小于页面的输出宽度,对所有列的输出宽度进行按比例地缩小,使总宽度等于页面的输出宽度。(5)横向分页:超范围的列在新页中输出。(6)横向分页并重复锁定列。 问:如何改变缺省打印预览窗口的窗口标题? 答:改变报表主对象的‘标题(Title)’属性即可。 问:利用集合对象的编程接口取子对象的接口引用,但不是自己期望的结果。 答:Grid++Report中所有集合对象的下标索引都是从 1 开始,另按对象的名称查找对象的接口引用时,名称字符是不区分大小写的。 问:怎样在运行时控制报表中各个对象的可见性?即怎样在运行时显示或隐藏对象? 答:在报表主对象(GridppReport)的 SectionFormat 事件中设定相应报表子对象的可见(Visible)属性即可。 问:报表主对象重新载入数据,设计器中为什么没有反映新载入的数据? 答:应调用 IGRDesigner 的 Reload 方法。 问:怎样实现不进入打印预览界面,直接将报表打印出来?
-
各大直播平台主播的收入计算方式是怎样的?