自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Sam_Deep_Thinking

努力深入思考和总结

  • 博客(298)
  • 资源 (1)
  • 问答 (12)
  • 收藏
  • 关注

原创 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 7510 6

原创 Spring Boot集成Mybatis简洁版

概述现在互联网应用中,大部分还是使用Mybatis来操作数据库的,本文介绍一下Spring Boot中如何集成Mybatis。创建Spring Boot工程在Spring Boot 开篇-创建和运行 一文中有一个小节介绍了如何使用Spring Boot的组件来创建工程。如果要集成Mybatis,只需要把Mysql和Mybatis这两个组件勾选一下即可。当然也可以

2018-02-05 15:50:13 883

原创 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 55873 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 2588 1

原创 深入理解Java虚拟机(第一版)-第三章读书笔记

深入理解Java虚拟机(第一版)-第三章读书笔记

2017-12-11 21:24:08 836

原创 深入理解Java虚拟机(第一版)-第二章读书笔记

深入理解Java虚拟机(第一版)-第二章读书笔记

2017-11-26 08:19:38 1405 2

原创 扩展ThreadPoolExecutor的一种办法

概述在JAVA的世界里,如果想并行的执行一些任务,可以使用ThreadPoolExecutor。 大部分情况下直接使用ThreadPoolExecutor就可以满足要求了,但是在某些场景下,比如瞬时大流量的,为了提高响应和吞吐量,最好还是扩展一下ThreadPoolExecutor。全宇宙的JAVA IT人士应该都知道ThreadPoolExecutor的执行流程:core线程还能应付的,则不断

2017-10-18 17:21:00 6279 19

原创 netty实战-netty client连接池设计

概述最近有很多网友在咨询netty client中,netty的channel连接池应该如何设计。这其实是个稍微有些复杂的主题,牵扯到蛮多技术点,要想在网上找不到相关的有相对完整的参考文章,确实不太容易。在本篇文章中,会给出其中一种解决方案,并且附带完整的可运行的代码。如果网友有更好的方案,可以回复本文,我们一起讨论讨论,一起开阔思路和眼界。阅读本文之前需要具备一些基础知识知道netty的一些基础

2017-09-15 13:58:31 27256 12

原创 netty实战-自定义解码器处理半包消息

概述在李林锋的Netty系列之Netty编解码框架分析中介绍了各种解码器,也推荐组合LengthFieldBasedFrameDecoderByteToMessageDecoder这两个解码器来处理业务消息。但是有时候为了灵活性,会直接选择继承ByteToMessageDecoder来处理业务消息,但是直接继承ByteToMessageDecoder,则需要自己处理半包问题。在李林锋的【netty

2017-09-10 10:29:23 14532 35

原创 <netty权威指南>笔记-分隔符解码器处理半包问题

概述在以回车换行结尾的消息如何处理半包问题 一文中介绍了如何处理以回车换行的消息的半包问题,如果消息用分隔符来切割的,那么如何处理半包问题呢?可以组合使用 DelimiterBasedFrameDecoder StringDecoder来处理半包问题。netty分隔符解码器服务端代码package nettyguide.encode.delimiter.server;import i

2017-09-05 19:07:37 3324

原创 <netty权威指南>笔记-以回车换行结尾的消息如何处理半包问题

概述TCP底层会发生粘包和拆包,这个是TCP的一个特性。为了减少网络数据传输的次数,TCP总是希望让网络数据到达一定量级的时候才将数据发送出去,而不是缓存区一有数据就马上发送数据。TCP底层会根据缓冲区是否被填满了,来决定是否发送数据。但是从业务层面上看,这个是不合理的。因为一份业务数据可能很小,还不足以填满缓冲区,这样底层TCP就不会立刻把这份业务数据发送出去,而是等到好几份业务数据的大小填满缓冲

2017-09-01 23:28:36 3808

原创 netty实战之百万级流量NioEventLoopGroup线程数配置

编写netty服务端程序的时候,会使用到两个线程组 EventLoopGroup parentGroup = new NioEventLoopGroup(); EventLoopGroup childGroup = new NioEventLoopGroup();那么parentGroup和childGroup分别应该设置多少个线程呢?关于netty的线程组概念,李林锋的Netty系

2017-08-30 14:26:41 37421 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 12530 1

原创 netty学习十三:零拷贝底层实现原理

