Sam哥哥聊技术

互联网技术爱好者

排序:
默认
按更新时间
按访问量

Intellij IDEA神器那些让人爱不释手的小技巧

概述 在2018年5月6日写了一篇介绍IntellIJ IDEA的文章,Intellij IDEA神器居然还有这些小技巧,主要是列出一些平时大家可能没用过或者没怎么用,但是又非常好用的IntellIJ IDEA小技巧。由于篇幅原因,只是列出了一小部分,那么接下来的这篇文章,会继续补充一些In...

2018-06-03 22:47:16

阅读数:5869

评论数:4

Intellij IDEA神器居然还有这些小技巧

概述 Intellij IDEA真是越用越觉得它强大,它总是在我们写代码的时候,不时给我们来个小惊喜。出于对Intellij IDEA的喜爱,我决定写一个与其相关的专栏或者系列,把一些好用的Intellij IDEA技巧分享给大家。本文是这个系列的第一篇,主要介绍一些你可能不知道的但是又实用...

2018-05-06 13:17:01

阅读数:9750

评论数:28

Spring Cloud Config结合Bus实现分布式配置中心

概述 假设现在有个需求: 我们的应用部署在10台机器上,当我们调整完某个配置参数时,无需重启机器,10台机器自动能获取到最新的配置。 如何来实现呢?有很多种,比如: 1、将配置放置到一个数据库里面,应用每次读取配置都是直接从DB读取。这样的话,我们只需要做一个DB变更,把最新的...

2018-05-05 09:27:56

阅读数:761

评论数:0

Spring Boot RabbitMQ 延迟消息实现完整版

概述 曾经去网易面试的时候,面试官问了我一个问题,说 下完订单后,如果用户未支付,需要取消订单,可以怎么做 我当时的回答是,用定时任务扫描DB表即可。面试官不是很满意,提出: 用定时任务无法做到准实时通知,有没有其他办法? 我当时的回答是: 可以用队列,订单下...

2018-05-03 13:19:39

阅读数:3464

评论数:13

业务流水号(交易号)生成方法

概述 在大流量下订单号生成方法一文中介绍了如何生成不重复的订单号,主要原理是利用数据库自增ID。但是像业务流水号之类的,其实不利用数据库也是可以的,只是要保证唯一性,做起来不太好做。下文介绍一种方法来生成流水号,如果不是那种特别变态的调用量,产生重复的机会还是很少的。但是如果是那种无论如何都...

2018-03-09 12:56:16

阅读数:1374

评论数:0

大流量下订单号生成方法

