- 博客(140)
- 资源 (1)
- 收藏
- 关注
转载 spring事务实现原理
转载请标识 https://me.youkuaiyun.com/wanghaitao4j https://blog.youkuaiyun.com/wanghaitao4j/article/details/83625260本博客分为两点,一个是spring事务实现原理源码解读(个人能力,初步解读),二是spring事务的传播属性简单案例,保存订单,修改商品数量就是这两个方法,第一个方法中引用了第二个方法,都用@Transactional注解。debug调用shopping方法。spring..
2021-03-27 15:16:00
306
原创 leetCode通关必刷40题与面试真题算法题
算法通关40题,包含各类算法题,部分与剑指offer重叠反转链表https://leetcode-cn.com/problems/fan-zhuan-lian-biao-lcof/合并两个有序链表https://leetcode-cn.com/problems/merge-two-sorted-lists/汉诺塔问题https://leetcode-cn.com/problems/hanota-lcci/二叉树的最大深度https://leetcode-cn.com/prob
2021-03-19 14:45:58
333
原创 代码技巧: 线程池多线程快速处理List集合
有一个大List集合,遍历进行一些耗时操作,不能达到性能要求,查询日志,单个任务虽然有不少数据库和第三方API请求,比较耗时,但返回效率尚可,所以优先采用多线程方式进行处理并行请求数据库和第三方API,因为处理完还要对list所属的数据进行操作,所以,线程池多线程处理要等待全部处理完:相关的代码如下:@Test public void testTB() { List<String> list = new ArrayList<>(); fo
2021-03-03 16:16:30
3899
3
原创 springboot 同时配置单机,哨兵(集群)两个数据源 使用lettuce连接池
如果是配置多个集群或者只有一个单机的Redis数据源可以参考:https://blog.youkuaiyun.com/lonely_bin/article/details/100137626如果配置单机+哨兵两种数据源可以用下方代码:1、springboot关于redis的启动pom要引入,这个都是一样的2、yml配置文件:spring: redis: database: 2 password: xx sentinel: master: mymaster
2020-12-11 18:11:46
1617
原创 《Elasticsearch核心技术与实践》学习笔记1、环境安装配置、数据准备
在 Docker 容器中运行 Elasticsearch,Kibana(可视化UI维护数据) 和 Cerebro(可视化UI维护服务),通过docker将几个服务同事启动:docker-compose.yaml的内容:version: '2.2'services: cerebro: image: lmenezes/cerebro:0.8.3 container_name: cerebro ports: - "9000:9000" command:
2020-11-09 20:27:44
241
转载 Elasticsearch-基础介绍及索引原理分析
最近在参与一个基于Elasticsearch作为底层数据框架提供大数据量(亿级)的实时统计查询的方案设计工作,花了些时间学习Elasticsearch的基础理论知识,整理了一下,希望能对Elasticsearch感兴趣/想了解的同学有所帮助。 同时也希望有发现内容不正确或者有疑问的地方,望指明,一起探讨,学习,进步。介绍Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引擎.当然 Elasticsearch 并
2020-11-02 17:34:11
219
转载 Netty学习笔记(十)心跳机制与断线重连
心跳是啥在 TCP 长连接中, 客户端和服务器之间定期发送的一种特殊的数据包, 通知对方自己还在线, 以确保 TCP 连接的有效性.心跳机制的工作原理心跳机制的工作原理是: 在服务器和客户端之间一定时间内没有数据交互时, 即处于 idle 状态时, 客户端或服务器会发送一个特殊的数据包给对方, 当接收方收到这个数据报文后, 也立即发送一个特殊的数据报文, 回应发送方, 此即一个 PING-PONG 交互. 自然地, 当某一端收到心跳消息后, 就知道了对方仍然在线, 这就确保 TCP 连接的有效性
2020-09-19 12:14:01
879
转载 Netty学习笔记(九)新连接接入
引子在上一篇分析NioEventLoop那篇文章中分析NioEventLoop.run()时候提到当方法processSelectedKey()处理事件的时候,比如读事件,最终调用了unsafe.read();本文就来分析一下unsafe对象的read方法的具体实现。检测新的连接源码中的Unsafe是一个接口,在调试时可知其实现类为NioMessageUnsafe类,其read方法源码如下: private final List<Object> readBu.
2020-09-19 11:31:02
341
转载 netty学习笔记(八)ByteBuf分析2
引子java NIO 使用ByteBuffer作为字节容器,使用上过于复杂,为此netty使用ByteBuf来代替ByteBuffer。ByteBuf的APINetty的数据处理API通过两个组件暴露:ByteBuf和ByteBufHolder。 ByteBuf维护了两个不同的索引:readerIndex和writerIndex,分别用于读写。 我们在ByteBuf的源码的注释中看到: * +-------------------+------------------+-.
2020-09-19 11:29:10
544
转载 Netty学习笔记(七)ByteBuf分析
ByteBufjava NIO 使用ByteBuffer作为字节容器,使用上过于复杂,为此netty使用ByteBuf来代替ByteBuffer。ByteBuf是一个抽象类,不能直接使用,它的子类有:ByteBuf子类它有两个重要的指针:readerIndex读指针,writerIndex写指针。在ByteBuf的0到readerIndex区间内不可读,在readerIndex到writerIndex区间内可读,在writerIndex到capacity容量区间内可写入。另外Byte.
2020-09-19 11:26:58
262
转载 Netty学习笔记(六)Pipeline
Pipeline初始化Pipeline创建Netty在创建客户端Channel和服务端Channel的时候,都会调用父类的构造函数: protected AbstractChannel(Channel parent) { this.parent = parent; id = newId(); unsafe = newUnsafe(); pipeline = newChannelPipeline(); }构造函数
2020-09-19 11:25:21
3326
1
转载 Netty学习笔记(五)NioEventLoop启动
引子在之前的文章中有提到BootStrap启动类中绑定端口的内部实现如下: private static void doBind0( final ChannelFuture regFuture, final Channel channel, final SocketAddress localAddress, final ChannelPromise promise) { channel.eventLoop().execu.
2020-09-19 11:22:41
328
转载 Netty学习笔记(四)NioEventLoopGroup分析
引子在上一篇文章中我们已经分析了Netty注册相关的逻辑,接下来再开看下NioEventLoopGroup这个类内部的相关构造。NioEventLoopGroup在之前的demo中第一行就是:EventLoopGroup bossGroup = new NioEventLoopGroup(1);这个NioEventLoopGroup类的构造函数最终实现如下:protected MultithreadEventExecutorGroup(int nThreads, E..
2020-09-19 11:21:27
491
转载 Netty学习笔记(三)Reactor线程模型
单线程模型所有操作都在同一个NIO线程处理,在这个单线程中要负责接收请求,处理IO,编解码所有操作,相当于一个饭馆只有一个人,同时负责前台和后台服务,效率低。单线程模型多线程模型多线程的优点在于有单独的一个线程去处理请求,另外有一个线程池创建多个NIO线程去处理IO。相当于一个饭馆有一个前台负责接待,有很多服务员去做后面的工作,这样效率就比单线程模型提高很多。多线程模型主从线程模型多线程模型的缺点在于并发量很高的情况下,只有一个Reactor单线程去处理是来不..
2020-09-19 11:19:56
204
转载 Netty学习笔记(二)Channel的分类
Channel分类在Netty中存在众多Channel类和接口,大致关系如下:Netty中Channel类图Channel:和Java Nio中的Channel同名,是Netty对网络底层读写和连接的抽象。 AbstractChannel: 是Channel的抽象实现类,抽象出了parent,id,unsafe,pipeline等概念。 AbstractNioChannel:封装Java NIO,通过Selector选择器进行IO事件的监听,拥有SelectionKey,readI.
2020-09-19 10:46:12
478
转载 Netty学习笔记(一)组件
Channel,EventLoop和ChannelFuture类构成了Netty网络抽象的代表:Channel:对应Socket EventLoop:对应控制流,多线程处理,并发 ChannelFuture:对应异步通知Channel接口Channel是对Socket的封装,大大降低了直接使用Socket的复杂性。EventLoop接口EventLoop用于处理连接的生命周期中所发生的事件。在服务端编程中,EventLoop起到了监听端口连接和数据读取的工作。ChannelFutu
2020-09-19 10:43:45
225
转载 Elasticsearch面试题
1.为什么要使用Elasticsearch? 因为在我们商城中的数据,将来会非常多,所以采用以往的模糊查询,模糊查询前置配置,会放弃索引,导致商品查询是全表扫面,在百万级别的数据库中,效率非常低下,而我们使用ES做一个全文索引,我们将经常查询的商品的某些字段,比如说商品名,描述、价格还有id这些字段我们放入我们索引库里,可以提高查询速度。2.Elasticsearch是如何实现Master选举的? Elasticsearch的选主是ZenDiscovery模块负责的,主要包含Ping(节
2020-09-18 20:13:20
2421
1
原创 springCloud组件以及相应原理
springcloud是微服务架构的集大成者,将一系列优秀的组件进行了整合。基于springboot构建,对我们熟悉spring的程序员来说,上手比较容易。通过一些简单的注解,我们就可以快速的在应用中配置一下常用模块并构建庞大的分布式系统。SpringCloud的组件相当繁杂,拥有诸多子项目。重点关注Netflixspringcloud项目是由多个独立项目集合而成的,每个项目都是独立的,各自进行自己的迭代和版本发布。所以springcloud不方便使用版本号来管理,而是使用版本名。以避免和子
2020-09-18 10:37:21
2175
转载 微服务入门-1、RPC、APIgateway
微服务 (Microservices) 是一种软件架构风格,它是以专注于单一责任与功能的小型功能区块 (Small Building Blocks) 为基础,利用模组化的方式组合出复杂的大型应用程序,各功能区块使用与语言无关 (Language-Independent/Language agnostic) 的 API 集相互通讯。微服务的优势:独立性 每个微服务的构建、部署、扩容、缩容、数据库都是独立的。数据库表修改时,互补影响。 敏捷性 功能单一、可快速添加新需求 技术栈灵活 可以发挥不
2020-09-17 19:01:44
1175
原创 Tomcat消息处理流程
图1-1一、前言 平时我们都将项目扔给Tomcat就行了,做了撒手掌柜,没接触过JavaEE项目,对于请求从服务器接收后的处理流程模棱两可,不利于对Web项目的理解,我们现...
2020-09-17 17:10:18
274
转载 HTTP1.0、HTTP1.1 和 HTTP2.0 的区别
原文:https://mp.weixin.qq.com/s/GICbiyJpINrHZ41u_4zT-A一、HTTP的历史早在 HTTP 建立之初,主要就是为了将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。也是说对于前端来说,我们所写的HTML页面将要放在我们的 web 服务器上,用户端通过浏览器访问url地址来获取网页的显示内容,但是到了 WEB2.0 以来,我们的页面变得复杂,不仅仅单纯的是一些简单的文字和图片,同时我们的 HTML 页面有了 CSS,Javascript.
2020-09-17 17:04:04
773
原创 WebSocket总结
IM通讯项目中用到了WebSocket建立连接,这里做一个简单地整理总结:一句话总结一下 WebSocket:WebSocket 是 HTML5 开始提供的一种独立在单个TCP连接上进行全双工通讯的有状态的协议(它不同于无状态的 HTTP),并且还能支持二进制帧、扩展协议、部分自定义的子协议、压缩等特性。一、Socket简介Socket又称‘套接字‘,应用程序通常通过‘套接字‘向网络发出请求或者应答网络请求。Socket可以实现应用程序间网络通信。Socket可以使用TCP/IP协议或..
2020-09-17 16:49:06
829
原创 同事分享_1_java 内存模型
文龙同事分享:导语本文是针对java内存模型JMM的入门级简介,通过学习JMM可以让我们加深对java代码执行的过程,及java并发编程中常见的问题的了解。例如volatile、synchronized等在JMM中的具体体现。概念Java内存模型(JMM)Java虚拟机规范中定义了Java内存模型(Java Memory Model,JMM),用于屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的并发效果,JMM规范了Java虚拟机与计算机内存...
2020-07-30 17:56:20
179
原创 设计模式-1-常用设计模式组合使用
1、策略+工厂模式定义策略接口,不同的策略都实现这个接口:public interface HandleSetStatusService { public void handleMessage(WebSocketSession session, ImClient imClient, long sellerId, WsRecvWrapper request);}/** * 策略实现类, * 咨询师发送消息 */@Service@HandleServiceSt
2020-07-09 20:03:26
1026
原创 LeetCode前置课-5-程序员常用10种算法
import java.util.*;/** * Created by qililong on 2020/7/6. * 程序员常用的十种算法 */public class ShiSuanFa { //1、非递归方式二分查找,arr有序的数组,target要查找的目标 public static int binarySearch(int[] arr , int target){ int left =0; int right = arr.l.
2020-07-07 21:17:37
362
原创 LeetCode前置课-4-哈希表、树、图
1、哈希表2、树public class TreeNode { private int no; private TreeNode leftNode; private TreeNode rightNode; public TreeNode(int no) { this.no = no; } public int getNo() { return no; } public void set
2020-07-07 21:13:53
154
原创 LeetCode前置课-3-查找算法
1、二分查找//二分查找,num是要查找的值 public static int binarySelect(int[] arr, int num ,int left,int right){ if(left>right){ return -1; } int mind = (right+left)/2; if(arr[mind]>num){//向左递归 retur..
2020-07-07 20:33:54
164
原创 LeetCode前置课-2-八大排序算法
1、冒泡//,冒泡 public static void sortMaopao(){ int[] arr = {3,9,-1,10,20,1}; System.out.println("排序前:"+ Arrays.toString(arr)); int temp; for(int j=0 ;j<arr.length-1; j++){ for(int i=0 ; i<arr.length-1; i
2020-07-07 20:28:29
184
原创 LeetCode前置课-1-数组,链表,队列,栈
1、数组二维数组变稀疏数组: //1、数组-》稀疏数组 public static void xishuArray() { int array[][] = new int[11][11]; array[1][2] =1; array[1][5] =2; array[3][7] =1; array[7][9] =1; System.out.println("数组:");
2020-07-07 20:02:36
197
原创 1、Springboot 入门-配置和原理
**一、**Spring Boot 入门 <!-- 这个插件,可以将应用打包成一个可执行的jar包;--> <artifactId>spring-boot-maven-plugin</artifactId>将这个应用打成jar包,直接使用java -jar的命令进行执行;1、启动器<dependency> <groupId>org.springframework.boot</groupId> <arti
2020-06-05 14:57:25
156
原创 【代码技巧】java利用lamda分批实现入库
@Override public int addScheduleKFGroupAndBsRobotInfoByBatch(List<RobotKFGroupAndBsRobotScheduleParam> list) { if(null == list || list.isEmpty()){ return 0; } if(list.size()<= RobotSiteServiceImpl.DB_PATCH_.
2020-06-04 11:31:52
983
1
原创 NIO效率高的原理之零拷贝与直接内存映射
前言首先澄清,零拷贝与内存直接映射并不是Java中独有的概念,并且这两个技术并不是等价的。零拷贝零拷贝是指避免在用户态(User-space) 与内核态(Kernel-space) 之间来回拷贝数据的技术。传统IO传统IO读取数据并通过网络发送的流程,如下图 read()调用导致上下文从...
2020-05-29 17:07:12
529
1
原创 netty入门学习总结
1.Netty 是什么?Netty是 一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。Netty是基于nio的,它封装了jdk的nio,让我们使用起来更加方法灵活。Netty和Tomcat有什么区别?Netty和Tomcat最大的区别就在于通信协议,Tomcat是基于Http协议的,他的实质是一个基于http协议的web容器,但是Netty不一样,他能通过编程自定义各种协议,因为netty能够通过codec自己来编码/解码字节流,完成类似redis访问的功能,这
2020-05-29 17:06:38
257
转载 Nginx conf配置详解
upstream 参数nginx关于upstream参数官方文档:http://nginx.org/en/docs/http/ngx_http_upstream_module.htmlupstream 参数 参数 描述 service ...
2020-05-18 11:23:59
891
转载 kafka与Rocketmq的区别
淘宝内部的交易系统使用了淘宝自主研发的Notify消息中间件,使用Mysql作为消息存储媒介,可完全水平扩容,为了进一步降低成本,我们认为存储部分可以进一步优化,2011年初,Linkin开源了Kafka这个优秀的消息中间件,淘宝中间件团队在对Kafka做过充分Review之后,Kafka无限消息堆积,高效的持久化速度吸引了我们,但是同时发现这个消息系统主要定位于日志传输,对于使用在淘宝交易、订单、充值等场景下还有诸多特性不满足,为此我们重新用Java语言编写了RocketMQ,定位于非日志的可靠消息传输(
2020-05-15 16:42:01
275
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人