wechat

为什么 Java 不支持类多重继承?

▼魔方 西西 提交于 2020-10-02 09:50:03
作者:Yujiaao https://segmentfault.com/a/1190000019962661 我发现这个问题很难回答,因为答案可能不会让面试官满意,在大多数情况下,面试官正在寻找答案中的关键点,如果你提到这些关键点,面试官会很高兴。 在 Java 中回答这种棘手问题的关键是准备好相关主题, 以应对后续的各种可能的问题。 这是非常经典的问题,与 为什么 String 在 Java 中是不可变 的很类似; 这两个问题之间的相似之处在于它们主要是由 Java 创作者的设计决策使然。 为什么 Java 不支持类多重继承, 可以考虑以下两点: 1、 第一个原因围绕钻石💎形继承问题产生的歧义 考虑一个类 A 有 foo() 方法, 然后 B 和 C 派生自 A, 并且有自己的 foo() 实现,现在 D 类使用多个继承派生自 B 和 C。 如果我们只引用 foo(), 编译器将无法决定它应该调用哪个 foo(),这也称为 Diamond 问题,因为这个继承方案的结构类似于菱形,见下图: A foo() / \ / \ foo() B C foo() \ / \ / D foo() 即使我们删除钻石的顶部 A 类并允许多重继承,我们也将看到这个问题含糊性的一面。如果你把这个理由告诉面试官,他会问为什么 C++ 可以支持多重继承而 Java不行。 嗯,在这种情况下

BCIduino整理|EEG信号的伪迹来源及去除方法

喜夏-厌秋 提交于 2020-10-01 18:56:09
关于伪迹来源,这里有比较系统的整理: https://zhuanlan.zhihu.com/p/42681420 归纳了两类伪迹,一类是受试者自身的原因导致的(心电/肌电/眼电/运动/出汗等),另一类是外部干扰等引起的(工频/静电/接触不良/设备间等其他电磁波干扰/)。 这里有一些简单的去除方法: https://cloud.tencent.com/developer/article/1540172 https://www.1xuezhe.exuezhe.com/Qk/art/274529?dbcode=1&flag=2 1.避免伪迹产生; 2.直接删除带伪迹的脑电信号; 3.用一些简单的滤波方法(回归方法/伪迹减法等)去除伪迹,但是都存在可能把有用脑电信号误删除的问题。 在BCIduino使用过程中,OpenBCI_GUI接收到的数据是原始数据,通过lsl向外传出的数据也是原始数据,因此如果在使用过程中有较多的伪迹混入了脑电信号中,开发者在后续处理中要有一定的去除伪迹的方法。 #本篇由BCIduino脑机接口开源社区整理(公众号“BCIduino脑机接口社区”)。BCIduino脑机接口社区由来自北京航空航天大学、康奈尔大学、北京大学、首都医科大学等硕博发起成立,欢迎扫下面码加入社群(如果码过期了,可以添加wechat:cheitech,要求加入)

SpringCloud 应用在 Kubernetes 上的最佳实践 — 线上发布(可回滚)

∥☆過路亽.° 提交于 2020-10-01 17:01:15
作者 | 长门 **导读:**本篇是《SpringCloud 应用在 Kubernetes 上的最佳实践》系列文章的第七篇,主要介绍了新功能上线时,如何尽快减少对线上用户的影响?发布系统需要提供回滚到前一个或前几个版本的能力,达到快速恢复线上业务的目的。 相关文章推荐: 《SpringCloud 应用在 Kubernetes 上的最佳实践 —— 开发篇》 《SpringCloud 应用在 Kubernetes 上的最佳实践 — 部署篇(开发部署)》 《SpringCloud 应用在 Kubernetes 上的最佳实践 — 部署篇(工具部署)》 《SpringCloud 应用在 Kubernetes 上的最佳实践 — 线上发布(可灰度)》 《SpringCloud 应用在 Kubernetes 上的最佳实践 — 诊断(线上联调)》 《SpringCloud 应用在 Kubernetes 上的最佳实践 — 线上发布(可监控)》 前言 通常一次应用的线上发布就表示了一次新功能的上线。在上线过程中,可能发生一些非预期的情况,如新版本软件有 bug,或者功能不达预期,就会影响了线上客户的使用。为了尽快减少对线上用户的影响,发布系统需要提供回滚到前一个或前几个版本的能力。达到快速恢复线上业务的目的。 从应用的部署变更层次来看,可以分为以下三层: 所以对应了以下的回滚场景: 回滚应用内的配置

Java多线程 开发中避免死锁的八种方法

