「 OTHERS 」 三月 21, 2021
十进制整数与二进制数转换
文章字数 8.7k 阅读约需 8 mins.
因为人类有十根手指,所以十进制计数法,是目前使用范围最广泛的计数方式。
但在计算机中,只有 0 和 1 两个数,所以需要进行转换。
本文主要介绍一下十进制 整数 与二进制数的转换方法。
方法一
十进制整数转二进制时,可将十进制整数除以 2
(因为需转换为二进制数),得到余数,填入二进制低位,直至商为 0
时结束。
以 156
为例:
除数 | 被除数 | 余数 |
---|---|---|
2 | 156 | 0 |
78 |
将余数 0
填入二进制数的低位
- | - | - | - | - | - | - | 0 |
商不为...
查看全文「 SPRING 」 三月 14, 2021
如何给 Spring Boot 外挂 classpath?
文章字数 3.8k 阅读约需 3 mins.
假设使用 Spring Boot 开发了一个可使用不同数据库的应用,每个数据库的 jdbc 驱动包都不同,不想在 Fat Jar 中打入所有的数据库驱动 jar,又不想为每一个确定了具体数据库的场景都打一个对应的 Fat Jar 包,有没有优雅的方式来实现这个需求呢?
我们先来看下 Spring Boot 的 Fat Jar(Executable Jar)是如何运行的。
通常情况下,要启动一个 Spring Boot 应用,可通过如下方式:
$ java -jar example.jar
Spring...
查看全文「 SERVLET 」 十二月 27, 2020
Override same class
文章字数 7.5k 阅读约需 7 mins.
实际 Java Web 项目中经常会遇到这样的场景:希望对依赖的某个三方库中的行为进行覆盖式的定制(修改三方库中的某些行为),但并不希望发布定制的版本至私服。
通常在使用 WAR 包发布应用时,可将定制的类编译成 class 文件,放入 WEB-INF/classes
路径中,即可覆盖放置在 WEB-INF/lib
路径下的三方库中同名类,达到定制的目的。
那么为什么可以这样?
在两个相同的 class 必须都存在于 JAR 包中时,又怎么实现这种需求呢?
Servlet 规范
查看全文「 JAVA 」 十二月 06, 2020
如何确定装载了哪个类
文章字数 4.3k 阅读约需 4 mins.
某些时候,我们可能希望知道 ClassLoader 里到底装载的是哪个 class,比如当两个 jar 包中存在 package 和 Class 名完全相同的两个类时。
在 java 命令的帮助信息中,有如下内容(部分):
$ java -help
用法: java [-options] class [args...]
(执行类)
或 java [-options] -jar jarfile [args...]
(执行 jar 文件)
其中选项包括:
-d32 使用 32 位数据模型 (如果可用...
查看全文
「 TOMCAT 」 八月 02, 2020
Tomcat 是怎么找到用来处理请求的 Servlet 的?
文章字数 14k 阅读约需 12 mins.
在 Servlet 注册到了哪? 中,我们找到了配置的 Servlet 被包装成了一个 StandardWrapper
,以注册的 Servlet name 为 key 放入了其父容器(Context)一个 HashMap 里。那么当 Tomcat 收到一个请求的时候,是怎么找到对应的 Servlet 以对请求进行处理的呢?
先放一张图:
总的来说,这个过程分为两部分:
- 读取所有 Servlet 的配置,放入 Mapper 中;
- 将请求匹配到具体的 Servlet 上。
查看全文注:本文以 Tomcat...
「 JAVA 」 七月 26, 2020
为什么应该设置 com.sun.management.jmxremote.rmi.port?
文章字数 5.1k 阅读约需 5 mins.
在使用 JMX 对 Java 应用进行监控时,一般会在启动时添加如下参数:
java \
-Djava.rmi.server.hostname=192.168.16.237 \
-Dcom.sun.management.jmxremote.rmi.port=2909 \
-Dcom.sun.management.jmxremote.port=9009 \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management...
查看全文
「 SPRING 」 七月 19, 2020
谁动了我的异常 Plus
文章字数 5.9k 阅读约需 5 mins.
书接上文,在 谁动了我的异常? 中,有几个问题没说清楚,本文将继续进行说明。
为了方便,相关示例代码上传至了 https://github.com/AlphaHinex/proxy-in-spring 。
示例代码中,定义了如下内容:
- 一个检查型异常:CheckedException
- 一个统一的异常处理:UnifyHandlerExceptionResolver
- 一个切面 ControllerAspect,在切面中固定抛出检查型异常
在 ClassController 中定义了一个没有声明异常...
查看全文「 JAVA 」 七月 12, 2020
为什么不建议使用双括号初始化?
文章字数 2.6k 阅读约需 2 mins.
Map<String, Object> map = new HashMap<String, Object>() {{
put("name", "Alpha");
put("age", 8);
}};
以下内容引自 The Java™ Tutorials - Initializing Fields:
查看全文Initializing Instance Members
Normally, you would put code to initialize an instance variable...
「 SPRING 」 六月 26, 2020
谁动了我的异常?
文章字数 11k 阅读约需 10 mins.
通常来讲,为方便开发,我们会对异常进行统一的处理。会定义一个异常基类,针对基于这个基类的自定义异常进行统一处理。
当异常基类为检查型异常(Checked Exception)时,如果自定义异常是通过切面等代理抛出的,被代理的方法本身并未抛出且也未声明此异常时,就会遇到这个问题:
统一异常处理方法中,捕获到的异常,已不是代理类中抛出的自定义异常,而是一个将自定义异常包装在内的 java.lang.reflect.UndeclaredThrowableException
。
那么为什么会这样呢?
以使...
查看全文