深入理解Java8

Lambda的基本语法

(parm1,parm1,parm1) ->{
};
阅读全文

Spring Boot 如何快速集成 Redis 哨兵?

Redis Sentinel 介绍

Redis Sentinel:哨兵,放哨,看中文名字就知道它是一种 Redis 高可用解决方案,主要是针对 Redis 主从模式实现主从节点监控、故障自动切换。

没有 Redis Sentinel 架构之前,如果主节点挂了,需要运维人员手动进行主从切换,然后更新所有用到的 Redis IP 地址参数再重新启动系统,所有恢复操作都需要人为干预,如果半夜挂了,如果系统很多,如果某个操作搞错了,等等,这对运维人员来说简直就是恶梦。

有了 Redis Sentinel,主从节点故障都是自动化切换,应用程序参数什么也不用改,对于客户端来说都是透明无缝切换的,运维人员再也不用担惊受怕了。

阅读全文

JDK里的自旋锁

自旋锁是采用让当前线程不停地的在循环体内执行实现的,当循环的条件被其他线程改变时才能进入临界区。

JDK里面自旋锁的实现有 SynchronousQueue  和 LinkedTransferQueue。  本文只是自己对源码的简单理解。

先说公平锁,先等待的线程先获得数据。SynchronousQueue的内部类TransferQueue实现了公平锁。

某一时刻 线程A看到内存的情况如下:   链表,head 和 tail 分别指向链首和链尾,并且线程执行了ht = tail 。

阅读全文

为什么说Java程序员到了必须掌握 Spring Boot 的时候?

Spring Boot 2.0 的推出又激起了一阵学习 Spring Boot 热,就单从我个人的博客的访问量大幅增加就可以感受到大家对学习 Spring Boot 的热情,那么在这么多人热衷于学习 Spring Boot 之时,我自己也在思考: Spring Boot 诞生的背景是什么?Spring 企业又是基于什么样的考虑创建 Spring Boot? 传统企业使用 Spring Boot 会给我们带来什么样变革?

带着这些问题,我们一起来了解下 Spring Boot 到底是什么?

阅读全文

为什么我们放弃了Vue?Vue和React深度比较

我使用Vue和React已经很长一段时间了,两个框架上实践代码量都在10万行以上。不得不说都是都很不错的,帮助开发者减少很多工作量,某种框架是现代化Vue和React在两者之间的选择并不像选择苹果或香蕉一样简单,两者在工程实践上的差异让我们逐渐放弃了Vue。此处以不一样的角度对彼此进行深度对比。

阅读全文

深度解析springcloud分布式微服务的实现

分布式系统

微服务就是原来臃肿的项目拆分为多个模块互不关联。如:按照子服务拆分、数据库、接口,依次往下就更加细粒度,当然运维也就越来越难受了。

分布式则是偏向与机器将诺大的系统划分为多个模块部署在不同服务器上。

微服务和分布式就是作用的“目标不一样”。

阅读全文

MySql大表分页(附独门秘技)

问题背景

MySql(InnoDB)中的订单表需要按时间顺序分页查询,且主键不是时间维度递增,订单表在百万以上规模,此时如何高性能地实现该需求?

注:本文并非主要讲解如何建立索引,以下的分析均建立在有合适的索引的前提下

阅读全文

如何基于jackson动态序列化指定字段

一、前言

把对象序列化为json字符串输出的库很多,本文我们来看如何基于jackson动态控制哪些属性需要进行序列化。

阅读全文

谈谈架构和微服务

不知从何时起,与同事,面试者,面试官谈起架构理念,总是绕不开微服务。甚至有时候听到这三个字的时候,脑壳会痛,相似的还有中台, 总觉得是旧瓶装新酒。 当然此时的盛行是有其原因的,猜测主要原因是容器化的盛行。

阅读全文

如何从JDK8 Stream转换为反应式框架流?

一、前言

最近在做一个项目,获取JDK8 Stream对象后,想要批量消费,不想自己写个集合来做批量处理。而反应式编程实现比如rxjava或者reactor是有丰富的流操作符,所以调研了下如何把JDK8 Stream转换为反应式流。

阅读全文

亲缘性线程池,这是什么鬼?

一、前言

JDK中的线程池主要解决两个问题:

  • 一方面当执行大量异步任务时候线程池能够提供较好的性能,在不使用线程池的时,每当需要执行异步任务时候是直接 new一线程运行,而线程的创建和销毁是需要开销的。而使用线程池时候,线程池里面的线程是可复用的,不会每次执行异步任务时候都重新创建和销毁线程。
  • 另一方面线程池提供了一种资源限制和管理的手段,比如可以限制线程的个数,动态新增线程等,每个 ThreadPoolExecutor 也保留了一些基本的统计数据,比如当前线程池完成的任务数目等。

JDK中的线程池固然好,但是其不具有亲缘性,也就是当我们顺序向其中投递多个任务后,不能保证具有相同属性的任务顺序执行,本文我们就来看一个可以实现亲缘性的线程池。

阅读全文

通过局域网中间人攻击学网络 第三篇 netfilter框架之内核篇

通过局域网中间人攻击学网络

第三篇 netfilter框架之内核篇

在第二篇中,我们讲到可以用ARP欺骗的形式将局域网内某个主机的流量转发到我们的机器上,那我们如何对该流量进行拦截修改呢?在Linux下,我们可以 使用netfilter框架来实现对ip数据拦截修改;

阅读全文

通过局域网中间人攻击学网络 序言

通过局域网中间人攻击学网络

序言

声明

  • 该文章为系列连载文章,由于作者目前工作较忙(懒),目前预期一周更新一篇;
  • 作者目前主要从事Java开发,所以后续涉及部分C代码的,可能会比较菜,不符合各种规范,请见谅;
  • 本系列文章仅供学习使用,请勿用作非法途径;
  • 想要深入交流或者吐槽作者的,可以加作者微信,作者微信:qiao1213812243;
阅读全文

通过局域网中间人攻击学网络 第二篇:ARP欺骗

通过局域网中间人攻击学网络

第二篇 ARP欺骗

原理

我们要进行中间人攻击,就要将自己的主机插入到被攻击主机与被攻击主机要访问的主机之间,拦截他们的流量,到自己的主机然后转发,如下图所示: 

阅读全文

记一次多线程代码优化

一、前言

并发运行相比串行执行很好,因为其可以减少执行时间,但是并发用的不对,也会造成资源浪费,本文我们就来探究一例子。

阅读全文

return top