跟風遠走 提交于 2020-10-01 09:00:18
原文链接: https://blog.csdn.net/qq_33229669/article/details/108552331?utm_medium=distribute.pc_feed.none-task-blog-personrec_tag-6.nonecase&depth_1-utm_source=distribute.pc_feed.none-task-blog-personrec_tag-6.nonecase&request_id=5f6435ebdfc5717f9a1d8903 1. 设置超时时间 使用JUC包中的Lock接口提供的tryLock方法. 该方法在获取锁的时候, 可以设置超时时间, 如果超过了这个时间还没拿到这把锁, 那么就可以做其他的事情, 而不是像 synchronized 如果没有拿到锁会一直等待下去. boolean tryLock(long time, TimeUnit unit) throws InterruptedException; 造成超时的原因有很多种:发生了死锁, 线程进入了死循环, 线程逻辑复杂执行慢. 到了超时时间, 那么就获取锁失败, 就可以做一些记录操作, 例如 打印错误日志, 发送报警邮件,提示运维人员重启服务等等. 如下的代码演示了 使用tryLock 来避免死锁的案例. 线程1 如果拿到了锁1 ,

为啥阿里巴巴规定要在 @Transactional 指定 rollbackFor?

余生颓废 提交于 2020-09-30 12:36:14
推荐阅读: 《Java开发手册(嵩山版)》最新发布 阿里巴巴Java开发手册规范提示:方法【edit】需要在 Transactional 注解指定rollbackFor或者在方法中显示的rollback。 1.异常的分类 先来看看异常的分类 error是一定会回滚的,这里Exception是异常,他又分为运行时异常RuntimeException和非运行时异常 可查的异常(checked exceptions): Exception下除了RuntimeException外的异常 不可查的异常(unchecked exceptions): RuntimeException及其子类和错误(Error) 如果不对运行时异常进行处理,那么出现运行时异常之后,要么是线程中止,要么是主程序终止。 如果不想终止,则必须捕获所有的运行时异常,决不让这个处理线程退出。队列里面出现异常数据了,正常的处理应该是把异常数据舍弃,然后记录日志。不应该由于异常数据而影响下面对正常数据的处理。 非运行时异常是RuntimeException以外的异常,类型上都属于Exception类及其子类。如IOException、SQLException等以及用户自定义的Exception异常。对于这种异常,JAVA编译器强制要求我们必需对出现的这些异常进行catch并处理,否则程序就不能编译通过。 所以

全球大流行推动云计算增长

倾然丶 夕夏残阳落幕 提交于 2020-09-30 02:23:17
近几个月来,COVID-19在全球范围内大流行,对全世界不同行业产生了巨大影响,其中一个受到广泛影响的行业是后期制作行业。因为全世界所有影院和制片都被封锁了。 在工作场所,由于信息安全在该市场中起着根本性的作用,电影制片人很难完成后期制作工作。 自大流行开始以来,大多数行业都经历了最惨烈的失败。全球许多公司都面临着许多情况(如在家工作)的问题。 根据许多专家的说法,越来越多地使用云技术来共享信息和存储数据,这些变量被用来帮助市场更快地增长。 当我们查看市场基本参与者的最新季度收益报告时,似乎流行病和经济下滑并没有起到什么作用。说实话,它可能会促进其增长。 根据SynergyResearch提供的数据,云计算市场在2020年第一季度的营收达到了290亿美元。 我们都知道,大流行给云提供商带来了一些问题,但在不确定的情况下,公共云为那些试图维持正常运营的公司提供了适应性和安全的场所。云提供商的收入一直在以惊人的速度发展,目前AWS和Azure的年收入总和超过600亿美元。 阿里巴巴集团(AlibabaGroup)最近突破了季度收入和利润预期,因为在中国摆脱冠状病毒封锁之后,其核心商业和云计算业务持续发展。 仅贸易业务的销售额就在6月份的季度中反弹了34%,达到人民币1333.2亿元(约合192.7亿美元),比一年前稍慢一些,但同时足以推动其股价上涨。 该企业的股票今年以来已上涨了23%

禁令延长!TikTok暂缓下架,但仍然计划于11月实施更全面的禁令

我的梦境 提交于 2020-09-29 14:42:27
      大数据文摘出品    作者:牛婉杨、刘俊寰   继WeChat后,TikTok在美国的禁令也得到了暂缓。   在特朗普对TikTok的禁令生效前几小时,被法官拒绝了。也就是说, TikTok可以继续从美国应用商店中下载 。   一名美国哥伦比亚特区地方法官周日推迟了特朗普政府的一项命令,在周日上午的紧急听证会上宣布了这项裁决。TikTok的律师辩称,政府对应用程序商店的禁令将侵犯第一修正案的权利,并对企业造成不可弥补的损害。哥伦比亚特区地方法院法官卡尔·尼科尔斯(Carl Nichols)不同意推迟后来的禁令。      美国哥伦比亚特区联邦法院判决书   尽管现在的裁决推迟了禁令,但并不意味着以后不会实施。 总统选举后大约一周,仍然计划于11月实施更全面的禁令。   在周日法官做出裁决后,TikTok的一位发言人表示:“我们很高兴法院同意了我们的法律论点,发布了禁止执行TikTok应用禁令的禁令。”“为了我们的社区和员工的利益,我们将继续捍卫我们的权利。与此同时,我们还将继续与政府进行对话,将我们的提议转化为一项协议。总统上周末已初步批准了我们的提议。”   商务部在一份声明中表示,它将“遵守禁令,并已立即采取行动,但打算积极为欧盟和部长的执行努力辩护,使其免受法律挑战。”   为避免被美国实施禁令,TikTok“已经做了非凡的努力”   本来

