自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

大鹏的博客

一个迷茫的小码农

  • 博客(165)
  • 收藏
  • 关注

原创 netty-HashedWheelTimer源码解析

因为时间轮中的任务并不能够保证及时执行,假如有一个任务执行的时间特别长,那么任务在 timeouts 队列里已经过了执行时间,也没有关系,Worker 会将这些任务直接加入当前HashedWheelBucket 中,所以过期的任务并不会被遗漏。前面提到start()方法中会启动worker线程,并且会等待startTime不为0,worker线程会把startTime设置为当前的纳秒时间,并且。通过初始化函数得知,只是创建了工作线程,并未进行工作线程的执行,那么工作线程的start在什么时候调用?

2023-09-19 12:27:03 143

原创 LeetCode: 4. Median of Two Sorted Arrays

一、最容易想到的办法是把两个数组合并,然后取出中位数。但是合并有序数组的操作是 O(m+n) 的,不符合题意。看到题目给的 log 的时间复杂度,很容易联想到二分搜索。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。你可以假设 nums1 和 nums2 不会同时为空。二、去中位进行两个数组移动。

2023-09-18 21:29:19 368

原创 LeetCode-1. Two Sum

顺序扫描数组,对每一个元素,在map中找能组合给定值的另一个数字,如果找到了,直接返回 2 个数字的下标即可。如果找不到,就把这个数字存入 map 中,等待扫到另一个数字的时候,再取出来返回结果。在数组中找到 2 个数之和等于给定值的数字,结果返回 2 个数字在数组中的下标。

2023-09-14 22:03:17 323

原创 Netty服务端启动的整体流程-基于源码4.1.96Final分析

创建服务端 Channel:本质是创建 JDK 底层原生的 Channel,并初始化几个重要的属性,包括 id、unsafe、pipeline 等。初始化服务端 Channel:设置 Socket 参数以及用户自定义属性,并添加两个特殊的处理器 ChannelInitializer 和 ServerBootstrapAcceptor。注册服务端 Channel:调用 JDK 底层将 Channel 注册到 Selector 上。端口绑定。

2023-09-04 18:35:31 298

原创 Netty源码NioEventLoop解析

因为异步任务处理是有超时时间的,所以 Netty 采取了定时检测的策略,每执行 64 个任务的时候就会检查一下是否超时,对性能的折中考虑,如果异步队列中有大量的短时间任务,每一次执行完都检测一次超时性能会有所降低。Netty的NioEventLoop并不是一个存粹的I/O线程,除了负责I/O的读写外(用于处理 Channel 生命周期内的所有I/O事件,如accept、connect、read、write等I/O事件),还负责处理系统任务和延迟任务(定时任务);

2023-08-28 22:20:46 632

原创 Dubbo源码解析(六)-限流及熔断降级原理

一 前文 提供服务暴露的接口,在流量低的情况或许并不需要考虑限流,因为在数据库或缓存的允许下就能正常的工作,但是当调用突然飙升的时候,那么就会出现异常情况,比如数据库的连接池和线程池就是一种限流手段,通过限制只有指定数量的工作线程,其他线程进行队列等待或是进行抛弃。二 分布式中主要使用的技术 目前和dubbo一起运用较多的为Alibaba Sentinel,而SpringCloud中主要是运用了Hystrix(并发线程模式)。三 限流实现限流实现主要有1、计数器...

2021-01-27 22:32:26 2397

原创 Dubbo源码解析(五)-探索Dubbo中的SPI之Adaptive

目录1、前文1、前文在前面四章进行了了解dubbo中的默认服务发现、调用等逻辑后,本章对Dubbo中使用的SPI技术进行了解。SPI全称为Service Provider Interface,Java SPI可以自行了解,本文不做叙述。2、Dubbo SP案例一:ExtensionLoader.getExtensionLoader(Protocol.class).getAdaptiveExtension();首先查看getExtensionLoader方法做了什么:第.

2021-01-26 22:59:01 444

原创 多线程执行数据库MYSQL扣减库存问题分析与解决方案

由于本人菜鸡,没接触过太大的并发量,只用过Redis那一套(Redis的写性能和读性能都远高于MySQL)多线程对数据库中的库存进行修改扣减的时候,会出现超卖或是死锁情况,如下:问题一:超卖当多个线程执行select然后再进行update时,由于mysql的select并未进行加锁,导致查询出的库存信息与实际的库存数量不一致,导致update时候一直扣减到了负数。package com.example.service;import java.sql.*;import java.uti

2021-01-21 23:07:58 3070

