java
天边tbdp
一个码农,从业后端快十载
展开
-
深入理解SPI机制
一、什么是SPISPI ,全称为 Service Provider Interface,是一种服务发现机制。它通过在ClassPath路径下的META-INF/services文件夹查找文件,自动加载文件里所定义的类。这一机制为很多框架扩展提供了可能,比如在Dubbo、JDBC中都使用到了SPI机制。我们先通过一个很简单的例子来看下它是怎么用的。1、小栗子首先,我们需要定义一个接口,SPIServicepackage com.viewscenes.netsupervisor.spi;转载 2020-12-25 20:39:25 · 275 阅读 · 0 评论 -
GeoHash简介
现在很多APP都有搜索附近的功能,比如附近的人、附近的店铺等。要实现这样的功能,我们可以用最笨的方法:根据经纬度计算距离,然后划定一个阈值,只要小于该阈值就算是附近的。这种方法在数据量小时基本没问题,但是,如果数据量特别大,那服务器就需要进行大量的计算,负担很重!为了解决这一类问题,一个比较常用的方法就是利用GeoHash。 一、简介 GeoHash是一种地址编码方法。他能够把二维的空间经纬度数据...转载 2018-05-15 14:04:07 · 589 阅读 · 0 评论 -
Java SpringMVC 支付宝-即时支付接口-ping++支付
一. 前言介绍: 前几天突然要做支付宝的支付功能,因为以前一直没有做过支付功能,所以比较茫然,但是后来经过不断摸索和前辈指导,终于做了出来;后来发现,其实做支付宝的支付功能也并不难。二.正文: 首先你要搞到商家的支付宝账号,合作者ID (1).第一步要先能够跳转到支付宝的支付界面(可以本地测试)。 (2).第二部完成支付跳转回商家界面(必须线上测试,因为返回回来,支付宝找不到你的l...转载 2018-05-15 13:58:48 · 571 阅读 · 0 评论 -
java ping++支付
支付工具类:[java] view plain copy/** * ━━━━━━神兽出没━━━━━━ * ┏┓ ┏┓ * ┏┛┻━━━┛┻┓ * ┃ ┃ * ┃ ━ ┃ * ┃ ┳┛ ┗┳ ┃ * ┃ ┃ * ┃ ┻ ┃ * ┃ ┃ * ┗━┓ ┏━┛Code is far...转载 2018-05-15 13:57:43 · 396 阅读 · 0 评论 -
JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解,以及例子
现实企业级Java开发中,有时候我们会碰到下面这些问题:OutOfMemoryError,内存不足内存泄露线程死锁锁争用(Lock Contention)Java进程消耗CPU过高...... 这些问题在日常开发中可能被很多人忽视(比如有的人遇到上面的问题只是重启服务器或者调大内存,而不会深究问题根源),但能够理解并解决这些问题是Java程序员进阶的必备要求。本文将对一些常用的JVM性能调优...转载 2018-05-05 14:30:37 · 341 阅读 · 0 评论 -
消息队列使用的四种场景介绍
消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题实现高性能,高可用,可伸缩和最终一致性架构使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ二、消息队列应用场景以下介绍消息队列在实际应用中常用的使用场景。异步处理,应用解耦,流量削锋和消息通讯四个场景2.1异步处理场景说明:用户注册后,需要发注册邮件和注...转载 2018-04-12 15:42:06 · 646 阅读 · 1 评论 -
Lombok介绍及使用方法
lombok简介lombok是暑假来到公司实习的时候发现的一个非常好用的小工具,刚见到的时候就感觉非常惊艳,有一种相见恨晚的感觉,用了一段时间之后感觉的确挺不错,所以特此来推荐一下。lombok的官方地址:https://projectlombok.org/lombok的Github地址:https://github.com/rzwitserloot/lombok那么lombok到底是个什么呢,l转载 2018-01-18 14:10:14 · 3661 阅读 · 2 评论 -
系统分布式情况下最终一致性方案梳理
前言目前的应用系统,不管是企业级应用还是互联网应用,最终数据的一致性是每个应用系统都要面临的问题,随着分布式的逐渐普及,数据一致性更加艰难,但是也很难有银弹的解决方案,也并不是引入特定的中间件或者特定的开源框架能够解决的,更多的还是看业务场景,根据场景来给出解决方案。根据笔者最近几年的了解,总结了几个点,更多的应用系统在编码的时候,更加关注数据的一致性,这样系统才是健壮的。转载 2017-12-14 18:13:19 · 366 阅读 · 0 评论 -
深入理解WeakHashmap
WeakHashmap(一) 查看API文档,WeakHashmap要点如下:1. 以弱键 实现的基于哈希表的 Map。在 WeakHashMap 中,当某个键不再正常使用时,将自动移除其条目。更精确地说,对于一个给定的键,其映射的存在并不阻止垃圾回收器对该键的丢弃,这就使该键成为可终止的,被终止,然后被回收。丢弃某个键时,其条目从映射中有效地移除2. WeakHashMa转载 2017-12-14 17:44:52 · 314 阅读 · 0 评论 -
面试官最爱的volatile关键字
就我理解的而言,被volatile修饰的共享变量,就具有了以下两点特性:1 . 保证了不同线程对该变量操作的内存可见性;2 . 禁止指令重排序面试官: 能不能详细说下什么是内存可见性,什么又是重排序呢?这个聊起来可就多了,我还是从Java内存模型说起吧。Java虚拟机规范试图定义一种Java内存模型(JMM),来屏蔽掉各种硬件和操作系统的内存访问差异,让Java程序在各种平转载 2017-12-14 17:19:48 · 288 阅读 · 0 评论 -
Access-Control-Allow-Origin和反向代理处理跨域
什么是跨域跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。所谓同源是指,域名,协议,端口相同。浏览器执行javascript脚本时,会检查这个脚本属于那个页面,如果不是同源页面,就不会被执行。同源策略的目的,是防止黑客做一些做奸犯科的勾当。比如说,如果一个银行的一个应用允许用户上传网页,如果没有同源策略,原创 2017-11-30 16:04:54 · 4845 阅读 · 0 评论 -
java工具类 获取包下所有类
package com.threeti.util; import java.io.File; import java.io.FileFilter; import java.io.IOException; import java.net.JarURLConnection; import java.net.URL;转载 2017-06-23 14:13:11 · 462 阅读 · 1 评论 -
阿里面试的知识点
面试的知识点注意:1、很多问题是没有标准答案的。2、注意个人发挥和引申。 3、个人去查找答案。-----------------------------------------------------------------主要节点:个人简介(口述)?这个非常重要。体现表达能力。别人不是先看简历,而是先听你表达。把重点信息,串起来,简单、转载 2016-09-06 10:08:42 · 748 阅读 · 2 评论 -
JAVA实现空间索引编码(GeoHash)
转载请注明出处:http://blog.csdn.net/xiaojimanman/article/details/50358506http://www.llwjy.com/blogdetail/95468c5334d1c3fe52ae2149abfb0da0.html个人博客站已经上线了,网址 www.llwjy.com ~欢迎各位吐槽~-----------------------------...转载 2018-05-15 14:04:59 · 501 阅读 · 0 评论 -
java 中的锁 -- 偏向锁、轻量级锁、自旋锁、重量级锁
之前做过一个测试,详情见这篇文章《多线程 +1操作的几种实现方式,及效率对比》,当时对这个测试结果很疑惑,反复执行过多次,发现结果是一样的: 1. 单线程下synchronized效率最高(当时感觉它的效率应该是最差才对); 2. AtomicInteger效率最不稳定,不同并发情况下表现不一样:短时间低并发下,效率比synchronized高,有时甚至比LongAdder还高出一点,但是高并发下...转载 2018-06-07 11:39:39 · 267 阅读 · 0 评论 -
jackSon注解-- @JsonInclude 注解不返回null值字段
jackSon注解– @JsonInclude 注解不返回null值字段Spring Boot项目中遇到的小知识@Data@JsonInclude(JsonInclude.Include.NON_NULL)public class OrderDTO { private String orderId; @JsonProperty("name") private S...转载 2019-07-06 00:14:40 · 689 阅读 · 0 评论 -
Java并发-AQS及各种Lock锁的原理
什么是AQSAQS是AbustactQueuedSynchronizer的简称,它是一个Java提高的底层同步工具类,用一个int类型的变量表示同步状态,并提供了一系列的CAS操作来管理这个同步状态。AQS的主要作用是为Java中的并发同步组件提供统一的底层支持,例如ReentrantLock,CountdowLatch就是基于AQS实现的,用法是通过继承AQS实现其模版方法,然后将子类作为同步...转载 2019-06-28 14:10:02 · 298 阅读 · 0 评论 -
Java探针-Java Agent技术-阿里面试题
最近面试阿里,面试官先是问我类加载的流程,然后问了个问题,能否在加载类的时候,对字节码进行修改我懵逼了,答曰不知道,面试官说可以的,使用Java探针技术,能够实现我查了一下关于探针技术的知识:2. 基于javaAgent和Java字节码注入技术的java探针工具技术原理图0-0:动态代理功能实现说明我们利用javaAgent和ASM字节码技术开发java探针工具,实现原理如...转载 2019-06-28 14:08:25 · 383 阅读 · 0 评论 -
金丝雀发布、滚动发布、蓝绿发布到底有什么差别?关键点是什么?
作为技术人员,大家可能听说过“滚动发布”和“蓝绿发布”等术语,但是很多人并不清楚这些术语背后的原理。本文试图总结当前主流的发布策略,每个的优劣,适用性,让开发人员特别是架构师对现代发布技术有一个更为清晰全面的认识,让大家能够根据自己的企业上下文,对发布策略做出正确的选型和实践。一、单服务器组发布先解释下单服务器组的概念,早先我们机器资源比较紧张,不像现在云计算和虚拟化(包括容器技术)这么发...转载 2019-05-28 15:19:01 · 179 阅读 · 0 评论 -
Java学习指南
https://github.com/Snailclimb/JavaGuide/ 【Java学习+面试指南】 一份涵盖大部分Java程序员所需要掌握的核心知识。https://github.com/doocs/advanced-java 互联网 Java 工程师进阶知识完全扫盲...原创 2019-04-28 10:03:45 · 234 阅读 · 0 评论 -
java8 四大核心函数式接口Function、Consumer、Supplier、Predicate
Function<T, R> T:入参类型,R:出参类型调用方法:R apply(T t); 定义函数示例:Function<Integer, Integer> func = p -> p * 10; // 输出入参的10倍调用函数示例:func.apply(10); // 结果100Consumer<T>T:入参类型;...转载 2019-02-14 12:03:46 · 212 阅读 · 0 评论 -
springBoot----@ConditionalOnxxx相关注解总结
public static void main(String[] args) { ConfigurableApplicationContext configurableApplicationContext =SpringApplication.run(DemoApplication.class, args); //bean自动注册,根据bean的名字获取Bean ...转载 2019-01-25 10:27:54 · 148 阅读 · 0 评论 -
好好耕耘 redis和memcached的区别(总结)
观点一:1、Redis和Memcache都是将数据存放在内存中,都是内存数据库。不过memcache还可用于缓存其他东西,例如图片、视频等等,memcache是内存对象缓存组件,可以缓存实现了序列化接口的对象;2、Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储;3、虚拟内存--Redis当物理内存用完时,可以将一些很久没用到的value...转载 2018-09-06 17:57:52 · 138 阅读 · 0 评论 -
AbstractQueuedSynchronizer源码解读
1. 背景AQS(java.util.concurrent.locks.AbstractQueuedSynchronizer)是Doug Lea大师创作的用来构建锁或者其他同步组件(信号量、事件等)的基础框架类。JDK中许多并发工具类的内部实现都依赖于AQS,如ReentrantLock, Semaphore, CountDownLatch等等。学习AQS的使用与源码实现对深入理解concurre...转载 2018-06-07 11:45:00 · 272 阅读 · 0 评论 -
自旋锁、排队自旋锁、MCS锁、CLH锁
自旋锁(SPIN LOCK)自旋锁是指当一个线程尝试获取某个锁时,如果该锁已被其他线程占用,就一直循环检测锁是否被释放,而不是进入线程挂起或睡眠状态。自旋锁适用于锁保护的临界区很小的情况,临界区很小的话,锁占用的时间就很短。简单的实现import java.util.concurrent.atomic.AtomicReference;public class SpinLock { pri...转载 2018-06-07 11:43:07 · 605 阅读 · 0 评论 -
如何用消息系统避免分布式事务?
前阵子从支付宝转账1万块钱到余额宝,这是日常生活的一件普通小事,但作为互联网研发人员的职业病,我就思考支付宝扣除1万之后,如果系统挂掉怎么办,这时余额宝账户并没有增加1万,数据就会出现不一致状况了。上述场景在各个类型的系统中都能找到相似影子,比如在电商系统中,当有用户下单后,除了在订单表插入一条记录外,对应商品表的这个商品数量必须减1吧,怎么保证?!在搜索广告系统中,当用户点击某广告后,除了在点击...原创 2018-06-07 11:41:30 · 255 阅读 · 0 评论 -
jvm内存调优
在做java开发时尤其是大型软件开发时经常会遇到内存溢出的问题,比如说OutOfMemoryError等。这是个让开发人员很痛苦、也很纠结的问题,因为我们有时不知道什么样的操作导致了这种问题的发生。所以我们不得不通过不断的优化自己的代码结构,重构了一次又一次。虽然说不断的重构自己的代码对公对私都是一件非常好的事,但是有时我们会发现有些时候不单单是通过重构自身的代码就能够解决这样的问题,因为也可能是转载 2016-05-09 00:50:33 · 430 阅读 · 1 评论 -
java事件处理机制(自定义事件)
java中的事件机制的参与者有3种角色:1.event object:事件状态对象,用于listener的相应的方法之中,作为参数,一般存在与listerner的方法之中2.event source:具体的事件源,比如说,你点击一个button,那么button就是event source,要想使button对某些事件进行响应,你就需要注册特定的listener。3.eve原创 2016-02-24 18:23:18 · 580 阅读 · 2 评论 -
一篇很全面的freemarker教程
以下内容全部是网上收集: FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主要由如下4个部分组成: 1,文本:直接输出的部分 2,注释:格式部分,不会输出 3,插值:即${...}或#{...}格式的部分,将使用数据模型中的部分替代输出 4,FTL指令:FreeMarker指定,和HTML标记类似,名字前加#予以区分,不会输出转载 2015-09-21 16:25:42 · 712 阅读 · 0 评论 -
深入探讨 Java 类加载器
类加载器是 Java 语言的一个创新,也是 Java 语言流行的重要原因之一。它使得 Java 类可以被动态加载到 Java 虚拟机中并执行。类加载器从 JDK 1.0 就出现了,最初是为了满足 Java Applet 的需要而开发出来的。Java Applet 需要从远程下载 Java 类文件到浏览器中并执行。现在类加载器在 Web 容器和 OSGi 中得到了广泛的使用。一般来说,Java 应用转载 2015-01-19 13:14:42 · 528 阅读 · 0 评论 -
Java 对图片进行大小转换
1、实际项目中要将“图片档案”生成缩略图(将图片大小变成 160*160),参考网上代码写了Demo。2、工具类。Java代码 /* * @(#) ImageResizer.java 1.0 2011-7-22 * * (c) Copyright 2011 iflytek corejava * * FILENAME :转载 2015-01-19 13:13:31 · 3745 阅读 · 0 评论 -
Joda-Time 简介
任何企业应用程序都需要处理时间问题。应用程序需要知道当前的时间点和下一个时间点,有时它们还必须计算这两个时间点之间的路径。使用 JDK 完成这项任务将非常痛苦和繁琐。现在来看看 Joda Time,一个面向 Java™ 平台的易于使用的开源时间/日期库。正如您在本文中了解的那样,Joda-Time 轻松化解了处理日期和时间的痛苦和繁琐。在编写企业应用程序时,我常常需要处理日期。并且在我的最转载 2014-12-09 10:29:47 · 653 阅读 · 0 评论 -
JAVA中堆栈和内存分配
(一)、栈、堆1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制.2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中。)3. 堆:存放所有new出来的对象。4. 静态域 :存放静态成员(static定义的)5. 常量池 :存放字符串常量和基本类型常量(pu转载 2014-08-24 00:11:08 · 508 阅读 · 0 评论 -
InvocationHandler中invoke()方法的调用问题
以下的内容部分参考了网络上的内容,在此对原作者表示感谢! Java中动态代理的实现,关键就是这两个东西:Proxy、InvocationHandler,下面从InvocationHandler接口中的invoke方法入手,简单说明一下Java如何实现动态代理的。 首先,invoke方法的完整形式如下: Java代码 publ转载 2014-07-03 17:55:26 · 731 阅读 · 0 评论 -
使用MapReduce实现矩阵向量相乘
1 描述 假定有一个 n*n 的矩阵 M ,其第 i 行第 j 列的元素记为 。假定有一个 n 维向量 v ,其第 j 个元素记为 。于是,矩阵 M 和向量 v 的乘积结果是一个 n 维向量 x,其第 i 个元素 为 如: 要求输入:11 22 3333 44 5566 77 88 输出:0 2201 4转载 2014-05-27 10:50:50 · 1284 阅读 · 0 评论 -
nutch安装,与solr整合
linux环境下安装ant,svn原创 2014-05-23 17:59:29 · 1437 阅读 · 0 评论 -
StringTokenizer类的使用
StringTokenizer是一个用来分隔String的应用类,相当于VB的split函数。1.构造函数public StringTokenizer(String str)public StringTokenizer(String str, String delim)public StringTokenizer(String str, String delim, boolean原创 2014-05-27 10:38:30 · 587 阅读 · 0 评论 -
Java类加载机制
类加载是java语言提供的最强大的机制之一。尽管类加载并不是讨论的热点话题,但所有的编程人员都应该了解其工作机制,明白怎么做才能让其满足我们的需要。这能有效节省我们的编码时间,从不断调试ClassNotFoundException, ClassCastException的工作中解脱出来。 这篇文章从基础讲起,比如代码和数据的不同之处是什么,他们是怎么构成一个实例或对象的。然后转载 2014-05-19 23:24:26 · 695 阅读 · 0 评论 -
Java IO 中的设计模式
作者:终南 li.zhongnan@hotmail.com>设计模式是一个很理论的,也是一个很经验的东西。纯粹照着文档去理解设计模式不是一个好的方式,当经验有所增长的时候,回过头来看看设计模式这个比较玄的东西,还是比较有好处和用处的。其实,在JDK中就使用了很多设计模式,为类库的可重用性、可扩展性和灵活性提供了强有力的支持。JDK的I/O包中就主要使用到转载 2014-05-11 23:50:46 · 703 阅读 · 0 评论 -
Selenium
Selenium[1]也是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7、8、9)、Mozilla Firefox、Mozilla Suite等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建衰退测试检验软件功能和用户需求。支持自动原创 2014-05-11 23:51:27 · 512 阅读 · 0 评论