SpringCloud 应用在 Kubernetes 上的最佳实践 —— 高可用(容量评估)

十年热恋 提交于 2020-09-27 16:00:33
作者 | 牛兔 导读 :本文是《SpringCloud 应用在 Kubernetes 上的最佳实践》系列文章的第 11 篇,从前面两期开始我们进入到了高可用专题,分别介绍了流量防护和故障演练相关内容。本文将从另一个视角介绍如何保障业务高可用性:即业务准备阶段,提前进行线上的瓶颈定位和容量评估,以便更低成本、更高效/真实的发现系统瓶颈点,做到最精确的容量评估。 高可用体系介绍 首先来介绍下高可用体系,应用生命周期的高可用都有哪些策略、分别可以实现什么能力呢? 从上图示意中可以看出,应用生命周期的整个过程中,都有相应的高可用策略,如前面 2 篇文章介绍的流量防护即为线上运行时的线上管控相关策略,混沌工程即为系统演练的相关策略,而全链路压测即为规划阶段的重要策略,其包括线上压测(即环境选择)、容量规划(即压测实施)、弹性伸缩(即生态内联动)。 以下将重点介绍容量评估的重要性,以及如何实施压测来实现容量评估。 为何要进行容量评估? 关于容量评估的重要性及必要性已经是个老生常谈的问题了,分别从技术角度和业务战略角度总结如下: 容量评估的目的自然是解决容量问题,如新业务上线前的准备,大型营销活动的准备等等。大型活动中洪峰流量引起的系统表现不确定性,是最经典的适用场景。一个理想的营销活动周期应该是有如下闭环流程: 性能测试是容量评估的核心手段,性能测试之后通过客户端-应用系统

为什么要看源码、如何看源码,高手进阶必看

让人想犯罪 __ 提交于 2020-08-20 09:14:24
作者:xybaby www.cnblogs.com/xybaby/p/10794700.html 由于项目的需求,最近花了较多的时间来看开源项目的代码,在本文中,简单总结一下对 为什么要看源码、如何看源码 这两个问题的思考。 看源码的意义 看源码只是一种方法、手段,而不是目的。我也曾经给自己制定过“阅读xxx源码”的目标,现在看起来真的很蠢,一点不smart(specific、measurable、attainable、relevant、time-bound)。 只有搞清楚了阅读代码的目标,才能有的放矢,抓住重点,高效达成任务。 看源码的意义总结起来包含但不限于以下几点: 一、解决问题(BUG) 只要是代码,就会有bug,只是说bug的多与少、深与浅罢了。现在大家都喜欢发布、使用开源项目,不同的开源项目社区成熟度、代码质量又会有较大的差异,遇到bug就不足为奇了。 当然,遇到bug肯定是先在网上搜索是否有类似的问题,一般可以在google、Stack Overflow、项目的issues里面有对应的关键词搜索。如果搜不到,那么就只能看源码解决了 二、知其所以然 我在[如何学习新技术、团队技术选型时要注意些什么][Link 1]里面提到过,如果我们需要将一个开源项目用到自己的项目中,那么就必须了解这项项目的优缺点,并深知原理,对部分细节(尤其是项目的优势、feature)进行深入研究

最流行的 RESTful API 要怎么设计?

偶尔善良 提交于 2020-08-20 05:42:14
作者:阮一峰 出处: http://www.ruanyifeng.com/blog/ RESTful 是目前最流行的 API 设计规范,用于 Web 数据接口的设计。它的大原则容易把握,但是细节不容易做对。本文总结 RESTful 的设计细节,介绍如何设计出易于理解和使用的 API。 URL设计 动词+宾语 RESTful 的核心思想就是,客户端发出的数据+操作指令都是“动词+宾语”的结构,比如GET /articles这个命令,GET是动词,/articles是宾语,动词通常就有5种HTTP请求方法,对应CRUD操作,根据 HTTP 规范,动词一律大写。 # GET:读取(Read) # POST:新建(Create) # PUT:更新(Update) # PATCH:更新(Update),通常是部分更新# DELETE:删除(Delete) 动词的覆盖 有些客户端只能使用GET和POST这两种方法。服务器必须接受POST模拟其他三个方法(PUT、PATCH、DELETE)。这时,客户端发出的 HTTP 请求,要加上X-HTTP-Method-Override属性,告诉服务器应该使用哪一个动词,覆盖POST方法。 POST /api/Person/4 HTTP/1.1 X-HTTP-Method-Override: PUT 上面代码中,X-HTTP-Method