原创 Dubbo源码解析(四)-了解服务端的接收服务端请求响应过程

https://blog.csdn.net/qq_38340127/article/details/112742445中对消费者的调用初步进行了了解,那么在请求发送后,服务端是如何进行请求响应的?1、同个服务下多个Impl是否开启多个Server首先在服务端再加一个interface以及对应的实现package org.apache.dubbo.demo;public interface TestService { String goodBye(String name);}

2021-01-18 21:25:48 377 1

原创 Dubbo源码解析(三)-了解消费者的负载均衡等以及调用的补充

上篇文章https://blog.csdn.net/qq_38340127/article/details/112712044为当一个服务提供者直接进行request等,那么当有多个服务提供者,消费者是如何进行选择?首先新增一个服务提供者:provider1中暴露端口修改为20881将两个服务都进行启动,消费者进行调试:用zookeeper客户端进行查看(由于我在idea中安装插件无效。。。)未启动消费者消费者调用-客户端与服务端进行连接对上篇中存在的部分遗漏进行

2021-01-17 16:27:39 211

原创 Dubbo源码解析(二)-以zookeeper为注册中心,深入了解服务调用方消费者注册以及调用

上篇讲了服务提供方暴露出对应的接口后,以及在zookeeper中创建了provider节点,https://blog.csdn.net/qq_38340127/article/details/112698774接下来继续服务调用方调试。xml配置<?xml version="1.0" encoding="UTF-8"?><!-- Licensed to the Apache Software Foundation (ASF) under one or more cont

2021-01-16 17:47:51 675

原创 Dubbo源码解析(一)-以zookeeper为注册中心,深入了解服务提供者暴露服务过程

1、Dubbo作用提供rpc调用。架构如下:2、服务提供者做了什么根据之前的文章https://mp.csdn.net/editor/html/112392102可以大致推测出,如果要提供一个远程服务调用,那么必须要对服务提供者实现一个服务暴露的过程。首先从官网下载源码,如果GitHub下载较慢的小伙伴可以通过https://gitee.com/wydhcws/dubbo.git下载。导入idea项目后,可以发现有一个demo调用,同时我将提供者的配置文件中的注册方式改为了zooke

2021-01-16 14:43:59 683

原创 RPC实现之BIO、NIO

RPC调用过程实际就是通过TCP连接,保证远程传输实现远程调用的过程,通过服务端对客户端发送数据的接收,进行查询到指定的方法,进行方法执行,并返回结果给客户端。即客户端通过请求连接服务端,在进行数据传输。一、通过BIO实现(通过连接的字节流实现通讯)首先需要客户端和服务端之间的通信1、客户端用的是Socket2、服务端用的是ServerSocket3、读取数据通过socket.getInputStream()4、写入数据通过socket.getOutputStream

2021-01-09 17:35:26 366 1

原创 Redis+Mysql数据不一致问题

目前各个大项目中多多少少用了写Redis缓存技术,通过对Redis中数据的读取来减少对DB的压力。一 先淘汰缓存,再写数据库写数据:删除缓存、更新数据库 读数据:读取缓存、缓存读取不到在读取数据库、将读取到的数据写入缓存那么在读、写两个分离的技术中就容易造成,数据库和缓存不一致的问题当用户在更新数据时,在第二个步骤还未执行,但是此时又通过获取数据接口,此时缓存已经删除,但是数据库中还是老数据,那么就会将老数据重新写入缓存,就会导致缓存和数据库中数据不一致。所以需要解决的方式1、.

2021-01-09 13:59:56 821

原创 Disconnected from the target VM, address: ‘127.0.0.1:56577‘, transport: ‘socket‘

spring boot启动的时候报这个错,一堆不靠谱的答案,根因没有显示,直接在启动类里面把run方法进行try,catch捕获打印下异常信息就能找到根因解决了。。。什么端口号啥的只是可能原因

2020-12-25 17:04:06 324 1

原创 BlockingQueue的作用以及实现的几个常用阻塞队列原理

1、BlockingQueueBlockingQueue为阻塞队列,其与普通队列不同的是,以put和get为例,阻塞队列在put时,若列表满了,则会等待直到队列可以加入元素;而阻塞队列在get时候,若列表为空,则会等待到队列非空。可以用来解决 生产者消费者问题。2、ArrayBlockingQueue阻塞队列在add时,若列表满了,则抛出异常;阻塞队列在offer时根据不同参数决定;阻塞队列在put时,若列表满了,则会等待直到队列可以加入元素;阻塞队列在get时候,若列表为空,则会等

