0%

开发中,我们有时候想要修改 jar 中的代码,方便我们调试或者作为生产代码打包上线。但在 IDEA 中,jar 包中的文件都是 read-only(只读模式)。那如何才能修改 jar 包中的源码呢?

  1. 下载 jar 包源码。如果无法获得源码,需要用反编译工具反编译。
  2. 找到 jar 中你想要修改的类,在自己的工程目录下,创建一个同该类一样的包(package)。
  3. 把你要修改的类复制到该包中。此时,可以对该类进行修改。
  4. debug 项目,在该类中打上断点,可以看到代码执行时会进入这个新的类中,说明走的是改后的代码。
  5. 注意,IDEA 会出现 alternative source available for the class 提示。这个是可以随时切换想要执行的同名类。

image-20210429184742586

阅读全文 »

目前,网上有关宽窄依赖的博客大多都使用下面这张图作为讲解:

Image for post

实际上,这幅图所表达的内容并不完善。其中,窄依赖的内容表达的不够全面,而宽依赖的部分容易让人产生误解。本文,我将用新的绘图带大家搞清楚究竟什么是宽依赖(ShuffleDependency),什么是窄依赖(NarrowDependency)。

阅读全文 »

最近,英雄联盟迎来了 S11 赛季的版本大更新。作为一名从 S2 一路走过来的老玩家,我自然也是非常的关注。除了发生了巨变的装备系统之外,各种各样的 bug,也是在玩家之间炽手可热的话题。这其中,较为严重的一个 bug 之一,就是打野英雄在特定的情况下,可以对野怪一击造成 -2147483648 的伤害。熟悉英雄联盟的玩家应该知道,21 亿在游戏中可以说是一个天文数字。哪怕是血量最多的野怪,在这个伤害面前也会瞬间灰飞烟灭,这简直是有史以来最大的峡谷惨案。

那为什么会出现 -2147483648 这个大的数字呢?或者说,为什么就恰好就是这样一个数字呢?这个数看起来好像并没有什么规律,难道是由于程序异常导致某些数字累加或者累乘造成的?还是游戏开发者留下的一个类似于彩蛋的东西呢?这就是我今天要跟大家分享的内容——从编程的角度来分析这个 21 亿的神秘数字到底是怎么产生的。而这其中所涉及到的计算机知识,都可以作为面试题了!

阅读全文 »

随着 PyTorch 的不断发展,其生态也越来越繁荣。现如今,安装 PyTorch 是一件非常简单的事情。我们只需要安装 Anaconda,并通过 conda 就可以安装 PyTorch 环境。

目前,网络上大多数 PyTorch 安装教程中有关 CUDA、cuDNN 的安装方法比较混乱且已经过时。本文创作时间为 2020-09-10,接下来我就根据个人实践以及相关资料,整理下如何用正确姿势安装 PyTorch。

安装 Anaconda

阅读全文 »

前言

在日常开发中,我们时常需要编写一些重复的、非业务相关的功能性代码。比如实体类私有属性的 get / set 方法、创建日志输出类等。

这也是 Java 饱受诟病的地方之一。往往这些冗余的代码虽然跟业务无关,但由于其功能性又不得不写,十分浪费时间,影响美观不说,后期如果有改动还不方便维护。

阅读全文 »

前言

在开发中,我们可以通过自定义配置来灵活配置我们的项目。过去,在 SpringMVC 中,我们需要在各种 XML 中定义我们的各项配置,使用起来相对繁琐。而 SpringBoot 为我们提供了更为方便的方式定义配置,只需要在 application.yml 中添加我们需要的配置,然后通过注解读取配置即可。

使用 @Value 读取配置

阅读全文 »

前言

SpringBoot 中的方法调用,默认是单线程顺序执行的。但是在开发中我们可能会存在这样一些场景,例如发送邮件或者记录日志等,这些操作往往比较耗时,但是又不是主业务中跟业务相关的内容。这种场景我们就可以选择使用 @Async 异步方法执行,即用其它线程来异步执行某些耗时操作,从而节省主线程的运行等待时间。

使用 @Async 异步执行方法

阅读全文 »

前言

在开发中,我们会有定时执行某些任务的需求,例如定时清理过期文件、定时发送邮件等等。SpringBoot 为我们提供了便捷的方式来配置定时任务,只需要打上几个注解即可。那么下面让我们来看看 SpringBoot 中如何开发定时任务。

开启定时任务

阅读全文 »

前言

在之前的章节,我们已经用到了 Controller 的部分功能——外界通过 HTTP 请求,访问 SpringBoot 中的方法。这就是我们熟知的 Web 接口,是客户端与后端应用交互的重要方式之一。

那么在本章,我们就来整理下如何使用 @Controller 实现 RESTful Web 接口。

阅读全文 »

前言

作为 Java 后端开发,我们免不了要和数据库打交道。那么我们如何在 SpringBoot 中优雅地与数据库交互呢?

目前,主流的方式是使用 JPA 或者 MyBatis 作为访问数据库的框架。JPA 的前身是 Hibernate,其宣传的亮点是不需要写 SQL 就能实现数据的交互。对于简单的单表查询来说,JPA 有其优势,可以使开发效率大大提高。但是对于复杂的多表关联查询场景,MyBatis 灵活的优势就凸显出来了。

阅读全文 »