自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 收藏
  • 关注

原创 spring-data-elasticsearch中集成search Guard

近期项目中接入elasticsearch,供管理台大表的数据模糊查询,在原有spring项目中引入spring-data-elasticsearch,以及使用searchGuard进行鉴权版本spring-data-es与使用的es版本有直接关系,这里找到响应的spring-data-es版本。注意spring-data-es依赖包中包含spring的相关框架,如果与原有系统的冲突需要兼容...

2019-12-09 23:53:27 1055

原创 你在guava cache上设置的更新参数是否有用?

guava cache是一种支持自动回收、刷新的concurrentHashMap。显然防止内存溢出是其核心功能,包括主动刷新refresh、过期失效expire、java的软/虚引用以及设置最大的size和weight。在实际开发中,个人对于expire和refresh使用较多,expire又分为expireAfterAccess、expireAfterWrite,现对比下三者的区别:...

2019-12-01 14:18:38 602

原创 关于积分系统的一点总结

近期完成一个积分(钱)系统的搭建,可用于兑换实体奖品,具备价值符号。其中遇到的问题和积累的方案进行小小的总结和思考。功能设计绑定与账户1、标识同一个用户,在积分系统外部并没有暴露账户id,而是由其他能标识用户身份的信息W组合而成,如手机号、微信号、邮箱。通过将多个外部信息W映射(绑定)到唯一的内部账号id,就认同为是同一个账号。同时支持同类外部信息绑定,如多个手机号绑定同一账号id(但...

2019-11-18 21:00:44 1874 1

原创 springMVC重定向method转换问题排查

问题springMVC中使用redirect方式进行接口重定向时,默认http返回码是302,该返回码会强制将原本post请求转换成get,而对于重定向后只支持post请求的接口可能会抛出method not support异常,以下是抓包的情况。解决思路在http重定向中,post方法可以重定向成get和post,如果要强制转换成post,我们需要在重定向的返回码设置为307案例下面...

2019-11-07 19:56:18 348

原创 kafka与zk的leader选举的混沌不清

在kafka中,同个topic下的partition分布在多个broker中,topic下的partitions使用zookeeper进行分布式协调,可以说kafka与zk是牢牢联系在一起的。但其中,都存在leader选举、主从复制、同步有效个数(zk是超过一半,kafka则是在isr列表中个数),在学习的初始造成一些混淆与困惑。认清zookeeper的leader选举的内与外内一般书籍或者...

2019-09-18 23:41:02 475

原创 Apache Kafka简介

分布式流式平台的三大特征:流式记录的发布订阅采用容错持久的方式存储流式消息流式记录实时处理kafka通常用于处理两大类应用:在异构系统和应用之间构建实时流式数据处理管道数据的传输和响应的实时流式应用kafka的基础概念kafka以集群方式启动,运行在一台或多台的服务器上,可跨数据中心kafka在存储数据流的时通过一个叫“topic”的进行分类每条数据记录由...

2019-06-15 23:31:30 231

原创 Apache RocketMQ官网翻译(四)

事务例子什么是事务消息?可以认为是两阶段提交的消息实现,以确保在分布式系统中的最终一致性。事务消息确保了以原子的方式执行本地事务的执行和消息的发送。使用限制(1)事务消息不支持延迟和批量操作。(2)为了避免单个消息被检查太多次而导致过半的队列消息累积,我们默认限制了检查单个消息15次,但是用户可以通过在broker的配置中修改“transactionCheckMax"参数来改变这个限制。...

2019-06-08 22:22:52 383

原创 Apache RocketMQ官网翻译(三)

有序消息rocketMQ提供了FIFO的顺序消息。以下例子演示了发送/接收全局和部分的有序消息发送消息的简单代码public class OrderedProducer { public static void main(String[] args) throws Exception { //Instantiate with a producer group nam...

2019-06-08 16:58:52 159

原创 Apache RocketMQ官网翻译(二)

简单消息例子使用rocketMQ发送消息会有三种模式:可靠同步、可靠异步和单向三种传输使用rocketMQ消费消息1、添加依赖包maven: <dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-client&l...

2019-06-08 11:47:18 154

原创 新司入职满月总结

导语今日刚好入职国内某互联网金融公司W(后台开发岗)满一个月,趁此机会总结和分享下入职后的一些感慨。顺便与老东家互联网Y公司从工程技术方面进行对比,从个人角度上看互金与互联网公司之间的细微差异。职能角色每一次版本迭代,都需要不同的角色参与协作完成。从职能角色中可以看出W公司还有业务运维岗,与开发、测试三者构成目前流行的devOps工作模式,三个角色对于业务应用服务都非常清楚。一般跨系统的复杂...

2019-06-07 15:15:07 328

原创 Apache RocketMQ官网翻译(一)

翻译来自:https://rocketmq.apache.org/docs/motivation/背景在早期,我们的分布式消息中间件都是建立在ActiveMQ 5.x(prior to 5.3)之上。我们通过其作为异步消息通信、搜索、社交网络信息流、数据管道甚至在交易处理上,为我们的复杂多样的业务服务。但是随着我们业务交易的吞吐量上升,消息集群的压力也变得越来越大。Why RocketM...

2019-06-04 23:53:33 214

原创 两条线程分别打印奇偶数

两条线程分别打印奇偶数最基本的线程通信方式最基本的线程通信方式 //不一定需要volatile,因为已经sync保证了可见性 public static int num = 0; private static Object lock = new Object(); private static CountDownLatch countDownLatch = new C...

2018-10-09 08:16:13 887

原创 mongo索引对排序sort的规则

索引对排序的意义假设在读取数据库时没有对待排序的字段进行合适的索引,在mongo中,会将符合条件的数据load到内存中,然后进行排序。这样的性能将会变差,尤其当数据量比较大的时候。如果 不使用 索引的排序操作使用了超过32M的内存,那么操作会终止。索引的匹配规则如果一个递增或递减索引是单键索引,那么在该键上的排序操作可以是任意方向(正序or倒序)如果是复合索引,那么排序语句的所有键...

2018-09-02 22:36:46 4278

原创 关于粉丝号的一点总结

初期场景最近产品结了一个需求,要给每个进入频道用户颁发一张粉丝卡,这个粉丝卡上的粉丝号每个频道唯一,每个人在每个频道也只能唯一拥有一张粉丝卡。粉丝号段由管理系统录入,粉丝号不保证连续,如录入1-100,102-105,中间独缺了101,过了105,后面进频道的用户无法拥有粉丝卡了。而且必须小号优先发,不能有粉丝先进是102,后进是100。项目使用mongodb开发初期方案两张mongo...

2018-09-01 00:36:46 368

原创 关于列表自建索引的一点总结

问题场景最近接到一个产品需求,需要展示用户的参与的活动列表,这个列表需要根据活动的状态先排序,也即未结束的总是放在前,已结束都放在后面,并且相同状态下按照时间倒序,并支持分页功能前期缺陷方案项目使用mongo作为db,一开始看起来似乎挺简单,利用mongo多重order排序出来,再给个lastId作为分页就行了。后面发现产品需求未结束和已结束的时间排序并不是同一个时间,未结束按照创建时...

2018-08-31 23:43:01 320

原创 https是如何保证安全的?

总所周知,http是明文传输的,也就是你在发往目标服务器的过程中,中间路径下的所有的计算机都能抓取到ip数据包。中间服务器作为路由中转,数据流只会到达网络层,但是因为是明文传输,所以可以看到ip数据包上面携带的http明文。https之所以安全,是因为使用了tls、ssl协议(下文所有安全协议都以tls讲述)。同样是建立在http的基础上的,对于http协议的应用程序开发者,其实是透明的,因为...

2018-08-01 00:55:07 387

原创 java与网络io模型总结

根据《unix网络编程·卷一》所载,目前操作系统的网络io模型分为5中,分别为blocking io :阻塞型io,再熟悉不过,处理accept、read、write都会阻塞用户进程,对应java中的bionon blocking io:简称非阻塞,当通过系统调用的时候,如果没有连接或者数据到达就直接返回一个错误,用户进程不阻塞但是不断的轮询。注意这个不是java nio框架中对应的网络模...

2018-07-29 17:34:32 286

原创 http协议笔记

http1.1的特性长连接connection:keep alive块编码:transfer-encoding:123 表示有多少字节将会以块编码模式发送。在http1.0时候,每条连接就是一个connection,发送时候通过content-length便可以知晓回报内容长度。但在http1.1上,每个connction负责多个请求,一些请求在还未完全加载完就要先发送,这时候就要用块编码...

2018-07-29 15:32:33 129

原创 kafka的学习心得

最近项目开始使用kafka作为消息中间件,理由是支持更高的吞吐量和轻量级(相对传统的mq,如rabbit)。与rabbitmq的不同重broker与重consumerkafka跟rabbit的设计上有很多不同,rabbit上存在exchange、queue以及两者binding,生产者根据需要需要发送给不同类型exchange,经exchange的绑定关系路由到特定的queue...

2018-07-18 23:44:07 499

原创 关于状态的一点总结

每次有活动的需求,都会离不开用户的状态,比如用户今日已登录,已抽奖,已提现。 这些状态的变更,归根结底,也就需要一个事件event, 这个事件,可以是用户的触发(手动点击按钮或者用户触发的二级事件,如mq消息),也可以是时间的触发(轮询作业,这种其实也是一个事件,时间点触发的事件)。存储在数据库的状态,一定需要上述的一个事件去更新,但是展示给用户的看的状态,却不一定。 比如用户金额的提现...

2018-05-01 20:07:49 182

原创 oauth2简介与微信认证

简介oauth2与微信认证开发过微信公众号的朋友应该都看过这些字眼:令牌token,凭证ticket,oauth认证等。对于只开发过传统登录认证的朋友们第一次见到都多少会有点懵逼。今天将简单讲讲oauth2和微信中各术语之间的区别与意义。token认证与oauth2互联网公司为了提高平台的扩展性,开放一系列API,建立自己的技术生态圈。第三方开发者可以根据其开放接口API自定义自己

2018-01-11 00:20:11 2946

原创 java并发之同步工具类三之栅栏Barrier

栅栏跟闭锁是有同样的功能的,都可以让所有线程都阻塞在同一个位置。唯一不同的是,闭锁等待的是事件,而栅栏等待的是一起执行的其他线程。 在之前的博客中 java并发之同步工具类一之闭锁Latch引用了一个赛跑案例,运动员相当于多个并发的子线程,而裁判就是主线程。运动员的就绪等待的是裁判起跑枪指令(即一个事件),当起跑枪发射所有运动员就同时开始跑。这是闭锁的实现方式,而栅栏不同,它没有裁判这个角色,它是

2017-12-24 15:15:22 530

原创 java并发之同步工具类二之信号灯semaphore

java中信号灯可以控制多个线程同时访问同一个资源的操作数量,注意这句话的重点在于“控制”二字。即可以为某种容器施加边界限制,也可以实现对某种资源的池化,比如线程池中限制最大运行5个线程,当有有超过5个线程同时来访问线程池的时候,必定有一个线程会处于阻塞等待状态。通过控制边界数量,可以避免过度线程占用内存而引发内存不足问题。其实现是通过一组运行在有界容器内的访问许可permit。 比如商场的车库,

2017-12-24 14:45:39 345

原创 java并发之同步工具类一之闭锁Latch

java同步工具类(指jdk1.5版本)主要有闭锁(Latch)、信号灯(semaphore)和栅栏(barrier)。本篇作为开篇,先讲闭锁。闭锁就相当于一扇门,在制定的线程到达后这扇门才打开,后续所有线程可以通过,否则就一直处于阻塞状态。用于确保某些活动(这里可以理解为子线程)都完成后再继续执行下去(主线程)。如游戏中所有玩家就绪后才能点击开始,测试并发代码块真正的执行时间等(当我们在测试多线程

2017-12-24 14:12:56 301

原创 java并发之死锁

上一篇博客 java并发之加锁中主要介绍了在数据库中的加锁问题,现在来聊聊Java中会出现的死锁。 关于死锁,一般教科书的都会罗列满足死锁的几个概念,如互斥、竞态条件等,今天从代码里直接去看死锁,或许会更加直观,直捣黄龙,比记住概念要强得多。/** * @author Jerry */public class ThreadDeadlock { public static void m

2017-12-24 13:27:03 295

原创 java并发之加锁

这段时间有一个需要是要“开宝箱”,涉及到一个事务中有多个数据库表要同步更新,初始阶段没有加锁导致一系列并发问题(当大脑沉浸在业务逻辑上的思考时候很容易忽略,原谅我的狡辩),期间遇到一些“灵异现象”,但最后在高手的指点下渐渐明白了一些以前留在大脑却没有理解深刻的概念,比如分布式锁、悲观锁、乐观锁等。下面按照我解决问题的先后顺序和问题发酵的流程,一些罗列遇到的各种坑。ReentranLock第一步就是想

2017-12-19 22:50:26 1162

原创 tomcat的运作和性能调优杂谈

对于很多刚学习java web的同学,tomcat这个web服务器肯定不陌生。我也是在自己学了两年web后,才真正去了解一下它。以前看过不少tomcat 的性能调优,可都是些技术指标,需要硬记,所以没多久都忘记了。这两天看了一些tomcat内部工作原理的书籍,再配合性能调优的一些资料,才在大脑中算是记忆扎根。这里也推荐各位先去看看tomcat内部机制,再谈调优,才能有更好的认知和更长的记忆。tomc

2017-11-15 22:55:38 368

原创 UDP协议新认知

应用场景在传输层上,进程每个操作,都会产生一个udp数据报,这个不同于tcp协议,tcp会对数据进行分段,成为一个个tcp报文段,再传输给网络层,每个tcp报文的可靠性通过tcp层来保证。但是udp并没有提供如此多的可靠性,从其首部8个字节,于tcp首部20个字节相比,就显得功能弱了很多。但是这并不是说udp就比tcp差,有时候应用场景上,还真得用udp,而不适合可靠性强的tcp,比如音视频,数据传

2017-10-28 00:02:19 276

原创 TCP窗口协议

什么是窗口win?可能以下这张图更容易理解点。横轴代表的是发送端待发送的数据字节,从图中可以看出有8192个字节要进行传输。而图中最显眼的绿色区域,就代表窗口。窗口分为两部分,左边是发送端已经发送数据包出去,但是未收到接收端返回的ack,右边是可以发送的区域,这样是目前我们数据可以用武之地的地方。窗口是从左到右移动的(也只能这么移动),可以看到窗口左边竖条两边的差异,就是有没有收到ack,所以一旦发

2017-10-25 00:00:38 578

原创 TCP三次握手与四次挥手的理解和场景举例

大学时候对于tcp的连接和关闭,都是靠强行记忆下来,发现即不能记得牢,就算记住了,也不是很了解为什么要这么麻烦。TCP全双工通信要明白为什么需要这么麻烦,首先要了解tcp它是全双工通信的,意味着数据端的两方,都有权利向对方发送数据。所以在一条tcp连接上,就需要连接或者关闭两次(两个方向),而每次连接syn或者关闭fin,都需要一个ack返回,才能确定这一方向,真正关闭。三次握手根据tcp连接图的客

2017-10-21 23:17:27 1869

原创 diy搭建异步邮件服务

在很多用户注册的场景中,都需要使用邮件异步通知激活账户,这基本都以来于消息中间件,本次使用spring boot+spring amqp+spring mail搭建成功了。可能源于动手实践少,或者对于基本理论掌握不到位才犯下这些错误,现在来分享在这个过程中遇到的几个坑,希望能帮助到大家。SMTP授权码java mail服务其实已经很完善了,我们直接调用就行了,spring-boot-starter-

2017-10-08 13:41:55 630

原创 负载均衡闲谈

在nginx中,负载均衡和反向代理这两兄弟经常成对出现,冥冥中有一种特殊的力量,将他们吸引在一起,而这种力量,建立在我们对他们本质上的理解,希望读完这边博文让你明白其中的关系。反向代理要理解反向代理,先要弄清楚什么是正向代理。在反向代理出来前,所有的代理基本都是正向代理,比如我们日常中使用的路由器WIFI,就是一个代理,将内网中的客户端(手机)的请求先发送到路由器这个代理上,路由器在通过在暴露在外网

2017-10-02 23:03:27 308

原创 nginx的酷配置

nginx其实从初学到现在已经有1个年头了,不管从官网学习到还是书籍,记得住的时间永远只有那么一点。最近工作需要用到,重回去看一些书籍资料整理出来,方便以后复习和志同道合的朋友学习观摩,有不正确的地方欢迎指出来改正。 ngixn的配置文件中内容比较多,一般学习过的都能大体看得懂一些,今天说一些比较厉害的点:配置用户和组、工作连接数nginx.conf中有几个顶级作用域,event就是其中一个,这个

2017-10-02 00:05:38 265

原创 vue构建的七彩外衣

继第一章的vue入门http://blog.csdn.net/jerryjavacoding/article/details/77985464,接着学习的是vue在前端另一个重要领域:样式。传统基于dom的样式都是通过绑定class或者id来进行渲染,当我们需要根据业务动态修改样式的时候,很多时候只能依赖脚本去做逻辑替换,这个比较繁琐也容易出错。而vue通过其自身的数据双向绑定特性,应用于样式上,我

2017-09-16 16:33:53 389

原创 vue初窥

组件化开发vue与angular一样,都是作为组件化开发的前端框架。传统开发中,一个页面要包含多个视图,比如传统的后台管理系统基本页面包含了标题、左边导航栏,右边内容区域,以及底部的footer,传统的做法是各自作为一个页面然后include进来,这样虽然能简化开发的复杂度,不过组件之间的数据交互就非常麻烦。而应用组件化开发,上述每一个元素都是一个独立的组件,一个单独的vue实例,拥有着自己的数据源

2017-09-14 21:26:22 368

原创 TCP/IP分层模型与网络认知

自从参加了工作,对于网络底层协议的透彻了解越来越在工作中占大比例,而以往在关于网络编程上,计算机网络基础也仅仅停留在who是tcp,who是http的层面,真正网络传输的一整套流程和模型没有基础性认知,为此专门花时间将新学习到的计网知识记录于此,以便自己巩固和帮助他人。分组交换/包交换 如今所有的计算机网络都是分组交换了,将计算机之间交换的数据按包package进行拆分,然后再到网络中传输,这种

2017-08-27 23:11:05 433

原创 “不懂异步的过来”

异步?何为异步?应用在哪?

2017-07-31 23:38:49 276

原创 rabbitmq的中流砥柱

形象解析rabbitmq基础概念,剖析rabbitmq内部组件细节

2017-07-31 23:25:55 324

原创 Thrift那点事

Thrift那点事本博文不是Thrift启蒙和Hello World,如果有需要请绕道开车Thrift官网 http://thrift.apache.org,而是旨在对Thrift学完后似懂非懂的一个整理和总结。希望能帮到正处于这个水深火热阶段的同学们。Thrift的用途Thrift的五大金刚facebook的SwiftThrift的用途既然大家已经初步学习过了Thrift,Thrift到

2017-07-29 00:03:14 1161

空空如也

空空如也

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

TA关注的人

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