2020-12-18 00:06:28 711

原创 Shiro登录的使用以及原理(二)----Filter过滤器原理和使用

在第一篇中进行的简单的介绍了Shiro的登录的实现https://blog.csdn.net/qq_38340127/article/details/109866392,因为主要为了后续的Spring结合Shiro,而Shiro通过Filer实现的,所以此篇主要讲Filter原理和使用。一 Filter 过滤器在web项目中Filer的主要功能就是对用户请求做预处理,接着将请求交给servlet处理并响应,然后Filter在对该相应进行后置处理。web浏览器-------->web服务器-

2020-11-27 22:55:10 600

原创 Shiro登录的使用以及原理-小插曲(idea从0开始搭建一个SpringBoot项目)

一 用idea从0开始搭建一个SpringBoot项目目录一 用idea从0开始搭建一个SpringBoot项目1.1 加入一个后端实现接口新建项目,选择web,若有相关经验的请直接跳过哈哈哈如果项目搭建比较慢可以在pom文件里面加入代理 <repositories> <repository> <id>aliyun</id> <name>aliy

2020-11-27 22:04:07 184 1

原创 从代码案例了解ThreadLocal的作用以及原理

本文主要是对上篇中ThreadLocal进行一个小讲解https://blog.csdn.net/qq_38340127/article/details/109866392,若有错误希望观众老爷们帮忙指出下,我好改进谢谢。一、ThreadLocal的作用在源码中有一段这样的注释: * This class provides thread-local variables. These variables differ from * their normal counterparts in t

2020-11-24 23:35:51 528 2

原创 Shiro登录的使用以及原理(一)

好久没写博客了,这段时间对最近项目做个总结,先从登入下手,话不多说直奔主题,Shiro的登录使用以及原理。一、Shiro主要作用 shiro主要的作用就是实现用户登录(认证,授权,加密等),用户登录后的用户信息存储(缓存),用户登出等。二、登录的使用 在使用登录的时候,最常见的一串代码就是获取Subject,然后对Token进行login();// 得到subject然后对创建用户名/密码身份验证Subject subject = SecurityUtils.ge...

2020-11-23 21:51:43 2903 4

原创 java的final和static关键字

final关键字1.final修饰类 表示该类无法被继承,如String类则为public final class String{}2.final修饰方法 表示该方法无法被重写(private修饰的方法默认为final修饰)3.final修饰变量 表示该变量为不可变的值,在被赋值后无法更改 ...

2019-08-12 11:10:44 116

原创 java最基础的死锁产生,以及对应条件

