GeoHash 算法的 Java 版实现

2021年9月25日 没有评论

之前曾经做过一个类 LBS 的小需求,当时是用 redis 做的,就是这篇文章,其实 GeoHash 算法,我们也可以自己实现,具体如下:


package cn.bridgeli.demo;

import java.util.ArrayList;
import java.util.BitSet;
import java.util.HashMap;

public class GeoHash {
    public static final double MINLAT = -90;
    public static final double MAXLAT =[......]

Read more

分类: Java 标签: ,

Spring boot 自动装配实现的原理 – 文字简述版

2021年8月29日 没有评论

1. 当启动 Spring boot 应用程序的时候,会先创建 SpringApplication 的对象,在对象的构造方法中会进行某些参数的初始化工作,最主要的是判断当前应用程序的类型以及初始化器和监听器,在这个过程中会加载整个应用程序的 spring.factories 文件,将文件的内容放到缓存对象中,方便后续获取。

2. SpringApplication 对象创建完成之后,开始执行 run 方法,来完成整个启动,启动过程中最主要的有两个方法,第一个叫做 prepareContext,第二个叫做 refreshContext,在这两个关键步骤中完成了自动装配的核心功能,前面的处理[……]

Read more

分类: Java 标签:

好用的 IDEA 插件

2021年7月17日 没有评论

好久没有好好的写过博客了,不过这一篇也没打算好好写。前一段时间换工作,所谓工欲善其事,必先利其器,所以常用的软件都需要重新配置,而作为一名 Java 程序员,最重要的就是 IDEA 了,所以这次就写一下,我个人认为比较好用的 IDEA 插件,以及他们的作用,后面如果发现更好用的插件了,也会在这篇文章里面更新。

1. IDE Eval Reset,开发者:zhile.io

大家众所周知的,IDEA 很好用,但是付费软件,还不便宜,但是在国内很多人都是找各种方法破解,人家也在做反破解,一直搞攻防战,但是 IDEA 有一个很人性的一点,可以试用 30 天,所以这个插件就是让大家无限试用。[……]

Read more

分类: Java 标签: ,

位图在 12306 中的应用

2021年5月30日 没有评论

记得 12306 刚上线的时候,就在想 12306 是如何卖票,一趟车从北京到上海,中间经过了 N 个站,大家可以买其中的任意两站,而因为卖出了一个一张票,从北京到上海很多站的车票都会变动,当时就感觉这个算法太复杂了,一般人还真写不出来,由此虽然很多人都在吐槽 12306,但是我却一直任务 12306 特别牛,很多人吐槽的大学生水平肯定是做不出来的,前一段时间,听马士兵教育的周志磊老师讲课,提出 redis 中的位图解决,设计的很巧妙,突然感觉豁然开朗,如果你也有这个问题,不妨参考一下。至于什么是位图,就不多说了,如果不知道,可以简单搜索。

首先说问题,我们假设一趟车是从 A 站到 B[……]

Read more

分类: Redis 标签: , ,

再谈 ThreadLocal

2021年4月22日 没有评论

几年前我曾经写过两篇关于 ThreadLocal 的文章,分别是ThreadLocal类之简单理解ThreadLocal类之简单应用示例,不过限于当时的水平,有些问题并没有说的很明白,所以今天再写一篇文章,重新说说这个类。

我们首先看一个例子:


package cn.bridgeli.demo;

/**
 * @author BridgeLi
 * @date 2021/4/21 11:02
 */
public class User {

    String name = "Denny";

}

然后我们有一个操[……]

Read more

分类: Java 标签:

以 Java 为例简单说明常见 IO 模型

2021年3月30日 没有评论

1. BIO

我们先看一个 Java 例子:


package cn.bridgeli.demo;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * @author bridgeli
 */
public class SocketBIO {[......]

Read more

分类: Java 标签: ,

Java 的引用类型和使用场景

2021年2月28日 没有评论

每种编程语言都有自己操作内存中元素的方式,例如在 C 和 C++ 里是通过指针,而在 Java 中则是通过“引用”。在 JDK.1.2 之后,Java 对引用的概念进行了扩充,将引用分为了:强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)、虚引用(Phantom Reference)4 种,这 4 种引用的强度依次减弱,今天这篇文章就简单介绍一下这四种类型,并简单说一下他们的使用场景。

1, 强引用(Strong Reference)

强引用类型,是我们最常讲的一个类型,我们先看一个例子:


pa[......]

Read more

分类: Java 标签: ,

用两个线程交替打印数字和字母

2021年2月7日 没有评论

前一段时间听马士兵老师讲课,讲到某公司的一个面试,两个线程,其中一个线程输出ABC,另一个线程输出123,如何控制两个线程交叉输出1A2B3C,由于本人多线程掌握的一直不是很好,所以听完这道题,个人感觉收获良多,这是一个学习笔记。这道题有多种解法,不过有些属于纯炫技,所以只记录常见的三种解法。首先看第一种

1. park 和 unpark


package cn.bridgeli.demo;

import com.google.common.collect.Lists;

import java.util.List;
import java.util.concur[......]

Read more

利用 DeferredResult 实现 http 轮询实时返回数据接口

2021年1月9日 没有评论

博客有半年没更新了,不是我偷懒,而是之前服务器到期了,开博客这么多年,钱其实花了不少,但是没有一点收益,所以上了谷歌广告,如果文章对你稍稍有一点帮助,希望能花一秒钟帮忙点一下广告,谢谢。

今天这篇文章呢,不难,其实是解答我一直以来心里的一个疑问。是这样的,之前看五八技术委员会主席沈剑老师的公众号架构师之路的一篇文章:http 如何像 tcp 一样实时的收消息,里面其中的一个方案是用 http 短连接轮询的方式实现“伪长连接”。但是对于轮询,我们的第一反应肯定是有延时,但是标题不是说的是实时吗?当然我们可以把轮询的时长缩短一些,先不说这样大部分时间的轮询调用,可能都没消息返回,造成服务器资[……]

Read more

分类: Java 标签: , ,

规则引擎入门

2020年7月12日 没有评论

关于规则引擎,我们在工作中应该会经常遇到,例如我们对不同的用户给不同的折扣。前一段时间在网上闲逛,发现一个很简单的规则引擎,一下是学习笔记。

在使用之前,我们要先导入 jar 包:


        <dependency>
            <groupId>org.jeasy</groupId>
            <artifactId>easy-rules-core</artifactId>
            <version>3.3.0</version>[......]

Read more

分类: Java 标签: ,