![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 66
AmazingJadeWu
Github:https://github.com/amazingWu
开源中国:https://git.oschina.net/WU_QI
展开
-
基于ip2region的ipv4&ipv6索引库生成方案
背景接触过ip库查询的人,可能都听说过ip2region这个开源的方案,其通过查询一些外部数据源形成自己的ip段信息,再通过生成索引库,从而提供ip信息的查账,可惜的是作者一直未提供Ipv6的查询方案,在ipv6越加重要的现在,着实有些可惜。所以今天来说下在Ip2region的基础上实现支持ipv6的实现方案。ip2region的原理ip2region分三个部分:源数据转变成ip2region db 文件的过程ip2region 的结构搜索方法此处跳过db文件生成的过程,只讲讲结构和搜索方原创 2020-12-21 10:42:31 · 2844 阅读 · 6 评论 -
如何基于高德的数据构建自己的GPS查询系统
在不少业务中可能都会用到GPS查询省市区的信息,因此今天来聊聊如何用高德的数据打造一份GPS定位到省市区的SDK高德能拿到什么样的数据https://lbs.amap.com/api/webservice/guide/api/district在高德的开发者平台上有一个行政区域查询接口,该接口能够查询区域的行政边界信息其中的polyline行政区域边界坐标点就是区域的围栏边界。一般查询city的话,会把所有的区域信息返回,个别情况除外,如部分区域没有城市,只有省,需要对省份信息检索。该接口通过关键原创 2020-12-18 14:07:04 · 578 阅读 · 0 评论 -
跨网络以及跨文件系统之间的文件同步
问题近期遇到以下问题:跨网络的Hadoop集群数据同步。背景因为一些安全性原因,内部在大集群之外搭建了一套网络隔离的Hadoop集群,而且需要从大集群同步数据到该网络隔离的Hadoop集群上去。在不存在网络问题的情况下,可以使用Distcp跨集群拷贝,但是因为网络的问题,Distcp就失效了。在起初,使用了Datax来实现数据的同步,但缺陷也比较明显:配置复杂,需要配置字段级的信息,而这种在文件拷贝的场景下其实是不需要的对文件的压缩格式要求很高无法支持hive的动态分区。此外,可能会有人原创 2020-07-09 15:53:46 · 661 阅读 · 0 评论 -
徒手写一个简单的RPC框架
徒手撸一个简单的RPC框架RPC(远程过程调用)简单来说就是调用远程的服务就像调用本地方法一样,其中用到的知识有序列化和反序列化、动态代理、网络传输、动态加载、反射这些知识点。发现这些知识都了解一些。所以就想着试试自己实现一个简单的RPC框架,即巩固了基础的知识,也能更加深入的了解RPC原理。当然一个完整的RPC框架包含了许多的功能,例如服务的发现与治理,网关等等。本篇只是简单的实现了一个调用的...原创 2020-03-01 21:44:26 · 194 阅读 · 0 评论 -
netty 原理分析
之前在github上发现了一篇非常棒的 netty 原理说明,分享一下 netty 原理分析原创 2018-03-16 15:19:11 · 514 阅读 · 0 评论 -
CronScheduledThreadPoolExecutor的实现
应该在不少场景中都会有这种需求,需要Java原生的ScheduleThreadPool支持Cron表达式来指定调度时间,为了满足这种需求,实现了CronScheduledThreadPool。在实现初,构想了下实现方案,最后觉得将Java8中的ScheduledThreadPoolExecutor进行拓展比较简单高效。那么如果按照这个方案实现会遇到哪些问题呢?原创 2019-03-17 19:44:10 · 1020 阅读 · 0 评论 -
BTrace-Java应用的动态监控工具
引子最近看了美团的一篇文章Java动态追踪技术探究,产生了一种强烈的共鸣,卧槽,这也太炫酷了吧。好吧,各位看官请放下手中的屠刀,原谅我这个菜鸡。简介看到这里的,应该原谅我这个小菜鸡了,既然如此就来说说这个BTrace。BTrace github地址https://github.com/btraceio/btraceBTrace是Java的安全可靠的动态跟踪工具。 它的工作原理是通过...原创 2019-03-01 22:08:10 · 440 阅读 · 0 评论 -
理解java双亲委派模式
双亲委派模式简介双亲委派模式的工作原理的是;如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行,如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将到达顶层的启动类加载器,如果父类加载器可以完成类加载任务,就成功返回,倘若父类加载器无法完成此加载任务,子加载器才会尝试自己去加载,这就是双亲委派模式,即每个儿子都不愿意干活,每次有活...原创 2019-03-17 16:16:54 · 2739 阅读 · 0 评论 -
redis分布式锁
加锁代码如下:/** * @param key 要加锁的key * @param expireAt millis 加锁时间戳 * @return 加锁成功返回true */public boolean lock(String key, long expireAt) { long now = ensure(expireAt); Boolean open = re...原创 2019-04-17 15:36:21 · 122 阅读 · 0 评论 -
java性能调优攻城利器-JMH
简介JMH即Java Microbenchmark Harness.是由开发JVM的那些大佬开发出的Micro Benchmark Framework.理论上支持各种在JVM上运行的语言。何为Micro Benchmark Framework?简单的说就是在方法级层面的benchmarck。通常来说,随着系统整体复杂性的不断提升,精准的衡量系统的一个单元的性能愈加困难(如单独进行测试系统的某个...原创 2019-06-12 17:25:32 · 663 阅读 · 0 评论 -
spring-cloud系列-Eureka
一、Eureka介绍与使用服务注册与发现对于微服务系统来说非常重要。有了服务发现与注册,你就不需要整天改服务调用的配置文件了,你只需要使用服务的标识符,就可以访问到服务。代码可参考:https://github.com/amazingWu/Spring-Cloud-AG-Admin/tree/master/ace-center 服务注册管理器原理如下图所示:原创 2017-11-23 10:44:12 · 341 阅读 · 0 评论 -
Spring 启动过程分析
要想很好理解这三个上下文的关系,需要先熟悉spring是怎样在web容器中启动起来的。spring的启动过程其实就是其IoC容器的启动过程,对于web程序,IoC容器启动过程即是建立上下文的过程。spring的启动过程:1. 首先,对于一个web应用,其部署在web容器中,web容器提供其一个全局的上下文环境,这个上下文就是ServletContext,其为后面转载 2017-10-17 15:07:32 · 660 阅读 · 0 评论 -
maven多级项目使用 slf4j+log4j,以及自定义配置文件路径
maven多级项目使用 slf4j+log4j,以及自定义配置文件路径我的maven多级结构如下:sysimple |--integration |--commons |--pom.xml |--plugins |--pom.xml |--web |--pom.xml |--pom.xml其原创 2017-03-23 15:05:17 · 9969 阅读 · 0 评论 -
流体力学中的相邻粒子算法中的树形搜索法纠正与实现
流体力学中的相邻粒子算法中的树形搜索法纠正与实现国内的教材中对于树形搜索算法的描述大多如下: 但是在实际使用的过程中,发现这种策略是有问题的,他们的方法指出:检测粒子i的搜索立方体空间是否与并列的层次内的其他节点所占空间有重合的地方。该方法意图从i的同层次节点开始查找,并从这些层次往下搜索。但实际真应该是这样的吗? 答案是否定的,在实际的实现过程中,我发现查找同层次的节原创 2017-03-23 15:43:52 · 1518 阅读 · 1 评论 -
JVM虚拟机
最近重新梳理了jvm,留笔记方便回顾。 来源:JVM虚拟机程序计数器++程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线 程所执行的字节码的行号指示器。++ 在虚拟机的概念模型里(仅是概念模型,各种虚拟机可能 会通过一些更高效的方式去实现),字节码解释器工作时就是通过改变这个计数器的值来选 取下一条需要执行的字节码指令,++分支、 循转载 2017-07-16 21:28:54 · 274 阅读 · 0 评论 -
java容器类总结
1. Java 容器分类图简略图: 详细图: 2. 具体容器类2.1概括1)collection: ArrayList,LinkedLsit,Vector,Stack TreeSet,HashSet,LinkedHashSet 2) Map: HashMap,LinkedHashMap,WeakHashMap, TreeMap, HashTable, Identit原创 2017-08-05 12:48:24 · 338 阅读 · 0 评论 -
深入Java集合学习系列:HashMap的实现原理
1. HashMap概述: HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 2. HashMap的数据结构: 在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本转载 2017-08-05 13:51:49 · 273 阅读 · 0 评论 -
Java HashMap死循环分析
一.引言我们在平时的Java代码中经常会用到HashMap这个结构,JDK的官方文档上描述这个结构是非线程安全的,就是说在并发的情况下,HashMap的操作可能不是我们想要的。为了避免并发造成的影响,我们推荐在代码使用ConcurrentMap。一个经常被讨论的问题就是HashMap在高并发的情况下面,使用get方法就会出现死循环,导致应用的load彪高,此时重启应用,一切都会正常。记得在转载 2017-08-13 13:37:47 · 1517 阅读 · 0 评论 -
深入解析Java反射
什么是反射?反射(Reflection)是Java 程序开发语言的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性。 Oracle官方对反射的解释是 Reflection enables Java code to discover information about the fields, methods and constructors of load转载 2017-08-05 17:09:12 · 342 阅读 · 0 评论 -
ConcurrentHashMap总结
本文转载自:https://my.oschina.net/hosee/blog/675884并发编程实践中,ConcurrentHashMap是一个经常被使用的数据结构,相比于Hashtable以及Collections.synchronizedMap(),ConcurrentHashMap在线程安全的基础上提供了更好的写并发能力,但同时降低了对读一致性的要求(这点好像CAP理论啊 O(∩_∩转载 2017-08-20 20:41:15 · 243 阅读 · 0 评论 -
Redis与memcached
上述技术基本上代表了当今在数据存储方面所有的实现方案,其中主要涉及到了普通关系型数据库(MySQL/PostgreSQL),NoSQL数据库(MongoDB),内存数据库(Redis),内存Cache(Memcached),我们现在需要的是对大数据表仍保持高效的查询速度,普通关系型数据库是无法满足的。而MongoDB其实只是一种非关系型数据库,其优势在于可以存储海量数据,具备强大的查询功能,因此不原创 2017-09-05 22:16:31 · 297 阅读 · 0 评论 -
Zookeeper的leader选举
zookeeper提供了三种方式:LeaderElectionAuthFastLeaderElectionFastLeaderElection默认的算法是FastLeaderElection,所以这篇主要分析它的选举机制。节点状态: 每个集群中的节点都有一个状态 LOOKING, FOLLOWING, LEADING, OBSERVING。都属于这4种,每个节点转载 2017-10-17 21:59:41 · 364 阅读 · 0 评论