流量不大的情况下,订单号生成 很久之前写过一篇利用DB生成业务主键的文章,介绍了利用DB来生成唯一的ID。当时便是用这种方式来生成订单号的。只不过拿到ID后,根据订单业务,简单加个前缀而已。 @Service public class KeyGen{ @Autowired ...

2018-03-08 12:30:02

阅读数:902

评论数:0

创建订单实现幂等的一点思考

幂等的概念 大部分文章都会说,同一个操作,进行多次操作后,结果是一样的,就可以说这个操作是支持幂等的。感觉不太准确,比如一个http get操作,可能每次的结果都不一样,但是其实是幂等的。看了很多文章,感觉下面的定义比较准确: 一个操作如果多次任意执行所产生的影响(或者叫副作用),都...

2018-03-06 13:55:49

阅读数:1199

评论数:0

利用DB实现分布式锁的思路

概述 以前参加过一个库存系统,由于其业务复杂性,搞了很多个应用来支撑。这样的话一份库存数据就有可能同时有多个应用来修改库存数据。比如说,有定时任务域xx.cron,和SystemA域和SystemB域这几个JAVA应用,可能同时修改同一份库存数据。如果不做协调的话,就会有脏数据出现。对于跨J...

2018-03-05 15:06:42

阅读数:1757

评论数:0

索引表和ES的一点点思考

索引表设计 在电商项目中,物理库存系统是个极其重要的系统,订单支付后,就会开始来占用物理库存。一般情况下,库存系统都是要分库的,因为主要的操作是写操作,例如占用/释放/取消等写操作。使用分库可以降低数据库写的压力。尽管写操作为主,但是读操作也是有的。比如说,库存占用的时候,得先查询是否有库存...

2018-03-01 12:22:47

阅读数:6693

评论数:25

扩展ThreadPoolExecutor的一种办法

概述在JAVA的世界里,如果想并行的执行一些任务,可以使用ThreadPoolExecutor。 大部分情况下直接使用ThreadPoolExecutor就可以满足要求了,但是在某些场景下,比如瞬时大流量的,为了提高响应和吞吐量,最好还是扩展一下ThreadPoolExecutor。全宇宙的JA...

2017-10-18 17:21:00

阅读数:4924

评论数:19

netty实战-netty client连接池设计

概述最近有很多网友在咨询netty client中,netty的channel连接池应该如何设计。这其实是个稍微有些复杂的主题,牵扯到蛮多技术点,要想在网上找不到相关的有相对完整的参考文章,确实不太容易。在本篇文章中,会给出其中一种解决方案,并且附带完整的可运行的代码。如果网友有更好的方案,可以回...

2017-09-15 13:58:31

阅读数:7729

评论数:6

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

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

2017-09-10 10:29:23

阅读数:5276

评论数:17

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

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

2017-08-28 20:15:42

阅读数:3710

评论数:2

互联网高级测试工程师至少具备的能力

业务熟悉 熟悉本系统 测试人员参与测试的系统的各种业务场景,必须做到精熟 。一旦需求有改动,可以清楚快速的知道上下文。同时可以清楚的知道哪些点是需要重点测试的。 熟悉跟本系统有通讯的上下游系统业务 跟本系统有通讯的上下游系统也要非常熟悉。这样一旦系统出现问题,可以知...

2016-08-19 14:35:05

阅读数:11782

评论数:48

Python基础学习-字典以及字典推导

字典 # 空字典 map1 = {} print(type(map1)) # 给字段赋值 map2 = {'x': 1, 'y': 2} print(map2) # 给字典添加值 map2['z'] = 3 print(map2) 输出结果: <class ...

2018-06-20 09:32:39

阅读数:6

评论数:0

Python基础学习-条件与循环

if语句 最简单的if语句 # 定义age变量 age = 12 # 最简单的if语句 if age == 12: print("age等于12") 输出结果如下: age等于12 ...

2018-06-18 19:29:10

阅读数:49

评论数:0

Python基础学习-序列

序列的概念 序列是指它的成员都是有序排列,并且可以通过下标偏移量访问到它的一个或几个成员。像字符串、列表和元祖都属于序列。 字符串: “xxxxyyy” 列表: [“aa”,”bb”] 元祖: (”abc”,”def”) 比如对一个字符串的处理: # 定义变量s,存储字母 ...

2018-06-18 18:57:18

阅读数:27

评论数:0

Python基础学习-基础语法

数据类型 整数(int) 浮点数(float) 字符串(str) 布尔值(bool) 区分数字类型 我们可以使用type()方法来区分数字类型。 # 字符串 print(type("111&...

2018-06-16 16:23:48

阅读数:99

评论数:0

遇到过的判断营销活动状态的两种方案

利用活动开始时间和结束时间 像天猫、京东、唯品会,经常会推出各种各样的营销活动来吸引用户购买,营销活动是有状态的,一般来说,有以下几种状态。 活动未开始,活动已开始、活动已结束、活动已废弃 活动未开始、已开始、已结束,这三个状态可以使用活动开始时间和活动结束时间来得出。 pub...

2018-05-20 12:17:28

阅读数:60

评论数:0

犯了个低级错误:mybatis中在select标签中用了update语句

概述 昨晚想使用类似下面的语句防并发问题: update xxxxx set state= 1 where id = 1 and state= 0 这样万一有线程并发修改state,那么只有一个线程能拿到大于0的影响行数。谁知一调用就报如下错误: attempted to ...

2018-05-19 10:35:25

阅读数:85

评论数:0

推荐一个Intellij IDEA插件--Key Promoter X

概述 Key Promoter X 是一个提示插件,当你在IDEA里面使用鼠标的时候,如果这个鼠标操作是能够用快捷键替代的,那么Key Promoter X会弹出一个提示框,告知你这个鼠标操作可以用什么快捷键替代。对于想完全使用快捷键在IDEA的,这个插件就很有用。 安装这个插件很简单,只...

2018-05-16 08:31:35

阅读数:553

评论数:0

win10下安装rabbitmq

下载地址 http://www.rabbitmq.com/install-windows.html 打开这个网站,直接下载 rabbitmq-server-3.7.4.exe 安装rabbitmq 双击rabbitmq-server-3.7.4.exe,注意自己指...

2018-05-02 19:40:14

阅读数:183

评论数:0

Win10下安装erlang

下载地址 erlang下载地址 http://www.erlang.org/downloads 打开网址后,如果是win10是64位的,则选择64位的版本,下载后的文件名如下: otp_win64_20.3.exe 双击exe文件,注意最好不要使用默认安装路径,因为默...

2018-05-02 19:13:02

阅读数:223

评论数:0

连续调用多个外部系统的写接口-如何保证数据一致性(思路)

概述 某些场景下,我们将业务数据落地之前,是需要先调用外部系统的多个写接口,当这些写接口都操作成功了,我们才将业务数据落地到自己本地的数据库里面。比如说: public void updateProductInfo(Product product) { //1、将商品价格更新到...

2018-04-28 13:35:52

阅读数:150

评论数:0

Junit测试带有@Async注解的service,主线程先退出的问题

概述 今天使用Junit测试一个带有@Async的业务service,进行debug的时候,业务代码都没执行完,线程就退出了。之前以为是中间抛了什么异常,导致线程提前退出。但是很细心的看了很久,并没有任何异常信息。后面才发现原来是主线程退出了。 由于使用了@Async注解,操作是异步的,主...

2018-04-25 21:16:03

阅读数:81

评论数:0

redis的incrBy操作如何设置key的失效时间

概述 最近在使用redis,用到里面的incrBy操作,但是这个API没有提供一个参数来设置key的失效时间。 我自己想了一个比较low的办法。 Long limit = redisStringService.incrBy(limitCacheKey, 1); //拿到数字1的那...

2018-04-20 21:38:06

阅读数:136

评论数:0

List转Map的三种方法

List转Map三种方法。

2018-04-03 13:26:33

阅读数:664

评论数:2

第一个微信小程序之Hello World

概述 在小程序账号注册完整流程一文中详细介绍了如何注册一个小程序账号。下面我们介绍一下如何开发一个Hello World的小程序。 微信开发者工具下载 访问(https://mp.weixin.qq.com),用小程序账号登录后,按照如下步骤下载微信开发者工具。 1、点...

2018-04-01 22:25:59

阅读数:856

评论数:0

小程序账号注册完整流程

概述 在开始写微信小程序之前,必须先有小程序账号,本文将使用图文的方式,详细的介绍整个注册的过程。 选择注册类型 打开微信公众平台(https://mp.weixin.qq.com)后,点击立即注册按钮。 点击完【立即注册】后,注册类型选择小程序。 点击小程序图标...

2018-04-01 20:04:33

阅读数:749

评论数:0

使用Netty的ReplayingDecoder解决拆包和粘包问题

概述 在 自定义解码器处理半包消息 分隔符解码器处理半包问题 以回车换行结尾的消息如何处理半包问题 三篇文章中,笔者介绍了在Netty如何解决拆包和粘包问题,其中自定义解码器处理半包消息 里面介绍的方法是在线上实际用过的,经过了超级大流量的验证,挺靠谱的。下面再介绍另外一种解...

2018-03-30 09:31:34

阅读数:326

评论数:0

小程序应用,获取微信用户的unionid

概述 关于unionid的作用,可以先看我之前写的小程序中的unionid。那么unionid如何获取呢?有两种方式: 1、通过wx.getUserInfo(); 2、通过jscode2session接口。 使用getUserInfo方法 我们可以在小程序端使用如下代码:...

2018-03-26 13:28:37

阅读数:471

评论数:0

生成无限制的微信小程序码

概述 现在除了用二维码之外,微信还可以为我们生成小程序码,大概长这个样子。 如果要生成无限制的小程序码,需要几个步骤 1、小程序某个页面的地址,也即是指定page参数的值; 2、获取access_token; 3、指定scene参数的值; 4、调用getwxacodeunlim...

2018-03-25 20:19:48

阅读数:2230

评论数:2

小程序中的unionid

概述 一家公司可以到微信平台上注册为一个开发者主体,一个主体下可以有多个公众号、小程序等。下面以小程序作为例子来说清楚unionid。 开发者主体下有多个小程序 一些小型的电商公司,会用小程序来开发商城,但是为了拉新用户,通常还会开发出像福袋、抽奖等小程序。 现在假设有...

2018-03-25 16:05:28

阅读数:640

评论数:0

能不用事务就尽量别用

概述 以前在公司里,有个牛人对俺说: 事务就是个垃圾,能不用就尽量不用。 当时我刚从传统行业切换到互联网行业,对这个牛人说的这句话是嗤之以鼻的,怎么可能不用事务呢?后来随着开发了多个高并发应用后,才知道这个牛人说的是对的。下面说两个亲身经历的案例来说明这个问题。 库存扣...

2018-03-25 12:25:04

阅读数:1184

评论数:3

微信用户访问小程序的登录过程

概述 当你开发完了一个小程序并部署上线后,某个微信用户第一次访问这个小程序的时候,会弹出一个授权界面,用户可以选择是否使用微信登录,如果选择是,则直接进入到小程序。当你第二次进入该小程序的时候,你会发现授权界面不会弹出来了,直接就进入小程序了。 这个过程看起来非常的简单,但其实实现...

2018-03-24 22:55:44

阅读数:2401

评论数:1

UUID几个缺点

第一个 UUID字符串占用的空间比较大。 第二个 索引效率很低。 第三个 生成的ID很随机,不是人能读懂的。 第四个 做不了递增,如果要排序的话,基本不太可能。...

2018-03-21 10:47:45

阅读数:405

评论数:0

IDEA 2017.3版本下Mybatis plugin 3.53安装使用

IDEA版本 2017.3 mybatis插件版本 Mybatis plugin 3.53 下载地址: http://plugins.jetbrains.com/plugin/7293-mybatis-plugin 破解 打开IDE...

2018-03-19 10:13:29

阅读数:2345

评论数:6

Spring Cloud Feign简单使用

概述 在Spring Cloud EureKa Ribbon 服务注册-发现-调用一文中简单的介绍了在Spring Cloud中如何使用EureKa和Ribbon。文章中使用了RestTemplate去访问其他的restful微服务接口。其实在Spring Cloud还可以使用Feign来访...

2018-02-24 16:54:52

阅读数:608

评论数:0

Spring Cloud EureKa Ribbon 服务注册-发现-调用

概述 用一个简单的例子演示Spring Cloud中EureKa和Ribbon的基本用法。 版本和环境 IDEA Spring Boot 1.5.·0 JDK 1.8 Maven 3 构建eureka server 在Spring Cloud,可以使用eu...

2018-02-24 14:44:47

阅读数:778

评论数:0

Spring Boot集成Mybatis简洁版

概述 现在互联网应用中,大部分还是使用Mybatis来操作数据库的,本文介绍一下Spring Boot中如何集成Mybatis。 创建Spring Boot工程 在Spring Boot 开篇-创建和运行 一文中有一个小节介绍了如何使用Spring Boot的组件来创建工程。...

2018-02-05 15:50:13

阅读数:473

评论数:0

Spring Boot 直接用jar运行项目

概述 在Spring Boot 开篇-创建和运行一文中,介绍了如何创建一个Sprint Boot项目并且运行起来。但是运行的方式是在IDEA中直接Run起来的。还有另一中方式可以可以把Spring Boot程序运行起来,就是直接在命令行中执行jar包。 打成jar包 以往的W...

2018-02-05 13:17:58

阅读数:3467

评论数:0

Spring Boot 开篇-创建和运行

概述 还没玩过Spring Boot,现在越来越多的公司在用了,不得不学习了。本篇是Spring Boot的开篇,简单介绍一下如何创建一个Spring Boot项目和运行起来。 环境准备 1、JDK 1.8 2、IDEA 3、Spring Boot的版本是1.5.10 ...

2018-02-02 16:37:33

阅读数:601

评论数:1

说出来都是泪的个人经历

刚毕业头几年啥都不懂,一直在传统行业的公司工作,还一年换一份工作。非常的浮躁。现在想起来头几年频繁的换工作真心不是明智之举。因为换来换去,都没进入到一家好的公司,技术没多大长进,反而落下了:【这人常常换工作,极其不稳定】的印象。这个就给以后找更加好的公司,埋下了病根。 频繁换工作的年代 ...

2018-02-02 14:44:24

阅读数:985

评论数:10

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

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

2017-12-11 21:24:08

阅读数:432

评论数:0

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

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

2017-11-26 08:19:38

阅读数:1021

评论数:1

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

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

2017-09-05 19:07:37

阅读数:1695

评论数:0

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

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

2017-09-01 23:28:36

阅读数:1809

评论数:0

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

编写netty服务端程序的时候,会使用到两个线程组 EventLoopGroup parentGroup = new NioEventLoopGroup(); EventLoopGroup childGroup = new NioEventLoopGroup(); 那么parentG...

2017-08-30 14:26:41

阅读数:4234

评论数:0

netty实战之ChannelOption配置

服务端ServerBootstrap之ChannelOption配置public static void main(String[] args) throws InterruptedException { EventLoopGroup parentGroup = new NioEv...

2017-08-29 19:23:05

阅读数:1070

评论数:0

netty demo学习文章汇总

概述到目前为止,关于netty学习的文章一共写了13篇,里面没有介绍netty实战也没有介绍netty源码分析,都是一些小demo的演示,算是作为netty学习的入门篇章。接下来会开始编写关于netty实战以及netty源码分析的文章,逐渐的深入。下面先把之前编写的netty文章做个汇总。nett...

2017-08-29 09:49:17

阅读数:991

评论数:0

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