百科问答小站 logo
百科问答小站 font logo



面向对象中接口应该更抽象还是更具象? 第1页

  

user avatar   he-shi-jun 网友的相关建议: 
      

抽象是有成本的,所以抽象必须是有价值的,且价值要能cover成本,这个价值就是应对变化。不变化的东西自然就不必抽象。(当然实践中的问题主要在于,本来觉得不会变的东西后来变了……)

但是就我看来,你的问题并不是抽象和具体的问题——因为按你的描述,你对哪些东西是可变的(需要多态)是很清楚的——你的问题只是代码怎么组织,即CraftOneMat是放在Sys还是IBuildable。实际上CraftOneMat放到IBuildable并没有什么不同(排除编程语言特性限制)。

目前看来,你放在Sys是因为这样反映了你的团队职责划分。但其实因为CraftOneMat调用了IBuildable,所以其实CraftOneMat实质上也定义了IBuildable,除非CraftOneMat接口上还有其他和CraftOneMat无关的东西(但看上去不应该有)。所以在我看来,并没有什么差别。

由于CraftOneMat和IBuildable的定义本身是紧耦合的,所以我个人会比较倾向于G1,但CraftOneMat并不是作为接口方法,而是具体方法,且若你确定该具体方法的逻辑是不会变的,该方法应该是seal/final的。(若编程语言的接口不支持具体方法,改用抽象类即可。)至于团队的职责划分,该接口或抽象类归Sys的人维护,接口/抽象类的具体实现类归做物品的人即可。

以上想法谨供参考。


user avatar   xing-jiankuan 网友的相关建议: 
      

看需求,不要玄学.

没有需求的情况下,你想怎么折腾都行,开心就好。

但现实中有大量的需求,特别是非功能需求。这些需求会驱动设计落地的方案。比如“可维护性”/“可重用性”这个事情就和组织架构的具体形式有非常大的关系。对性能的要求会尽力避免过多的,无意义的分层和转换。对安全性的要求则会希望尽量的隔离,以及关数据存储和传输的加密。监控和数据收集的要求需要AOP那样注入的方式避免干扰业务代码。……

你不能拿着一堆积木倒推需求,然后说应该如何如何。


user avatar   DingpingZhang 网友的相关建议: 
      

离完美的全能本还差几步?——华硕 天选3评测(i7+3070版)

天选系列从诞生至今,一直有着极高的讨论度和不错的销量。无论是二次元属性的天选姬,还是备受好评的「魔幻青」配色都是一道非常靓丽的风景线。

此外,天选系列的前2代总有着特殊的引发讨论技巧:

1代面世时除了其首发AMD的4000系CPU之外,那块45%NTSC色域的144Hz屏幕也成功打破了「高刷屏都是好屏幕」的定律,QLC表面固态硬盘也是2020年华硕非常独家的特色;

2代改进了屏幕刷新率,换上了TLC固态,但性能释放沦为了2021年游戏本基石单位,不支持独显直连更是进一步奠定了其稳定的地位。

这些并没有妨碍天选系列不错的销量,也好在产品经理没有躺在销量数据和拥趸的支持之上,在这次的3代做出了不小的进步。