死锁案例:public class DeadLock { public static String a = "a"; public static String b ="b"; public static void main(String[] args) { Thread a = new Thread(new lo...

2019-08-08 15:13:19 117

原创 关于mysql的索引等的一些基础知识

虽然经常使用mysql,但是对于数据库的只是却一直不怎么了解,只是简单的知道些sql(内连接和外连接),压根不知道什么引擎,实在是太安逸了,对这些潮流技术都不了解。存储引擎: mysql采用不同的技术将数据等信息存储在对应的文件或是内存等,而这些技术都是运用了不同的存储机制,索引方案,而这个所谓的技术的实现方法就是存储引擎。(就是如何实现存储数据,如何...

2019-07-28 18:35:48 118

原创 java单例模式-3大基础实现

所谓单例模式 类对象只有一个实例。1.饿汉式:因为静态变量在初始化的时候,便已经创建,故只要不调用class.forName等方法,该形式便是线程安全//饿汉式 线程安全public class Singleton { private static Singleton singleton = new Singleton(); private Singleto...

2019-07-28 15:48:08 117

原创 ThreadPoolExecutor作用以及原理解析

1.线程池出现的原因: 在多线程的情况下,多个线程在创建和销毁的阶段会消费很多时间,占有很多资源,线程池为了减少在创建和销毁的资源下出现:2.JAVA中的ThreadPoolExecutor线程池2.1 线程池的运行方式 当线程池中获取到一个需要执行的线程的时候,是如何运行的呢? 此处可以通过对源码的查看了解: public voi...

2019-07-28 14:33:29 205

原创 运用多线程批量保存数据问题导致根据id查找出现中间被插入数据情况

最近项目基于springboot结合mybatis的情况下,同时运用多线程的批量保存的情况下,发现了一个严重问题,代码中开启了多个线程对数据进行插入,此时在运用另一个接口对已经保存的数据进行根据id升序排序获取的情况下,会出现id出现错乱的情况。上图中左边为一开始的查询结果,右边为过段时间后查询的结果,明显在中间插入了一段数据。为什么出现这种问题?对事务进行复习下吧:事务:...

2019-07-24 19:20:21 659

原创 java线程池的代码中的retry: 跳出循环

最近在看线程池的代码时候发现一块特殊的循环:这个retry是怎么一回事?具体用了一个测试用例进行:首先是一个最原始的循环: for(int i=0;i<5;i++) { for(int j=0;j<5;j++) { System.out.println(i+" "+j); if(j ==3) { continue;//这里调用cont...

2019-07-18 17:40:36 410

原创 数据结构-堆

堆通常是一个可以被看做一棵树的数组对象(用数组实现的二叉树)。堆总是满足下列性质: 堆中某个节点的值总是不大于或不小于其父节点的值; 堆总是一棵完全二叉树。(完全二叉树要求,除了最后一层,其它层的节点个数都是满的,并且最后一层的节点都靠左排列。) 将根节点为最大的值的称为最大堆,根节点为最小值的堆称为最小堆。 堆和二叉树的区别: 堆仅仅用了数组,无二...

2019-07-05 17:48:00 103

原创 spring-mvc

spring-mvc是基于servlet实现的,故必须配置web.xml一.web.xml的配置 1.配置ContextLoadListener <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</list...

2019-07-05 11:27:24 115

原创 反射学习笔记

以Test类为例public class Test{ public int age; public void getAge(){ return age; }}1.类对象Class的获取 方法一: Class class = Test.class; 方法二:Class cl...

2019-07-03 19:30:00 140

原创 leetcode-134 Gas Station

There areNgas stations along a circular route, where the amount of gas at stationiisgas[i].You have a car with an unlimited gas tank and it costscost[i]of gas to travel from stationito its ...

2019-07-01 16:41:14 114

原创 JDK动态代理实现原理

JDK动态代理步骤:(只能对实现接口的类进行代理) 1.创建被代理的接口和类; 2.创建InvocationHandler接口的实现类,在invoke方法中实现代理逻辑; 3.通过Proxy的静态方法newProxyInstance( ClassLoader classLoader, Class[] interfaces, InvocationHandler inv...

2019-06-28 10:18:19 1294

原创 Spring AOP实现原理

AOP是在面向对象编程OOP下引入公共行为,导致一系列相同代码,如日志,安全检测等下产生的一种横向切面方法。 那么Spring中的aop关键是如何实现的? Spring主要对添加了@Aspect注解的类进行切面实现,根据以下方法 通过反射对注解类的进行缓存加载存储在map中,通过判断是否存在value。主要通过代理进行切面:生成...

2019-06-26 17:53:15 225

原创 JAVA 快速排序的实现

快速排序(Quicksort)是对冒泡排序的一种改进。快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 public static void quickSo...

2019-06-24 11:29:19 287

原创 spring对xml文件进行加载bean过程初步解析

以下是一段简单的通过类路径下的test.xml文件加载bean获得BeanFactory的代码:(对student进行依赖注入)BeanFactory bf = new XmlBeanFactory(new ClassPathResource("test.xml")); 其中new ClassPathResource()为内置的解析xml文件,进行封装底层资源。通过源...

2019-06-21 17:55:29 2291

原创 leetcode-131 Palindrome Partitioning

Given a strings, partitionssuch that every substring of the partition is a palindrome.Return all possible palindrome partitioning ofs.Example:Input:"aab"Output:[ ["aa","b"], ["a","a"...

2019-06-13 10:59:37 111

原创 leetcode-130 Surrounded Regions

Given a 2D board containing'X'and'O'(the letter O), capture all regions surrounded by'X'.A region is captured by flipping all'O's into'X's in that surrounded region.Example:X X X XX O O...

2019-06-12 19:26:00 117

原创 leetcode-129 Sum Root to Leaf Numbers

Given a binary tree containing digits from0-9only, each root-to-leaf path could represent a number.An example is the root-to-leaf path1->2->3which represents the number123.Find the tota...

2019-06-10 12:04:23 94

原创 leetcode 128 Longest Consecutive Sequence

Given an unsorted array of integers, find the length of the longest consecutive elements sequence.Your algorithm should run in O(n) complexity.Example:Input:[100, 4, 200, 1, 3, 2]Output: 4Ex...

2019-06-06 15:25:49 103

原创 leetcode-125 Valid Palindrome

Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.Note:For the purpose of this problem, we define empty string as valid palindrome.Examp...

2019-06-05 17:12:56 118 2

空空如也

空空如也

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

TA关注的人

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