- 博客(36)
- 收藏
- 关注
原创 Linux安装jdk、tomcat、mysql等
1.linux_jdk/usr/java/jdk1.8.0_181 <--- /usr/jdk1.查看当前目录pwd 2.查看linux位数sudo uname --m i686 //32位 x86_64 //64位 3.安装jdk 3.1 在usr目录下建立java目录 mkdir usr/java 3.2 将jdk-8u181-linux-x64.tar解压到java目录下 tar -zxvf jdk-8u181-linux-x64.
2021-01-31 17:37:57 192
原创 RSA(加密解密、签名验签)
加密解密(公钥加密,私钥解密)签名验签(私钥加签,公钥验签)//生成公钥私钥KeyPairs key = RSAEncryption.initKey();String publicKey = key.getPublicKey();String privateKey = key.getPrivateKey();System.out.println("公钥:"+publicKey);System.out.println("私钥:"+privateKey);System.out.pri
2021-01-26 17:29:07 316
原创 Jackson自定义序列化器(针对null,针对指定name的属性)
public class JsonObjectMapper extends ObjectMapper { /** * */ private static final long serialVersionUID = 8034942567620323925L; public JsonObjectMapper() { super(); this.setSerializerFactory(this.getSerializerFactory().withSerializerMod...
2021-01-26 15:33:13 657
原创 SPI机制
JDK SPI//resources/META-INF/services //com.xxx.Logcom.xxx.impl.Log4j com.xxx.impl.Logback //public class Main { public static void main(String[] args) { ServiceLoader<Log> serviceLoader = ServiceLoader.loa
2021-01-25 17:40:27 148
原创 jackson适配fastjson写法的代码
public class JSON { private static ObjectMapper mapper; static { mapper = new ObjectMapper(); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); mapper.
2021-01-24 13:10:10 270
转载 HttpClient工具类
原文链接文章目录 1. 什么是HttpClient 2. 功能介绍 3. 版本比较 4. HttpClient不能做的事情 5. HttpClient使用流程 6. HttpClient工具类 6.1 添加依赖 6.2 编写spring-boot启动类 6.3 编写get和post请求测试controller 6.4 创建httpClient响应结果对象 6.5 重点,编写httpclient工具类 6.6 启动spring-boot,测
2021-01-21 09:50:09 3160
原创 微信支付(PC扫码支付和H5公众号支付)
最近在做微信支付,微信支付比较坑,官方居然只有.NET、C#、PHP的demo居然没有java的demo。然后微信支付是不提供测试账号的需要直接用正式的公众号。首先来介绍下微信扫码支付吧,微信扫码有两种方式,这里采用第二种方式统一下单(JSAPI)。需要提前在微信公众号后台申请微信支付开通,具体的开通规则详细文档见点击打开链接其实微信支付挺简单的无非就是拼装参数给微信发送请求,要注意的几点就是支付的金额是分,微信没有同步回调地址,只有异步回调的地址。这样的话就不能实时反馈支付结果到PC端页面。网上大多数
2021-01-20 17:48:03 913
原创 分批执行大批量数据
List dataList = new ArrayList();for(int i=0;i<999;i++) dataList.add(4);int splitSize = 500;int arryLength = dataList.size();int result = 0;int group = 0;if (arryLength % splitSize != 0) { group = 1;}result = arryLength / splitSize;result.
2021-01-20 17:44:13 500
转载 本地缓存高性能之王Caffeine
原文链接本地缓存高性能之王Caffeine前言随着互联网的高速发展,市面上也出现了越来越多的网站和app。我们判断一个软件是否好用,用户体验就是一个重要的衡量标准。比如说我们经常用的微信,打开一个页面要十几秒,发个语音要几分钟对方才能收到。相信这样的软件大家肯定是都不愿意用的。软件要做到用户体验好,响应速度快,缓存就是必不可少的一个神器。缓存又分进程内缓存和分布式缓存两种:分布式缓存如redis、memcached等,还有本地(进程内)缓存如ehcache、GuavaCache、Caffeine
2021-01-20 17:00:19 151
转载 Java8的CompletionService使用与原理
原文链接CompletionService是Java8的新增接口,JDK为其提供了一个实现类ExecutorCompletionService。这个类是为线程池中Task的执行结果服务的,即为Executor中Task返回Future而服务的。CompletionService的实现目标是任务先完成可优先获取到,即结果按照完成先后顺序排序。CompletionService的使用非常简单。从源码查看ExecutorCompletionService类,该类只有三个成员变量:public cla
2021-01-20 16:07:06 357
原创 页面修改线程池参数_4
Java8CompletionService 处理线程池public class ThreadChangeDemo { //创建 private static ThreadPoolExecutor createExecutor(int corePoolSize, int maximumPoolSize, .
2021-01-20 15:59:22 302
原创 阿里四面你都知道吗?
阿里四面你都知道吗?最近一个朋友跟我说,现在面试太难了,再也不是以前那种随便背几个面试题然后就能拿到offer的时候了。最近朋友准备换工作面试了阿里,然后和我交流了下他遇到的一些面试题,然后我整理了一下,然后就分享给有需要的朋友们顺便也查漏补缺一下。一面1.开始是自我介绍;2.HashMap的实现原理,什么是hash碰撞,怎样解决hash碰撞?3.ConcurrentHashMap的原理,与HashTable的区别?4.HashSet和TreeSet的区别以及底层实现原理5.HashMap
2021-01-20 15:40:32 43
转载 黑名单(诸如反爬虫等)
原文链接可恶的爬虫直接把生产6台机器爬挂了!引言正在午睡,突然收到线上疯狂报警的邮件,查看这个邮件发现这个报警的应用最近半个月都没有发布,应该不至于会有报警,但是还是打开邮件通过监控发现是由于某个接口某个接口流量暴增,CPU暴涨。为了先解决问题只能先暂时扩容机器了,把机器扩容了一倍,问题得到暂时的解决。最后复盘为什么流量暴增?由于最近新上线了一个商品列表查询接口,主要用来查询商品信息,展示给到用户。业务逻辑也比较简单,直接调用底层一个soa接口,然后把数据进行整合过滤,排序推荐啥的,然后吐给前端
2021-01-20 14:41:41 976
原创 页面修改线程池参数_2
除了修改核心线程数和最大线程数,实际中还经常需要修改阻塞队列长度,但是发现没有修改队列长度的方法,因为 LinkedBlockingQueue 的 capacity 被 final 修饰了。我们可以按照这个思路自定义一个队列,让其可以对 capacity 参数进行修改即可。操作起来也非常方便,把 LinkedBlockingQueue 粘贴一份出来,修改个名字,然后把 capacity 参数的 final 修饰符去掉,并提供其对应的 get/set 方法。//拷贝一份LinkedBlockin
2021-01-20 14:16:21 273 2
原创 页面修改线程池参数_1
public class ThreadChangeDemo { //创建 private static ThreadPoolExecutor createExecutor(int corePoolSize, int maximumPoolSize){ return new ThreadPoolExecutor(corePoolSize, .
2021-01-20 11:07:38 182
原创 状态模式实战
//返奖状态public abstract class RewardState { abstract void deal(String userId, String orderId);}//订单检查状态public class OrderCheckState extends RewardState { @Override void deal(String userId, String orderId) { System.out.println("order.
2021-01-19 17:15:30 194
原创 策略模式实战
//返奖策略接口public interface RewardStrategy { void reward(String userId);}//新用户返奖策略public class NewUserRewardStrategy implements RewardStrategy { @Override public void reward(String userId) { System.out.println("new user [" + userId .
2021-01-19 16:04:46 181
转载 设计模式在外卖营销业务中的实践
原文链接策略模式//定义一个策略接口public interface Strategy { void strategyImplementation();}//具体的策略实现(可以定义多个具体的策略实现)public class StrategyA implements Strategy{ @Override public void strategyImplementation() { System.out.println("正在执行策略A");
2021-01-19 15:09:39 53
转载 新一代垃圾回收器ZGC的探索与实践
原文链接ZGC(The Z Garbage Collector)是JDK 11中推出的一款低延迟垃圾回收器,它的设计目标包括:停顿时间不超过10ms; 停顿时间不会随着堆的大小,或者活跃对象的大小而增加; 支持8MB~4TB级别的堆(未来支持16TB)。从设计目标来看,我们知道ZGC适用于大内存低延迟服务的内存管理和回收。本文主要介绍ZGC在低延时场景中的应用和卓越表现,文章内容主要分为四部分:GC之痛:介绍实际业务中遇到的GC痛点,并分析CMS收集器和G1收集器停顿时间瓶颈; ZGC原
2021-01-19 14:42:33 98
转载 Java中9种常见的CMS GC问题分析与解决
原文链接1. 写在前面| 本文主要针对 Hotspot VM 中“CMS + ParNew”组合的一些使用场景进行总结。重点通过部分源码对根因进行分析以及对排查方法进行总结,排查过程会省略较多,另外本文专业术语较多,有一定的阅读门槛,如未介绍清楚,还请自行查阅相关材料。| 总字数 2 万左右(不包含代码片段),整体阅读时间约 30min ,文章较长,可以选择你感兴趣的场景进行研究。1.1 引言自 Sun 发布 Java 语言以来,开始使用 GC 技术来进行内存自动管理,避免了手动管理带来
2021-01-19 14:25:38 529
转载 Java线程池实现原理及其在美团业务中的实践
原文链接随着计算机行业的飞速发展,摩尔定律逐渐失效,多核CPU成为主流。使用多线程并行计算逐渐成为开发人员提升服务器性能的基本武器。J.U.C提供的线程池:ThreadPoolExecutor类,帮助开发人员管理线程并方便地执行并行任务。了解并合理使用线程池,是一个开发人员必修的基本功。本文开篇简述线程池概念和用途,接着结合线程池的源码,帮助读者领略线程池的设计思路,最后回归实践,通过案例讲述使用线程池遇到的问题,并给出了一种动态化线程池解决方案。一、写在前面1.1 线程池是什么线程池(
2021-01-19 11:53:36 138
转载 美团在O2O场景下的广告营销
美团作为中国最大的在线本地生活服务平台,覆盖了餐饮、酒店、旅行、休闲娱乐、外卖配送等方方面面生活场景,连接了数亿用户和数百万商户。如何帮助本地商户开展在线营销,使得他们能快速有效地触达目标用户群体提升经营效率,是美团的核心问题之一,而机器学习相关技术在本地在线营销场景下发挥着非常关键作用。本文将从5个方面来介绍。首先,介绍O2O场景下广告业务的特点,及其与B2B和B2C广告业务的差别;其次,从商户效果感知、用户体验和媒体平台收益三个维度,介绍O2O广告业务的最重要的考量指标;第三,从前两节阐述的业务特点
2021-01-19 10:07:03 494 1
原创 netty
rpc: 不同计算机之间进行远程通信实现数据交互的一种技术。 分server, client, server stub,client stub四部分。 client stub就是将服务的请求的参数,请求方法,请求地址通过打包封装给成一个对象统一发送给server端。server stub就是服务端接收到这些参数之后进行拆解得到最终数据的结果。dubbo内部的线程池: dubbo的服务提供者包含两类线程池,一类叫io线程池,一类叫业务线程池。netty里面的粘包和.
2021-01-18 11:44:29 153
原创 @DubboReference 之 interfaceName 和 interfaceClass
//不推荐interfaceName(易写错)@DubboReference(group = "sys-cnf", interfaceName = "sysUserService", version = "0.0.1")private CnfSysUserService sysUserService;//更推荐interfaceClass(简单,不易错)@DubboReference(group = "sys-cnf", interfaceCl.
2021-01-14 09:08:13 2856
原创 手写HashMap
public class MyHashMap<K,V> { Node<K,V>[] table; class Node<K,V> { int hash; K key; V value; Node<K,V> next; Node(int hash, K key, V value, Node<K, V> next) { this.
2021-01-13 15:06:43 122
原创 maven scope
1.test范围是指测试范围有效,在编译和打包时都不会使用这个依赖2.compile范围是指编译范围内有效,在编译和打包时都会将依赖存储进去3.provided依赖,在编译和测试过程中有效,最后生成的war包时不会加入 例如: servlet-api,因为servlet-api tomcat服务器已经存在了,如果再打包会冲突4.runtime在运行时候依赖,在编译时候不依赖默认依赖范围是compile...
2021-01-12 19:13:26 72
原创 Redis分布式锁(实例)
//加锁public Boolean tryLock(String key, String value, ExpireTime expire){ return smsRedisService.setIfAbsent(key, String.valueOf(System.currentTimeMillis()), ExpireTime.FIVE_MINUTES);}//解锁public void unLock(String key){ if(smsRedisService.hasK.
2021-01-07 14:01:28 87
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人