独显直连有了,性能释放好了,机身还更轻薄了,青天就有了!(x

购入渠道

这次的首发供货非常少,京东渠道出货不到1万台。我是从咸鱼加价400入手的。(可能是经历了去年,居然感觉加价400完全可以接受…)

配置一览

表格漏写了,机器网卡是Intel的AX201

对这样高功耗的i7-12700H、RTX 3070,同时还能有90Wh的电池,机身做到了2.05kg,重量控制非常好。某种程度上完全可以起到部分全能本的职能。

最遗憾的是不支持PD充电。

故外带时要带上1斤4两的240瓦适配器,出行重量骤增。

测试环境/跑分原则

室温保持在24.0°C~26.0°C之间(空调调温,没法做到恒温,望见谅)。

机器在控制台中有3个模式可以选「安静模式」、「性能模式」和「狂飙模式」,可用Fn+F5进行切换。

若无,测试均采用「增强模式」。

除了续航测试使用「集显输出」(iGPU)之外,其他测试均开启MUX的「独显直连」选项。

「独显直连」图形性能更好,「混合输出」续航更好。

所有跑分、帧数测试都会重复5次,每次跑完后静置5分钟再开始下一次,取最高分。

外观

英特尔版天选3的3070显卡只有「日蚀灰」配色可选,无魔幻青。黑色有个小缺点,就是手上的油容易沾染,看上去比较明显。幸好比较好擦。

A面有LOGO「TX」代表天选(和企鹅没啥关系),位于上部。

B面&屏幕素质

B面为一块2160*1440分辨率、165Hz刷新率的屏幕。没有采用16:10的屏幕稍有可惜,下巴2指宽。

屏幕来自京东方。

作为一块广色域屏幕,色域容积142.7%sRGB、101.1%DCI P3;色域覆盖99.9%sRGB、98.9%DCI P3。

sRGB基准下,色准并不理想。有条件的话最好自行校色。

屏幕最高亮度为310尼特,边缘仅250尼特左右,在同定位&同价位游戏本里明显偏低。


C面键盘布局

键盘布局方面,风格延续上一代,WASD采用了反色设计。方向键半高。空格左半部分的突出被取消。数字小键盘相对完整,Delete和小键盘切换按键被做到了一起,对我来说需要适应。键盘手感回弹偏软。

最大可开合角度如图。

机器有运输模式,不插电无法直接开机。

CPU:i7-12700H(90W)

之前已经测过了,而这也不会是最后一台,应该未来很长一段时间时间内很熟悉很主流的CPU。

15轮R20:稳定分6622

除了开头2次之外,之后基本稳定在6620分左右,取后5轮中位数6622。

观察功耗可以发现,第一次较高,第二次逐步下降到100W,第三次出现波动,第四次开始比较平稳,打包功耗90W,IA大约83W,符合跑分曲线。

蓝线打包功耗,橙线IA功耗

大小核频率如图。(蓝线大核频率,橙线小核频率)

R23跑分:多核16619,单核1803

功耗表现如图(蓝线打包功耗,橙线IA功耗)

大小核频率如图(蓝线大核,橙线小核)

显卡:RTX 3070(140W)

RTX 3070是我心目中笔记本最值得选购的旗舰级显卡,处于一个性能与价格的甜区。

跑分

TimeSpy图形分 10261分

FSE图形分:13134

Superposition 1080P Extreme:6637

游戏表现实测

网游

测了DOTA2、CSGO和《彩虹六号·围攻》3款网游在1440P和1080P下的表现。

DOTA2:全最高特效,比赛编号6040722034,完美世界视角。

CSGO:开多核渲染,其他全部最低,创意工坊BenchMark。

彩虹六号围攻:全最高档,性能测试。

可以看出网游部分的1080P和1440P分辨率下,帧数基本非常接近。可以任意按照自己喜好开高。

单机游戏

对比上面的网游,单机中,1440P和1080P分辨率下,帧数差距还是比较大的。帧数和清晰度不可得兼。

续航测试

机器电池为90Wh。

把机器切换至核显输出,系统为「均衡模式」,中心亮度150尼特,开WIFI,关蓝牙,PC Mark 8的Conventional测试,办公场景下的中高负载,成绩比较接近实际使用。

实测续航为5小时15分,Conventional 3.0 Score为3572分。

还好买了个延时相机,现在拍续航方便多了,不再担心错过

烤机/散热测试

室温在25°C附近。

单烤CPU

使用AIDA64中的Stress FPU单烤CPU。

20分钟后,CPU功耗为90W,温度为87°C,大核3.6GHz,小核2.9GHz。

图上可以看出一个小插曲:单烤CPU期间,桌面突然变成一片白…我寻思又不是海涛,给我看一片纯白干甚…之后在任务管理器启动Explorer才恢复正常。

单烤期间功耗如图。

前期会冲到115W左右,前3分钟会保持在约100W(中间有过瞬间掉下去),之后稳定在90W。


单烤显卡

使用Furmark 1.10.6(比较老的版本了,只不过我之前电脑都用这个烤的,所以暂时还没换新版本)。

关抗锯齿、1920*1080、勾选Burn-in和X Burn-in。

20分钟后,GPU温度75.8°C,功耗139.5W,频率1260MHz。

除了偶尔掉到过125W左右,其他时间基本全程在140W左右。

双烤

同时进行上面2项测试。数据取20-30分钟的平均值。

CPU功耗48W,温度为82°C,大核频率2.54GHz,小核频率2.29GHz。

GPU功耗115W,温度78.1°C,频率837MHz。

CPU功耗、GPU功耗与总功耗如图。

从110秒左右开始区域稳定,达到CPU 48W加上GPU 115W的功耗水平。

测试时电脑和分贝仪有固定位置,大概是在这个位置关系,比较接近人耳所听到的噪音,可能会比其他测试者的数据低一些。

烤机全程最高为52.3分贝,总体还算可以接受的水平。

此时键盘表面温度如图。

腕托为室温,WASD区域仅30°C附近比较低,键盘最热的区域在上部,键帽最高温在F8按钮名为48.4°C。中间有一个倒三角区域相对偏热,其他的地方温度都不算很高。

另外,这台机器用瓶盖垫高机身之后,双烤成绩上除了CPU和GPU的频率稍微提高,其他部分几乎完全一致,可能是原本已经有4个出风口充分散热的关系,底壳基本不出风。


拆机

拆机不难,机器底面除了右下角的螺丝之外的11颗螺丝全部拧下。

注意拆的时候右下角一颗螺丝是和后盖一体的,无法取下,但一定一定也要拧松。

先从这个螺丝周围开始撬开,右边撬开之后就比较方便可以拆下了。

机器为双风扇、五热管、四出风口的散热设计。贴纸下面有硬盘和内存。

内存

我这台机器内存是三星的,跑分如图。读写都在56GB/s左右,延迟102.3ns偏高(DDR5目前的通病)

硬盘

硬盘为美光的3400,大文件读写的跑分如图。

ASSSD的10GB读写跑分如图。

CrystalDiskMark的32GB读写跑分如图。

硬盘初始状态没有分盘,全部在一个C盘下,还剩余396GB(图为393是因为我装了测试软件)

机器总结部分

优点

1.机身轻

一拿到手的时候,就能感觉到,机器总体的重量比以往任何一台15.6寸的3070游戏本都要明显轻,这种第一印象是很好的。

在这样的机身重量下,双烤成绩弱于部分更重、更大的游戏本,其实是完全可以接受的。

2.游戏表现达到主流水准

双烤47+115不算特别出色,但已经完全不拉跨了。相比于上一代天选2的3070,那这一代进步非常明显。

游戏的表现也都达到了主流水平。除了个别像2077这样优化不好的游戏,或者像《全战·三国》这样同屏单位多的游戏,其他大部分单机游戏都能1440p开预设的高档位拿到60帧以上,这个成绩是很令人满意的。

3.散热和隔热还行

键盘的键帽温度热区在中间,基本避开了WASD部分,而且腕托很凉快。

同时,噪音比想象中要小很多,也不是特别吵的那种,使用体验是OK的。

缺点

1.屏幕素质有待提高

当价格来到五位数的时候,我认为屏幕最高亮度至少也得有350尼特吧…310尼特真的有点拿不出手了,这点真的不得行啊。

机器的其他硬件已经都没啥问题了,硬盘、内存都没缩,网卡也是AX201,但就是这个屏幕给了个300尼特屏…淦…

同时,作为一块广色域屏幕,在色彩管理上基本没花心思和力气,非常放任。

2.不支持PD充电

这点其实是我感觉特别难受,要是这台机器支持PD,那我就不出二手留下自用了。

不满意的地方在于,明明ROG是支持PD的,而且之后会发售的天选Air也是支持PD的,天选3不支持PD完全是有意而为之的选择,真的感觉很不爽…

这样一来,机身轻的优势完全被不支持PD给削了一大部分。

左:65W GaN;中:100W GaN;右:天选3适配器

我要是出趟门,你猜我更愿意带这三个充电器里左边这两个,还是右边这个?

尤其对我这种有紫米20充电宝的,我就更希望会支持PD了,这样找不到插头还能用充电宝应急。

3.i7+3070版目前只有一个配色

不是很清楚为啥机器没有天选3经典的「魔幻青」配色。倒不是我多喜欢这个颜值,只是黑色真的容易看起来脏。

而且锐龙版3070也有,怎么这Intel版的3070就没这个颜色了…很奇怪。

缺货,需要加价

这个没啥好说的,英特尔版京东放货7000台,锐龙版甚至不到5000台…目前需要加价购买。

购买建议

总得来说,天选3是天选最均衡的一代,这次测试的3070版表现也远超个人的预期。

由于个人原因经常在多个城市之间来往,手头的17.3寸笔记本多有不便,今年也一直在考虑换一台笔记本。天选3差一点就成了我的落脚处,可惜最终由于屏幕不够亮、不支持PD两个主要原因,算是擦肩而过了…

总得来说,如果你对天选系列的外观垂涎已久,那天选3就是目前最值得购买的一代。

如果你需要当一个便携的全能本来用,那记得要把适配器重量也考虑在内。

如果上面提到的2个问题你不在意,又需要换一台12代的新3070游戏本,那目前天选3的3070版是值得考虑的。


至于上面提的2个主要缺点,大家多吐槽吐槽,按照天选以往每年的进步来看,说不定天选4就会更好。


这台机器,原价10299,我10700入手,按惯例一般是自刀300。

不过这台机器涨价买,而我无论如何都不太能接受自己的二手价高于首发价,会有点良心不安,因此折价500,按10200出。

等我视频做完就会放上海鲜二手平台,有兴趣的朋友可以去蹲一下。


user avatar   zhao-ce-33 网友的相关建议: 
      

两天过去了,看的人,关注的人不少,能说得上话的看来是寥寥无几,除了青椒牛老板忆苦思甜了一下,七位靓号豹哥连回答的勇气都木有了,被吓跑了

那我先写一些目前已知的信息,权当是抛砖引玉

先说一下两个现有的低延时(low latency)的gc策略,zgc和shenandoah

zgc应该都很熟悉了,出来有一段时间了,这个是oracle官方团队做的,虽然说是官方团队,但其实是bea jrockit的人写的,以前sun的hotspot和bea的jrockit是早期比较出名的两个jvm实现,hotspot用c++实现,jrockit用c和java实现,说起来还挺好笑的,当时的评测结果是,hotspot更适合客户端,需要快速启动的程序,而jrockit更适合长期运行的程序[1],后来sun和bea都被oracle收购了,这两个jvm也就合二为一,其实更确切一点说就是,合并到hotspot中去,然后jrockit被贡献给了openjdk。然后jrockit的工程师per liden就是后来的zgc的team lead。zgc现在已经做到,大部分gc的latency在1ms以内,平均只有0.1 - 0.2ms之间,基本上无感知了,正常人条件反射的时间是0.25s,也就是250ms,经过训练的运动员,可以达到100ms,眼睛对于动画的感知,在1/60s左右,也就是17ms左右,经过训练的电竞之类的,可能可以达到90或者120fps,也就是8-9ms,就是人的极限了,现在gc最长导致程序的停顿在0.2ms以下,这种级别的停顿,人是不可能感知得到的

shenandoah是red hat的作品,现在red hat被ibm收购了,以前red hat和ibm,都有自己的jvm,分别是开源的iced tea和openj9,后者到现在还在不断出新,据说内存占用上会有一定优势,现在叫terium,北洋的下载网站[2]上对terium和openj9的支持是很好的,更新得很积极。而iced tea在openjdk出来之后,基本上就处于被放弃的状态。那red hat后来基于openjdk,制作了自己的低延时的gc策略,就是shenandoah,shenandoah对比zgc,对硬件的要求相对低一点,但是对用户给出的承诺,也低一点,就像zgc早期,承诺在10ms以内完成全部gc,shenandoah从来没有给过任何这种承诺,也就是说,我尽力。然后官方oracle提供的openjdk的build里面,并不提供shenandoah,被oracle删了,但是其他的openjdk的build,都提供shenandoah这个gc策略,一般认为,zgc更适合客户端程序,shenandoah更适合服务器端程序,因为前者更满足一些硬性指标,比如保证10ms以内一定完成,后者就没有这个承诺,但是相对应的,前者对于资源的消耗也更大,一般要腾出15%左右的内存富余给zgc使用,然后cpu处理能力会有所下降,因为拿去给zgc用了,那相比之下,shenandoah对于这种资源的硬性要求就低,但是它同样也不给这个承诺,更像是随缘,我尽量,风险你自担

这是现有两个低延时gc

那按照新的gc的论文里面写的内容看,zgc和shenandoah虽然都实现了low latency,但是是以牺牲吞吐为代价,也就是需要一定的cpu和内存消耗,你需要为low latency腾出为了实现low latency gc的资源,相应的,等同cpu和内存的硬件的处理能力,就会相应下降一点,这其实也很合理,不能说既要马儿跑,又不让马儿吃草,让机器给你干点活,总要给人家点资源

但是,新的gc策略,简称lxr

认为,可以通过基于引用计数的策略,可以进一步降低对系统资源的占用,让gc在实现低延时的同时,又不需要牺牲太多cpu和内存资源,进而使得吞吐不受影响,所以论文的标题就是:低延时,高吞吐的gc策略

然后给出了一堆的评测结果,对于评测结果,你可能会怀疑,是吧,对比的openjdk 11的结果

但实际上,论文中有具体的validity,意思就是,他们打算把这个gc port到17上去,但是他们同时也对比了17的shenandoah,发现17的shenandoah和11的shenandoah结果几乎是一样的,而且11有backported improviement,也就是在后续版本中,shenandoah的改良,都会回溯到11的高版本中去,所以shenandoah的11没什么问题,17的zgc整体策略改变了,比较难对比,这个期待后续的比较吧

所以11没什么问题,然后期待他们给出17的build

然后说一下实现的过程,这个过程很有意思,他们先用rust开发了一个工具mmtk,然后这个工具提供了openjdk(c++写的)jikes rvm(java写的java研究虚拟机)和v8(c++写的)的绑定,然后再用这个rust写的绑定工具,实现了新的gc策略

从这一点上,可以看出,现在很多软件的研发,都已经从c++上转移到其他语言上去,这并不是坏事,因为c++的代码确实太难阅读了,openjdk的开发进度,其实受到c++语言本身混乱语法颇深,就是你可以感觉到,一大堆人做了好久(接近10年),但是进步相当有限,没什么成果,相比之下,你用其他语言,往往都能做得比c++更快,而且性能更好,就像graal的jit(用java aot实现的工具),什么都没改,直接替换openjdk里面的jit也就是c1/c2,都能在一些时候有高达15%的性能提升,所以现在这个时间点,没有什么太多理由继续沿用c++,当然openjdk本身的开发还要继续,只是源码这些,正在一点一点从c++中转移出去,那最终发展成什么样子,拭目以待了

然后这个gc本身诞生的环境,也很值得玩味

这是一个高校的论文,虽然三作是谷歌,但最重要的一作和二作,都是高校,这就预示了我之前说的,现在的科学和技术的发展,哪怕是技术这种科学的应用面,也越来越多,不再是企业能够推动得了的了,企业的目的是赚钱,但是推动科学技术的进步,更多的是一项事业,所谓事业,就是你要牺牲眼前短期利益,为了长远的发展考虑,那这个投入,都是动不动十年二十年的投入,企业没有那个耐心去等待,所以最好的方式就是,企业出钱,投资到高校等研究机构中去,这样一来可以减轻政府对高校的负担,人也更专业,高校里面教授博士一大堆,每天就是搞研究,企业里面,教授都罕见,教授也不愿意放弃铁饭碗去给你修福报,同时,因为是项目制的,所以搞完研究之后,一拍两散,企业不用负担教授博士们搞完研究离开公司(也就是裁员)的成本,所以这是多赢的局面,我国政府其实也正在推动这种校企合作,产学研嘛

然后这个就很好滴展示了,将来,对于技术的推动和进步,会是怎样的一种局面,除此之外,llvm,graal这些项目,研发主体也都在高校里面,现在是连传统openjdk的开发,也在逐步转移到高校中去,企业搞研究的时代,差不多过去了

所以你看,达摩院开始大面积裁员,湖畔大学关停,但是这些高校的研究成果,开始频频出现,以前关于gc的论文,还有不少是ibm,azul之类的企业发的,现在越来越多是高校发出来的,实际上虽然国内阿里用java的频次比较高,但是你看我写了这么多,有阿里什么事吗?

技术发展到一定阶段,就必然要求更高的研发门槛,就不是随便一个企业的打工仔,就能凭着一腔热血,搞搞搞,就能有所成就的,现在慢慢都过了那个阶段了,像国外贝尔实验室,早就不行了

最后本论文的一作好像是个华人

参考

  1. ^ https://blog.dbi-services.com/a-comparison-of-java-virtual-machines-hotspot-jvm-vs-jrockit-jvm/
  2. ^ https://www.injdk.cn/



  

相关话题

  为何谷歌之类大厂程序员认为敏捷开发是瞎扯淡? 
  如何看待「大部分程序员只会写三年代码」的说法? 
  c中struct 为什么可以在数据结构这样用? 
  ES6的class关键字有没有实现真正的面向对象? 
  udp文件传输的问题,采用nack,怎么处理最后几个包丢失的情况? 
  如何评价《太吾绘卷》的程序代码? 
  国内人写代码的水平跟美国的差距在哪? 
  过度依赖框架有什么不好? 
  java程序员的技术更新那么快,为什么每个技术还要读源码,会使用不就好了吗?技术那么多也学不完啊? 
  请问有什么好的C语言面向对象的扩展的方式?最好是有比较好的项目的源码参考。 

前一个讨论
如何看待射弹核聚变及其前景?
下一个讨论
你很清楚的知道,上司不听你的建议必然会出错,可是他执意坚持自己的做法,你该怎么办?





© 2024-12-22 - tinynew.org. All Rights Reserved.
© 2024-12-22 - tinynew.org. 保留所有权利