零拷贝概述零拷贝可以避免无谓的copy动作,为了说清楚这一点,本文会先从传统的读写操作开始介绍。传统读操作当应用发起一个从磁盘读取文件的操作时,请求会先经过内核,由内核与磁盘进行交互。数据会从磁盘拷贝到内核的缓存区中。这个copy动作由DMA完成,整个过程中基本上不消耗CPU。DMA 硬件和软件的信息传输,可以使用DMA(direct memory access)来完成如果应用想拿到信息,还得

2017-08-28 20:15:42 12968 7

原创 netty学习十二:了解NIO Buffer中的postion和capacity和limit

netty学习十二:了解NIO Buffer中的postion和capacity和limit

2017-08-22 06:27:16 1965 4

原创 netty学习十一:NIO客户端服务端通讯demo

netty学习十一:NIO客户端服务端通讯demo

2017-08-20 15:26:38 1339

原创 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 6071

原创 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 3062

原创 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 1718

原创 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 2809

原创 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 1056

原创 netty学习五:websocket小demo

netty学习五:websocket小demo

2017-08-05 07:50:09 1325 1

原创 netty学习四:监听channel的读写空闲情况

概述netty提供了一个IdleStateHandler类,可以用监听channel的读写空闲状态。构造方法如下: public IdleStateHandler(long readerIdleTime, long writerIdleTime, long allIdleTime,TimeUnit unit) { }1、当隔了readerIdleTime后,如果客户端未发送信息到服务端,那么会触发c

2017-07-30 17:21:22 5519 2

原创 netty学习三:基于socket的聊天小demo

netty学习三:基于socket的聊天小demo

2017-07-30 12:53:33 1482 3

原创 netty学习二:基于socket通讯的小demo

netty socket编程小demo

2017-07-29 16:07:42 1744

原创 netty学习一:用netty构造http服务的小demo

概述netty可以支持http、socket、websocket,本文会做一个小demo,简单介绍一下如何用netty搭建一个http服务。netty虽然可以提供http服务,但是相比spring mvc、struts2等框架,netty显得比较底层,很多spring mvc提供的功能,netty统统都没有。步骤编写netty程序的步骤都比较相似: 1、 启动group监听客户端请求 2、编写I

2017-07-23 10:50:18 3389 1

原创 利用Apache工具和Guava对ArrayList进行分页

概述之前写过一篇对ArrayList进行分页,介绍如何用JAVA API对ArrayList进行分页,下面再介绍另外两种方法。使用Apache工具使用Apache的ListUtils类,一行代码即可解决。import java.util.Arrays;import java.util.List;import org.apache.commons.collections4.ListUtils;imp

2017-06-14 15:28:44 5029 1

原创 下载Spring源代码

概述惭愧,工作好几年了,现在才来开始研究Spring的源代码。Spring 源代码路径https://github.com/spring-projects/spring-framework.git直接使用git clone https://github.com/spring-projects/spring-framework.git下载的过程比较漫长,慢慢等。使用Gradle 构建代码Spring是

2017-06-09 10:13:48 691

原创 JAVA+信号量:阻塞线程

概述为了提高接口的响应速度,可以使用ThreadPoolExecutor + Runnable 或者ThreadPoolExecutor 并发调用 技术来并行执行task。但是ThreadPoolExecutor有个特点,就是当core线程不足以应付请求的时候,会将task加入到队列中。一旦使用队列,那么就可能出现队列爆掉或者队列导致的内存溢出问题。为了尽快提供接口响应速度,但是又不想使用队列特性

2017-06-05 09:08:21 2316

原创 ThreadPoolExecutor + Runnable

概述在ThreadPoolExecutor 并发调用 一文中介绍了ThreadPoolExecutor + Callable的方法并行执行task,其实ThreadPoolExecutor还有另一种用法, ThreadPoolExecutor + Runnable。如果你不理会task执行的结果,可以使用这种方法。 代码public class TestExecutorCountDown

2017-06-05 08:31:10 2597

原创 重构大型业务型写接口-并行处理注意点

概述为了提高接口的处理速度,通常会使用并行的方式。在JAVA中可以使用ThreadPoolExecutor 或者ForkJoinPool 。像并行查询或者并行调用外部接口,经常会用到这两种技术,基本上没什么坑。但是如果是使用这两种技术来重构大型的业务型写接口,则需要小心细致。 task切分task粒度切分是个技术活。必须大小合适。尽量保证执行task的每个线程...

