- 博客(316)
- 资源 (1)
- 问答 (12)
- 收藏
- 关注
原创 Junit测试带有@Async注解的service,主线程先退出的问题
概述今天使用Junit测试一个带有@Async的业务service,进行debug的时候,业务代码都没执行完,线程就退出了。之前以为是中间抛了什么异常,导致线程提前退出。但是很细心的看了很久,并没有任何异常信息。后面才发现原来是主线程退出了。由于使用了@Async注解,操作是异步的,主线程里面就执行完退出了。那么Junit这边,整个case就提前走完了。后面我用了个笨办法,在让主线...
2018-04-25 21:16:03
4201
4
原创 redis的incrBy操作如何设置key的失效时间
概述最近在使用redis,用到里面的incrBy操作,但是这个API没有提供一个参数来设置key的失效时间。 我自己想了一个比较low的办法。 Long limit = redisStringService.incrBy(limitCacheKey, 1); //拿到数字1的那个线程,设置key的有效期 if (limit == 1) { redisString...
2018-04-20 21:38:06
12226
2
原创 第一个微信小程序之Hello World
概述在小程序账号注册完整流程一文中详细介绍了如何注册一个小程序账号。下面我们介绍一下如何开发一个Hello World的小程序。微信开发者工具下载访问(https://mp.weixin.qq.com),用小程序账号登录后,按照如下步骤下载微信开发者工具。1、点击【文档】链接2、点击【开发】链接,在弹出的选项中,选择【小程序开发】3、点击【工具】的链接4、...
2018-04-01 22:25:59
21497
原创 小程序账号注册完整流程
概述在开始写微信小程序之前,必须先有小程序账号,本文将使用图文的方式,详细的介绍整个注册的过程。选择注册类型打开微信公众平台(https://mp.weixin.qq.com)后,点击立即注册按钮。 点击完【立即注册】后,注册类型选择小程序。 点击小程序图标后,将真正进入小程序注册流程。账号信息填写这里大家要注意一下,这里填写的邮箱不可以...
2018-04-01 20:04:33
31147
3
原创 使用Netty的ReplayingDecoder解决拆包和粘包问题
概述在自定义解码器处理半包消息 分隔符解码器处理半包问题 以回车换行结尾的消息如何处理半包问题 三篇文章中,笔者介绍了在Netty如何解决拆包和粘包问题,其中自定义解码器处理半包消息 里面介绍的方法是在线上实际用过的,经过了超级大流量的验证,挺靠谱的。下面再介绍另外一种解决半包问题的方法,虽然我没实际在线上用过,但是可以当成是一种知识补充。直接上代码在...
2018-03-30 09:31:34
6410
4
原创 小程序应用,获取微信用户的unionid
概述关于unionid的作用,可以先看我之前写的小程序中的unionid。那么unionid如何获取呢?有两种方式:1、通过wx.getUserInfo(); 2、通过jscode2session接口。使用getUserInfo方法我们可以在小程序端使用如下代码: wx.getUserInfo()获取到用户的信息,用户信息里面会包含encrypted...
2018-03-26 13:28:37
3137
原创 生成无限制的微信小程序码
概述现在除了用二维码之外,微信还可以为我们生成小程序码,大概长这个样子。 如果要生成无限制的小程序码,需要几个步骤 1、小程序某个页面的地址,也即是指定page参数的值; 2、获取access_token; 3、指定scene参数的值; 4、调用getwxacodeunlimit接口,并将返回结果存储到一个图片里。page参数page参数的值都是以pages开...
2018-03-25 20:19:48
16974
3
原创 小程序中的unionid
概述一家公司可以到微信平台上注册为一个开发者主体,一个主体下可以有多个公众号、小程序等。下面以小程序作为例子来说清楚unionid。开发者主体下有多个小程序一些小型的电商公司,会用小程序来开发商城,但是为了拉新用户,通常还会开发出像福袋、抽奖等小程序。现在假设有这样的场景,在同一个开发者主体下,一个微信用户从福袋小程序中获得了一张优惠券,想到小程序商城这个小程序...
2018-03-25 16:05:28
5155
原创 能不用事务就尽量别用
概述以前在公司里,有个牛人对俺说: 事务就是个垃圾,能不用就尽量不用。当时我刚从传统行业切换到互联网行业,对这个牛人说的这句话是嗤之以鼻的,怎么可能不用事务呢?后来随着开发了多个高并发应用后,才知道这个牛人说的是对的。下面说两个亲身经历的案例来说明这个问题。库存扣减接口(写事务)当时我们有个业务,在购物车阶段的时候,就开始占用库存了,这个库存占用接口的流量...
2018-03-25 12:25:04
5927
原创 微信用户访问小程序的登录过程
概述 当你开发完了一个小程序并部署上线后,某个微信用户第一次访问这个小程序的时候,会弹出一个授权界面,用户可以选择是否使用微信登录,如果选择是,则直接进入到小程序。当你第二次进入该小程序的时候,你会发现授权界面不会弹出来了,直接就进入小程序了。这个过程看起来非常的简单,但其实实现起来相当的麻烦和繁琐。涉及到会话、安全、验证等各种各样的问题。下面笔者介绍一下实现这个登录过程的思路。...
2018-03-24 22:55:44
19223
4
原创 UUID几个缺点
第一个UUID字符串占用的空间比较大。第二个索引效率很低。第三个生成的ID很随机,不是人能读懂的。第四个做不了递增,如果要排序的话,基本不太可能。...
2018-03-21 10:47:45
10478
原创 IDEA 2017.3版本下Mybatis plugin 3.53安装使用
IDEA版本 2017.3mybatis插件版本 Mybatis plugin 3.53下载地址: http://plugins.jetbrains.com/plugin/7293-mybatis-plugin破解打开IDEA的插件设置界面,选择【Install plugin from disk】后,点击确定按钮。关闭IDE...
2018-03-19 10:13:29
4444
2
原创 业务流水号(交易号)生成方法
概述在大流量下订单号生成方法一文中介绍了如何生成不重复的订单号,主要原理是利用数据库自增ID。但是像业务流水号之类的,其实不利用数据库也是可以的,只是要保证唯一性,做起来不太好做。下文介绍一种方法来生成流水号,如果不是那种特别变态的调用量,产生重复的机会还是很少的。但是如果是那种无论如何都不能重复的,不建议用本文的方法了。流水号生成规则 时间+四位的机器号+10位的...
2018-03-09 12:56:16
31340
1
原创 大流量下订单号生成方法
流量不大的情况下,订单号生成很久之前写过一篇利用DB生成业务主键的文章,介绍了利用DB来生成唯一的ID。当时便是用这种方式来生成订单号的。只不过拿到ID后,根据订单业务,简单加个前缀而已。@Servicepublic class KeyGen{ @Autowired private KeyGenRepository keyGenRepository; publi...
2018-03-08 12:30:02
4950
原创 创建订单实现幂等的一点思考
幂等的概念大部分文章都会说,同一个操作,进行多次操作后,结果是一样的,就可以说这个操作是支持幂等的。感觉不太准确,比如一个http get操作,可能每次的结果都不一样,但是其实是幂等的。看了很多文章,感觉下面的定义比较准确: 一个操作如果多次任意执行所产生的影响(或者叫副作用),都是相同的。创建订单的幂等如果一个用户分两次下单,购买的商品都是一样的。第一次...
2018-03-06 13:55:49
8429
原创 索引表和ES的一点点思考
索引表设计在电商项目中,物理库存系统是个极其重要的系统,订单支付后,就会开始来占用物理库存。一般情况下,库存系统都是要分库的,因为主要的操作是写操作,例如占用/释放/取消等写操作。使用分库可以降低数据库写的压力。尽管写操作为主,但是读操作也是有的。比如说,库存占用的时候,得先查询是否有库存,而这个查询操作并不都会带上分库因子(用于路由到具体的某个数据库),而是一些比较宽松的查询条件,这些查...
2018-03-01 12:22:47
13629
14
原创 Spring Cloud Feign简单使用
概述在Spring Cloud EureKa Ribbon 服务注册-发现-调用一文中简单的介绍了在Spring Cloud中如何使用EureKa和Ribbon。文章中使用了RestTemplate去访问其他的restful微服务接口。其实在Spring Cloud还可以使用Feign来访问其他的restful微服务接口。使用起来更加的简洁明了。集成Feign修改一下S...
2018-02-24 16:54:52
1537
原创 Spring Cloud EureKa Ribbon 服务注册-发现-调用
概述用一个简单的例子演示Spring Cloud中EureKa和Ribbon的基本用法。版本和环境IDEASpring Boot 1.5.·0JDK 1.8Maven 3构建eureka server在Spring Cloud,可以使用eureka来管理微服务,微服务可以注册到eureka中。首先可以用IDEA的Spring Initi...
2018-02-24 14:44:47
7708
6
原创 Spring Boot集成Mybatis简洁版
概述现在互联网应用中,大部分还是使用Mybatis来操作数据库的,本文介绍一下Spring Boot中如何集成Mybatis。创建Spring Boot工程在Spring Boot 开篇-创建和运行 一文中有一个小节介绍了如何使用Spring Boot的组件来创建工程。如果要集成Mybatis,只需要把Mysql和Mybatis这两个组件勾选一下即可。当然也可以
2018-02-05 15:50:13
942
原创 Spring Boot 直接用jar运行项目
概述在Spring Boot 开篇-创建和运行一文中,介绍了如何创建一个Sprint Boot项目并且运行起来。但是运行的方式是在IDEA中直接Run起来的。还有另一中方式可以可以把Spring Boot程序运行起来,就是直接在命令行中执行jar包。打成jar包以往的WEB程序需要打成WAR包,部署到Tomcat上,而Spring Boot支持打包成JAR的形式,就算是
2018-02-05 13:17:58
56814
1
原创 Spring Boot 开篇-创建和运行
概述还没玩过Spring Boot,现在越来越多的公司在用了,不得不学习了。本篇是Spring Boot的开篇,简单介绍一下如何创建一个Spring Boot项目和运行起来。环境准备1、JDK 1.8 2、IDEA 3、Spring Boot的版本是1.5.10创建Spring Boot的工程new一个project选择Sprin...
2018-02-02 16:37:33
2777
原创 扩展ThreadPoolExecutor的一种办法
概述在JAVA的世界里,如果想并行的执行一些任务,可以使用ThreadPoolExecutor。 大部分情况下直接使用ThreadPoolExecutor就可以满足要求了,但是在某些场景下,比如瞬时大流量的,为了提高响应和吞吐量,最好还是扩展一下ThreadPoolExecutor。全宇宙的JAVA IT人士应该都知道ThreadPoolExecutor的执行流程:core线程还能应付的,则不断
2017-10-18 17:21:00
6457
7
原创 netty实战-netty client连接池设计
概述最近有很多网友在咨询netty client中,netty的channel连接池应该如何设计。这其实是个稍微有些复杂的主题,牵扯到蛮多技术点,要想在网上找不到相关的有相对完整的参考文章,确实不太容易。在本篇文章中,会给出其中一种解决方案,并且附带完整的可运行的代码。如果网友有更好的方案,可以回复本文,我们一起讨论讨论,一起开阔思路和眼界。阅读本文之前需要具备一些基础知识知道netty的一些基础
2017-09-15 13:58:31
27715
12
原创 netty实战-自定义解码器处理半包消息
概述在李林锋的Netty系列之Netty编解码框架分析中介绍了各种解码器,也推荐组合LengthFieldBasedFrameDecoderByteToMessageDecoder这两个解码器来处理业务消息。但是有时候为了灵活性,会直接选择继承ByteToMessageDecoder来处理业务消息,但是直接继承ByteToMessageDecoder,则需要自己处理半包问题。在李林锋的【netty
2017-09-10 10:29:23
14881
35
原创 <netty权威指南>笔记-分隔符解码器处理半包问题
概述在以回车换行结尾的消息如何处理半包问题 一文中介绍了如何处理以回车换行的消息的半包问题,如果消息用分隔符来切割的,那么如何处理半包问题呢?可以组合使用 DelimiterBasedFrameDecoder StringDecoder来处理半包问题。netty分隔符解码器服务端代码package nettyguide.encode.delimiter.server;import i
2017-09-05 19:07:37
3554
原创 <netty权威指南>笔记-以回车换行结尾的消息如何处理半包问题
概述TCP底层会发生粘包和拆包,这个是TCP的一个特性。为了减少网络数据传输的次数,TCP总是希望让网络数据到达一定量级的时候才将数据发送出去,而不是缓存区一有数据就马上发送数据。TCP底层会根据缓冲区是否被填满了,来决定是否发送数据。但是从业务层面上看,这个是不合理的。因为一份业务数据可能很小,还不足以填满缓冲区,这样底层TCP就不会立刻把这份业务数据发送出去,而是等到好几份业务数据的大小填满缓冲
2017-09-01 23:28:36
4059
原创 netty实战之百万级流量NioEventLoopGroup线程数配置
编写netty服务端程序的时候,会使用到两个线程组 EventLoopGroup parentGroup = new NioEventLoopGroup(); EventLoopGroup childGroup = new NioEventLoopGroup();那么parentGroup和childGroup分别应该设置多少个线程呢?关于netty的线程组概念,李林锋的Netty系
2017-08-30 14:26:41
38795
15
原创 netty实战之ChannelOption配置
服务端ServerBootstrap之ChannelOption配置public static void main(String[] args) throws InterruptedException { EventLoopGroup parentGroup = new NioEventLoopGroup(); EventLoopGroup childGroup =
2017-08-29 19:23:05
12881
1
原创 netty学习十三:零拷贝底层实现原理
零拷贝概述零拷贝可以避免无谓的copy动作,为了说清楚这一点,本文会先从传统的读写操作开始介绍。传统读操作当应用发起一个从磁盘读取文件的操作时,请求会先经过内核,由内核与磁盘进行交互。数据会从磁盘拷贝到内核的缓存区中。这个copy动作由DMA完成,整个过程中基本上不消耗CPU。DMA 硬件和软件的信息传输,可以使用DMA(direct memory access)来完成如果应用想拿到信息,还得
2017-08-28 20:15:42
13916
5
原创 netty学习十二:了解NIO Buffer中的postion和capacity和limit
netty学习十二:了解NIO Buffer中的postion和capacity和limit
2017-08-22 06:27:16
2167
1
原创 netty学习十:google grpc框架环境搭建以及第一个demo
概述本文将会介绍两部分内容: 1、window 7 上搭建grpc环境; 2、构建关于grpc的java小demo.下载grpc java依赖包为了能生成针对java的grpc客户端和服务端代码(官方叫stub),需要下载一些java包和grpc编译器以及一些gradle 插件java依赖包 compile ‘io.grpc:grpc-netty:1.4.0
2017-08-13 18:44:12
6298
原创 netty学习九:(window7上)python客户端通过thrift调用java服务端
概述本文简单介绍使用python编写客户端代码,通过thrift rpc框架,调用java端远程服务。在64位window 7上安装pythonpython对应的下载链接:python下载本文使用的版本是 python-2.7.9下载完后文件名字是 python-2.7.9.amd64.msi点击直接安装,一路next即可。下载JetBrains PyCharmpython最好的IDE当
2017-08-10 11:34:25
3256
原创 netty学习八:在window上安装thrift以及第一个小demo
下载thrift window编译器需要先下载编译器,本文用的版本是: thrift-0.10.0.exe对应的下载链接:thrift编译器将下载好后的thrift-0.10.0.exe重命名成thrift.exe,并配置到window path路径上,假设thrift.exe是放置在如下目录: D:\test\software\lib\thrift那么直接
2017-08-09 09:28:37
1934
原创 netty学习七:集成protobuf完成单个对象序列化以及在网络上传输
概述本文介绍使用netty集成google的protobuf框架,完成proto JAVA对象的序列化和反序列化。编写proto文件protobuf使用.proto文件来描述对象结构体的信息。 Person.proto文件的位置 src/main/java/protobuf/seconddemo/Person.protosyntax = "proto2";package protobuf;
2017-08-07 21:41:23
2987
原创 netty学习六:第一个protobuf小demo
概述本文介绍google的protobuf框架的环境搭建以及使用它编写一个小demo。配置proto编译器如果要在window上使用proto编译器,需要下载针对window的编译器,本文使用的是: protoc-3.3.0-win32.zip解压完后,将protoc.exe编译器所在的路径设置到path路径上. C:\sam\software\protobuf\bin这点使用windo
2017-08-06 18:08:25
1206
空空如也
数据权限是基于角色还是用户?
2010-08-11
旧系统重构,数据迁移问题
2010-07-29
有两个字段要频繁的查询,如何建立索引?
2010-02-25
url中用 like %林% 做为参数。出现了乱码问题。
2009-12-10
java 完全反编译
2009-12-03
jdk1.5或者jdk1.6如何跟tomcat5.0.27兼容
2009-11-25
javascipt问题:关闭模态对话框,启动新的窗口
2009-11-17
电脑同时插入50个优盘,如何把数据写入50个优盘里面?
2009-07-13
远程访问mysql数据库问题请教
2009-06-24
如何将中央服务器上的数据传到其他的电脑上
2009-06-24
局域网内的A电脑和B电脑之间最好用什么方式进行数据传送?
2009-10-16
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