Follow feeds: blogs, news, RSS and more. An effortless way to read and digest content of your choice.
Get Feedermghio.cn
Get the latest updates from mghio directly as they happen.
Follow now 16 followers
Last updated 4 months ago
5 months ago
前言Goroutines 是 Go 语言主要的并发原语。它看起来非常像线程,但是相比于线程它的创建和管理成本很低。Go 在运行时将 goroutine 有效地调度到真实的线程上,以避免浪费资源,因此您可以轻松地创建大量的 goroutine(例如每个请求一个 goroutine),并且您可以编写简单的,命令式的阻塞代码。因此,Go 的网络代码往往比其它语言中的等效代码更直接,更容易理解(这点从下文中的示例代码可以看出)。对我来说,goroutine 是将 Go...
about 1 year ago
前言论文(Paper)通常是新技术、算法、编程方法或软件工具的首次公布。通过阅读论文,我们可以了解最新的技术进展,保持自己的技能和知识是最新的。同时,论文提供了对特定主题深入理解的机会。它们通常包含详细的理论分析和实验结果,这有助于深入理解某个概念或技术。但是,如何高效地阅读论文是一项关键但很少有人谈论的技能。刚开始大部分人自己通过试错来学习,但常常被挫败感所劝退。本文介绍一种阅读论文的方法——三遍阅读法。三遍阅读法关键思想是你应该最多阅读三遍论文,而不是从开头一直读到结尾。每一遍都完成特定的目标,并在前一遍的基础上构建:第一遍快速浏览,获得论文的大致概念。你还可以决定是否需要进行更多的阅读。这一遍一般需要大约 5 到 10 分钟,并包括以下步骤:仔细阅读标题、摘要和引言阅读章节和小节标题,但忽略其他所有内容阅读结论浏览参考文献,心中记下你已经阅读过的在第一遍结束时,你应该能够回答这五个 C(Category、Context、Correctness、Contributions、Clarity):类别:这是哪种类型的论文?是测量论文吗?是对现有系统分析吗?是研究原型的描述吗?上下文:它与哪些其他论文相关?使用哪些理论基础来分析问题?正确性:假设看起来有效吗?贡献:论文的主要贡献是什么?清晰度:论文写得好吗?利用这些信息,你可能会决定不再继续阅读。这可能是因为论文不引起你的兴趣,或者你对该领域不够了解,无法理解论文,或者作者做出了无效的假设。第一遍对于不在你感兴趣的领域内,但将来可能相关的论文来说是足够的。如果读者在五分钟后不能理解论文的亮点,论文很可能永远不会被阅读。 第二遍在第二遍中,更仔细地阅读论文,但忽略细节,如证明。在阅读时记下关键点或在边缘做注释会很有帮助。仔细查看论文中的图表、图表和其他插图。特别注意图形。轴是否正确标记?结果是否显示了误差条,以便结论具有统计意义?这些常见的错误将区分匆忙、粗制滥造的工作和真正优秀的工作。记得标记相关未读的参考文献以供进一步阅读(这是了解论文背景的好方法)。 第二遍应该需要最多一个小时。在这一遍之后,你应该能够把握论文的内容。你应该能够向别人总结论文的主要论点,并提供支持证据。这种细节水平适合你感兴趣的论文,但不属于???的研究专业。有时即使你在第二遍结束时也不理解论文。这可能是因为主题对你来说是新的,有不熟悉的术语和缩写词。或者作者使用了一个你不理解的证明或实验技术,以至于论文的大部分内容对你来说是无法理解的。论文可能写得很糟糕,有未经证实的断言和许多前向引用。或者,可能只是因为现在是深夜,你很累。你现在可以选择:(a) 把论文放在一边,希望你不需要理解这些材料就能在你的职业生涯中取得成功(b) 稍后再回到论文,也许在阅读背景材料之后(c) 坚持下去,进行第三遍阅读。第三遍要完全理解一篇论文。第三遍的关键是尝试虚拟地重新实现论文:也就是说,做出与作者相同的假设,重新创建工作。通过将这个重新创建与实际论文进行比较,你可以很容易地识别出论文的创新之处,以及它的隐藏缺陷和假设。这一遍需要极大的注意力。你应该识别并挑战每一条陈述中的每一个假设。此外,你应该思考你自己会如何表达一个特定的想法。实际与虚拟的比较可以非常深入地洞察论文中的证明和展示技巧,并且你很可能可以将这些技巧添加到你的工具箱中。在这一遍期间,你还应该记下未来工作的想法。对于初学者来说,这一遍可能需要大约四到五个小时,对于有经验的读者来说,大约需要一个小时。在这一遍结束时,你应该能够从记忆中重建整篇论文的结构,并且能够识别出它的优点和缺点。特别是,你应该能够指出隐含的假设、遗漏的相关工作的引用,以及实验或分析技术可能存在的问题。最后,进行文献综述在进行文献综述时,会考验你的论文阅读技能。这将要求你阅读数十篇论文,可能在一个不熟悉的领域。你应该阅读哪些论文?以下是如何使用三遍阅读方法来帮助: 首先,使用学术搜索引擎,如...
about 2 years ago
前言大部分人在日常的业务开发中,其实很少去关注数据库的事务相关问题,基本上都是 CURD 一把梭。正好最近在看 MySQL 的相关基础知识,其中对于幻读问题之前一直没有理解深刻,今天就来聊聊「InnoDB 是如何解决幻读的」,话不多说,下面进入主题。事务隔离级别事务隔离是数据库处理的基础之一,是 ACID 中的 I。在 MySQL 的 InnoDB...
over 2 years ago
前言首先需要明确的是 TCP 是一个可靠传输协议,它的所有特点最终都是为了这个可靠传输服务。在网上看到过很多文章讲 TCP 连接的三次握手和断开连接的四次挥手,但是都太过于理论,看完感觉总是似懂非懂。反复思考过后,觉得我自己还是偏工程型的人,要学习这些理论性的知识,最好的方式还是要通过实际案例来理解,这样才会具象深刻。本文通过 Wireshark 抓包来分析 TCP 三次握手和四次挥手,如果你也对这些理论感觉似懂非懂,那么强烈建议你也结合抓包实践来强化理解这些理论性的知识。三次握手TCP 建立连接的三次握手是连接的双方协商确认一些信息(Sequence number、Maximum Segment...
almost 3 years ago
前言在 Spring 框架中有很多实用的功能,不需要写大量的配置代码,只需添加几个注解即可开启。 其中一个重要原因是那些 @EnableXXX 注解,它可以让你通过在配置类加上简单的注解来快速地开启诸如事务管理(@EnableTransactionManagement)、Spring MVC(@EnableWebMvc)或定时任务(@EnableScheduling)等功能。这些看起来简单的注解语句提供了很多功能,但它们的内部机制从表面上看却不太明显。 一方面,对于使用者来说用这么少的代码获得这么多实用的功能是很好的,但另一方面,如果你不了解某个东西的内部是如何工作的,就会使调试和解决问题更加困难。设计目标Spring 框架中那些 @EnableXXX 注解的设计目标是允许用户用最少的代码来开启复杂使用的功能。 此外,用户必须能够使用简单的默认值,或者允许手动配置该代码。最后,代码的复杂性要向框架使用者隐藏掉。...
about 3 years ago
前言在我们日常开发的分层结构的应用程序中,为了各层之间互相解耦,一般都会定义不同的对象用来在不同层之间传递数据,因此,就有了各种 XXXDTO、XXXVO、XXXBO 等基于数据库对象派生出来的对象,当在不同层之间传输数据时,不可避免地经常需要将这些对象进行相互转换。此时一般处理两种处理方式:① 直接使用 Setter 和 Getter 方法转换、② 使用一些工具类进行转换(e.g. BeanUtil.copyProperties)。第一种方式如果对象属性比较多时,需要写很多的 Getter/Setter 代码。第二种方式看起来虽然比第一种方式要简单很多,但是因为其使用了反射,性能不太好,而且在使用中也有很多陷阱。而今天要介绍的主角...
over 3 years ago
一维码(条形码)在介绍二维码之前,先来看看它的“大哥”一维码,一维码也叫条形码(好像在日常生活中都是叫这个),它是由不同宽度的黑条和白条按照一定的顺序排列组成的平行线图案,它的宽度记录着数据信息,长度没有记录信息,条形码常用于标出物品的生产国、制造厂家、商品名称、生产日期、图书分类号、邮件起止地点、类别、日期等信息,比如大部分食品包装袋背后都会印有条形码。一维码(条形码)编码规则全球的条形码标准都是由一个叫GS1的非营利性组织管理和维护的,通常情况下条形码由 95 条红或黑色的平行竖线组成,前三条是由黑-白-黑 组成,中间的五条由白-黑-白-黑-白组成,最后的三条和前三条一样也是由黑-白-黑组成,这样就把一个条形码分为左、右两个部分。剩下的 84 (95-3-5-3=84) 条按每 7 条一组分为 12 组,每组对应着一个数字,不同的数字的具体表示因编码方式而有所不同,不过都遵循着一个规律:右侧部分每一组的白色竖线条数都是奇数个。这样不管你是正着扫描还是反着扫描都是可以识别的。中国使用的条形码大部分都是 EAN-13...
over 3 years ago
什么是循环依赖什么是循环依赖呢?可以把它拆分成循环和依赖两个部分来看,循环是指计算机领域中的循环,执行流程形成闭合回路;依赖就是完成这个动作的前提准备条件,和我们平常说的依赖大体上含义一致。放到 Spring 中来看就一个或多个 Bean 实例之间存在直接或间接的依赖关系,构成循环调用,循环依赖可以分为直接循环依赖和间接循环依赖,直接循环依赖的简单依赖场景:Bean A 依赖于 Bean B,然后 Bean B 又反过来依赖于...
over 3 years ago
前言在 上篇 介绍了 Feign 的核心实现原理,在文末也提到了会再介绍其和 Spring Cloud 的整合原理,Spring 具有很强的扩展性,会把一些常用的解决方案通过 starter 的方式开放给开发者使用,在引入官方提供的 starter...
over 3 years ago
What is Feign?Feign 是⼀个 HTTP 请求的轻量级客户端框架。通过 接口 + 注解的方式发起 HTTP 请求调用,面向接口编程,而不是像 Java...
over 3 years ago
前言我们现在所处的信息爆炸时代,如何强调快速获取信息都不为过,信息多种多样,有些能找到源头,有些则不能,有些能找到规律,有些则不一定能找到,信息的源头和获取渠道很重要。然而事实上,能够真正有效获取到优质信息并加以消化利用的人并不多。在信息的获取的过程中,应该要具备筛选信息的能力,什么是官方信息,你要核实,什么是虚假信息,你要甄别。看到网上有些陷入杀猪盘的,负载累累。仔细思考一下,其实甄别筛选信息的能力真的是最大的问题。当然一个人将信息并内化利用是一个很复杂的过程,每个人都有自己独到的方法。今天来聊聊应该如何去获取「优质信息」以及如何去过滤无用信息。下面分享几个获取信息的原则:尽自己最大努力去获取“一手信息”这个原则的关键是,这里的“一手信息”是如何定义呢? 对于那些权威机构或者国家机构,或者专家大咖,或者作者本人所发布的信息绝大部分情况下都可以看作为一手信息,第一手信息,不是被别人理解过、消化过的二手信息。尤其对于知识性的东西来说,更应该是这样。应该是原汁原???的,不应该是被添油加醋的。对于一手信息的价值为什么大于二手信息甚至多手信息呢?很简单,这个效应在股票或者投资市场会被放大的很明显,能够在第一时间获取到第一手信息,是能否准确快速判断出市场行情走向的关键因素之一。收费的信息优于免费的信息对于这个原则,可能不是绝对,但至少在绝大部分情况下是正确的,对于现在很多“白嫖党”来说,可能确实要改一改自己的陋习了,要知道,其实免费反而最贵,因为它给你带来的负面作用或者时间成本,甚至可能会“毒害”你对于信息和知识的热情,当然也会有少部分人会把好的东西给开源或者免费掉。国外大部分情况优于国内和上面的第二点一样,需要你带着审视和批判思维来看待了,国内整体的创作环境个人角色还是相关比较浮躁和恶劣的,尽管这些年有所改观,但当前的自媒体,包括一些所谓的大 V,也会有很多滥竽充数的文章,视频等内容,包括当前都说信息过载,其实准确来说,是垃圾信息过载,那些优质的内容与知识,毕竟少数。有选择的相信专家,并关注他们的日常分享,但不要迷恋迷信专家,很多人会无脑喷当前所谓的砖家伪公知 ,但在大部分情况,专家是在某些领域沉淀研究了很多年,你可以看看别人的一些思路,观点,与框架性东西,在某些情况下,可能真会对自己有所启发。通过信息的冗余和比对举一个简单的例子,如果今天巴菲特发表了一番言论,当然媒体会对此有记录和报道。但是,各种媒体可能记录有误差,而且可能还有意无意加入自己的看法,把不是巴菲特发表的言论加到他头上,这样就主观或客观地引入了错误信息。此时如果你只从一个信息源了解信息,其实是很难判断所获得的是准确信息还是夹杂着一定的错误信息的。但是如果你能从多个信息源了解信息,虽然它们各自都有部分个人主观因素,但是由于各自角度的不同,很多噪音彼此可以抵消掉,获得的则是相对比较准确的信息。要时刻警惕回音室响应,避免把自己关进一个封闭的信息圈子,这样慢慢的外部的信息就没法进来了,总之在获取信息的时候一定要尝试从不同维度,不同角度去摄取。将信息分解到不同的维度过滤在中国,人们常常都会很纠结一个问题,「就是老婆和妈妈掉到水里后先救谁?」,如果仔细思考一下,这个两难问题的重要原因在于,我们要考虑的因素太多,以至于大家越想越糊涂。其实只要你细想就会发现,这个问题的关键是分清楚什么是我们该考虑的信息,什么是不用考虑的信息。比如,如果你觉得孝是第一位的,或者觉得以后谁和我生活更长时间是第一位的,作出选择就没有什么难的。这时,你其实是将这个有很多干扰信息的问题,分解到了某些你能够区分的维度,比如孝的维度,或者和一起生活的时间的维度。要主动去 pull 信息,不要总是等 push 信息这是最后一点,也是最重要的一点,这里的 pull 和 push 可能说得有点偏技术化,解释一下就是...