2017-06-04 22:01:36 2136

原创 利用ConcurrentHashMap和计数器实现锁

概述在某些场景下,我们想让线程根据某些业务数据进行排队,简单代码如下:import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.concurrent.ConcurrentHashMap;import ...

2017-05-27 13:51:11 2640 2

原创 ThreadPoolExecutor 并发调用

概述通常为了提供任务的处理速度,会使用一些并发模型,ThreadPoolExecutor中的invokeAll便是一种。 代码package test.current;import java.util.ArrayList;import java.util.Arrays;import java.util.List;import java.util.concurrent.Callable;

2017-05-05 21:22:45 2400

原创 系统防刷的一些基本方法

概述上周系统被刷了,由于系统是纯db操作,没有缓存的,所以db的压力非常大,后续的请求已经无法拿到db连接了。虽然系统用几十个数据库分库,但是黑客就只是刷一个商品,这样所有的请求就会落到同一个DB。当时刚好我是值班人员,全程参与了整个过程。系统被刷了应该如何处理以及系统如何做防刷,算是有一点点心得。 将商品下线如果某个热门商品被刷了,可以紧急联系后台业务人...

2017-05-05 21:13:24 7308 5

原创 请求量稍微比较大-尽量避免长事务

概述某些后台应用经常需要频繁的操作DB,为了保证数据出错时能回滚数据,通常都会使用事务。在使用事务的时候,尽量避免使用长事务,比如说:某个业务操作需要批量插入数据,而且数据量还不少,如果这整个操作都包在一个事务里面,只有等到数据操作完了,DB连接才会被释放,一旦外部系统发起请求,并发调用这个操作,那么一下子将有大量的DB连接被持有而没有被释放掉,这个时候,如果还有其他请求到来,就很大可能获取不到数

2017-05-05 20:47:33 6171

原创 库存仓库和推荐仓库进行匹配简单算法

概述通常在电商项目的库存项目中,每条库存记录都有一个对应的仓库字段,warehouse,同一个商品可能在多个仓库中都存在的。假设用户添加一个商品sku1到购物车中,这个sku1在warehouse1和warehouse2都存在,这个时候到底要扣减哪个仓库中的库存呢?这里有个仓库优先级的概念,一般来说,会有专门的系统来决定仓库扣减的优先级。假设这个专门的系统叫SystemB,我们只需要传入一个用户的

2017-03-28 07:20:09 6604

原创 多个仓库库存释放-简单算法

概述在做电商项目的时候,会涉及到库存扣减的问题,稍微复杂的情况是,多仓库库存扣减,比如说: 仓库warehouse1有4件商品,warehouse2有3件商品,这个时候用户需要买7件商品,这样无论哪个仓库都不够扣减, 这种情况下,会使用多仓库库存扣减的逻辑,warehouse1和warehouse2两个仓库的库存之和是3+4=7,是足够扣减6件的。好了,当使用多仓扣减的时候,用户突然不想买6件了

2017-03-27 14:39:39 3216

原创 多个仓库库存扣减-简单算法

概述在做电商项目的时候,会涉及到库存扣减的问题,稍微复杂的情况是,多仓库库存扣减,比如说: 仓库warehouse1有4件商品,warehouse2有3件商品,这个时候用户需要买7件商品,这样无论哪个仓库都不够扣减, 这种情况下,会使用多仓库库存扣减的逻辑,warehouse1和warehouse2两个仓库的库存之和是3+4=7,是足够扣减6件的。简单代码public class Stock {

2017-03-27 14:13:20 4450

原创 面试官咋看你

概述当你去面试的时候,面试官会怎么判断你这个人呢?大概是这几个方面: 1、学历; 2、在哪些著名公司待过; 3、在以前的公司做到什么职位; 4、在以前的公司中,有没有一个长期的积累; 5、技术实力。学历我以前很不相信学历在社招中会起到作用,只要自己技术好,什么公司都能进。后来我发现自己大错特错了。面试官会因为你不是重点学校出来的而为难你,就算你前几轮面试都非常顺利,最后一轮的面试官如果觉得

2017-02-25 07:11:54 1498

原创 偏向锁-学习

偏向锁介绍。

2017-02-19 12:05:43 1079 2

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除