博文

目前显示的是 六月, 2020的博文

微软太良心,这么强大的软件竟然完全免费! - 知乎

图片
微软太良心,这么强大的软件竟然完全免费! - 知乎 微软太良心,这么强大的软件竟然完全免费! Jackpop ​ 哈尔滨工业大学 计算数学硕士 上下班的路上我会用来听一些有声节目,前几天听到一个节目讲到萨提亚·纳德拉这个现任CEO,依靠他准确的把握方向使得本来错过移动互联、定位失败、逐渐显露出颓势的微软重新获得了生机,市值也一度达到新高。 的确,作为一名开发者,对于微软的潜移默化之中的转变关注更为密切。无论是操作系统,还是开发工具,我们都无法离开这个全球最大的电脑软件提供商。 如果3年前提到 开源、免费 ,我肯定无法联想到微软。近几年,我逐渐的开始感受到微软已经从当初那个僵化、远离用户的公司开始变得贴近用户、拥抱潮流和变化。 Windows 10加入Linux内核,开源VS Code,收购Github,微软每一次举动都让我看到这个巨头再一次明确了它在软件领域毫无争议的霸主地位。 让我感受最为强烈的就是vs code。 这些年来开发工具慢慢的开始停滞不前,似乎开发工具只是编译代码、DEBUG、自动补全,而vs code先后加入远程开发、可视化调试,使得这款开发工具一跃远超过目前市面上主流的开发工具。 而近期微软的另一款在Github上开源的工具引起了我的兴趣,并且试用之后让我感到非常惊艳,它就是 PowerToys ,下面就来介绍一下这款堪称 良心 的工具集合( 文末有下载方式 )。 PowerToys Windows自带的很多功能非常难用,这是不争的事实。但是,这么多年从来没有看到微软要作出改变的意思。所以,我们不得不去借助一些增强工具,来弥补Windows在某些方面的不足。 例如,使用过macOS的都深深的爱上它的 聚焦搜索 功能,苦于Windows没有这项功能,所以,就得寻求Listary、Everything、Wox的帮助,或者把这些工具进行组合使用。 当然,Windows需要增强、改善的功能远不止于此。 而 PowerToys 的开源让我看到微软在改善Windows使用体验方面的决心。 PowerToys是一款实用工具的集合,它并不是新事物,Windows 95就曾有过这款工具,只是Windows在原来的启发之下开发了这款针对Window 10系统更加高效的版本。 ...

【不懂就问】MyBatis的一级缓存竟然还会引来麻烦? - 掘金

图片
【不懂就问】MyBatis的一级缓存竟然还会引来麻烦? - 掘金 LinkedBear 2020年06月28日 阅读 1252 【不懂就问】MyBatis的一级缓存竟然还会引来麻烦? 【 “不懂就问” ,是一个新的系列,主要整理我的小册群里遇到的一些比较有意思的 / 有难度的 / 容易被讨论起来的问题,并给出问题的解析和方案等等。喜欢的小伙伴们可以点赞关注我鸭 ~ ~ 学习源码可以看看我的小册 ~ ~】 端午假期相信不少小伙伴都在偷偷学习吧(说好了放假一起玩耍呢,结果又背着我学习),这不,刚过了端午,我的一个沙雕程序猿圈子里就有人讨论起来问题了,这个问题聊起来好像挺麻烦,但实际上问题是很简单的,下面咱来讨论下这个问题。 原问题 MyBatis 一级缓存与 SpringFramework 的声明式事务有冲突吗?在 Service 中开启事务,连续查询两次同样的数据,结果两次查询的结果不一致。 —— 使用 Mapper 的 selectById 查出来实体,然后修改实体的属性值,然后再 selectById 一下查出来实体,对比一下之前查出来的,发现查出来的是刚才修改过的实体,不是从数据库查出来的。 —— 如果不开启事务,则两次请求查询的结果是相同的,控制台打印了两次 SQL 。 初步分析 讲道理,看到这个问题,我一下子就猜到是 MyBatis 一级缓存重复读取的问题了。 MyBatis 的一级缓存默认开启,属于 SqlSession 作用范围。在事务开启的期间,同样的数据库查询请求只会查询一次数据库,之后重复查询会从一级缓存中获取。当不开启事务时,同样的多次数据库查询都会发送数据库请求。 上面的都属于基础知识了,不多解释。重点是,他修改的实体是 直接从 MyBatis 的一级缓存中查询出来的 。咱都知道,查询出来的这些实体肯定属于对象,拿到的是对象的引用,咱在 Service 里修改了,一级缓存中相应的也就会被影响。由此可见,这个问题的核心原因也就很容易找到了。 问题复现 为了展示这个问题,咱还是简单复现一下场景吧。 工程搭建 咱使用 SpringBoot + mybatis-spring-boot-starter 快速构建出工程,此处 SpringBoot 版本为 2.2.8 , myb...

深夜加班无聊,基于反射仿了个EventBus - 掘金

图片
深夜加班无聊,基于反射仿了个EventBus - 掘金 饭谈编程 2020年06月29日 阅读 179 深夜加班无聊,基于反射仿了个EventBus 干货点 通过阅读该篇博客,你可以了解了解java的反射机制、可以了解如何基于spring生命周期使用自定义注解解决日常研发问题。 问题描述 在日常研发中,经常会遇见业务A的某个action被触发后,同时触发业务B的action的行为,这种单对单的形式可以直接在业务A的action执行结束后直接调用业务B的action,那么如果是单对多的情况呢? 方案解决 这里提供一种在日常研发中经常使用到的机制,基于spring实现的事件驱动,即在业务A的action执行完,抛出一个事件,而业务B、C、D等监听到该事件后处理相应的业务。 场景范例 这里提供一个场景范例,该范例基于springboot空壳项目实现, 具体可以查看源码 ,此处只梳理关键步骤。 步骤一: 定义一个注解,标志接收事件的注解,即所有使用了该注解的函数都会在对应事件被抛出的时候被调用,该注解实现比较简单,代码如下 /** * @author xifanxiaxue * @date 3/31/19 * @desc 接收事件的注解 */ @Documented @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD}) public @interface ReceiveAnno { // 监听的事件 Class clz(); } 复制代码 定义事件接口 /** * @author xifanxiaxue * @date 3/31/19 * @desc */ public interface IEvent { } 复制代码 所有事件都需要实现该接口,主要是为了后面泛型和类型识别。 定义MethodInfo /** * @author xifanxiaxue * @date 3/31/19 * @desc */ public class MethodInfo { public Object obj; public Method method; public static Metho...