自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(89)
  • 问答 (1)
  • 收藏
  • 关注

原创 大数据架构

大数据核心原理和场景分析processon:https://www.processon.com/view/link/60b4d0071e08532bd00e9290

2021-05-31 20:02:09 568 5

原创 如果让你设计一个微信朋友圈,你怎么设计

这个问题当时把我问的萌币了我想他大概是考察这切入点吧1,分布式事务?CAP逻辑 C:一致性?的考察,比如我发了一个微信朋友圈,其他人都能及时的看到2,微信朋友圈的可见和不可见的关系,就比如从我的账号 中,去刷微信朋友圈,包括我设置的可见和不可见,和别人设置的他的朋友圈的权限,这个应该怎么设计?(我当时回答了一个底层应该用图的数据结构,现在想想真是随口说啊)3,微信朋友圈一直load的原理,就是我们手机一直向下滑,一直刷新之前历史的朋友圈的消息,是如何优化这种加载速率的。4,必然涉及到多个不同地.

2021-04-30 15:48:04 1147 3

原创 红黑树的左旋和右旋操作

一时忘记,要记录一下:https://blog.csdn.net/lsr40/article/details/85245027

2021-04-26 15:56:10 285

原创 字节跳动面试经验

首先字节跳动面试全程都是视频面试,并且对算法题要求很高,基本上上来介绍项目,挖掘项目之后就会给你算法题做,做不出来会给你打一个很大的折扣(哎,这一点上自己确实吃了亏,已经想尽办法把leecode的高频题刷了一遍了),还是得好好努力,把算法,把一些底层的知识掌握的透彻呀,面试时间是4月初开始的,面试到第二轮算法题做的不好,挂了,哎。一些核心的面试问题在下面:一面:1,自我介绍,项目介绍2,算法题 :两个链表的公共子序链表3,算法题:二叉树的对称性4,mvcc和间隙锁的区别5,间隙锁原理,sq.

2021-04-09 11:15:15 1156

原创 ThreadLocal的内存泄漏问题

文章目录1,ThreadLocal为什么会出现内存泄漏的问题2,如何清理已经垃圾回收掉的ThreadLocal的关联Entry?3,如何优雅的使用ThreadLocal4,ThreadLocal保持线程执行之间副本值得传递性??5,ThreadLocalMap和HashMap的不同之处ThreadLocal的内存泄漏,是一个会经常被问的一个问题,甚至是你在去使用ThreadLocal,你都无法去感知其ThreadLocal潜在的内存泄漏。深入分析ThreadLocal的内存泄漏问题之前,我们首先要明白

2021-02-18 16:20:28 1175

原创 ReentrantLock的lock()和lockInterruptibly()方法的区别

1,ReentrantLock的lock()不会再获锁过程中去相应中断标志。而是再获取锁之后才响应中断。2,ReentrantLock.lockInterruptibly允许在等待时由其它线程调用等待线程的Thread.interrupt方法来中断等待线程的等待而直接返回,这时不用获取锁,而会抛出一个InterruptedException。代码示例:1.使用lockInterruptibly()的情况:public class ReentrantLockInterruptibly { pr

2021-02-03 09:22:13 1227

原创 Java的值传递特性

文章目录1,基本数据类型java函数传参的传递方式是以值传递的方式进行传递,即调用参数的时候实际上是将实际参数的值复制一份进行传递。但是这在基本数据类型和引用数据类型的函数传参中会体现出不一致的效果:1,基本数据类型我们都知道,函数中定义的基本数据类型实际上是存放到当前线程对应的栈帧空间中。public static void main(String[] args) { int x1 = 1; int x2 = 2; x3 = x1+x2;

2021-02-02 21:20:02 661

原创 wait和notify的虚假唤醒(spurious wakeups)

文章目录1 现象2 虚假唤醒1 现象这个词的定义来源于JDK的Object#wait()方法的注解官方API明确的告诉我们,为了防止发生中断错误以及虚假唤醒的问题,我们需要将wait()方法放在while() 循环中使用synchronized (obj) { while (<condition does not hold>) { obj.wait(); } ... // Perform action appropriate to

2021-01-18 18:19:18 1187

原创 架构核心原理

文章目录架构核心原理思维导图架构核心原理1,架构设计需要考虑的几个方面高可用,伸缩性,扩展性,安全性2,以多种维度去分析一个高性能服务架构的设计应用服务,缓存机制,存储服务(存储服务包含基础的数据存储,以及搜索数据存储)。3,无状态的应用服务是我们设计高可用服务的基础。4,幂等性的应用服务设计是解决服务调用 失效,重连,数据一致性的基础5,CAP理论一般CAP理论是我们在去分析数据高可用的理论基础。无论是传统的数据存储或者是分布式数据存储,都会保证A(可用性),传统数

2021-01-07 15:58:13 1403 1

原创 逐行源码分析AbstractQueuedSynchronizer(AQS)中CountDownLatch的源码实现

文章目录1 介绍2 场景3 使用4 共享锁和独占锁1 介绍在上篇文章 逐行源码分析AbstractQueuedSynchronizer(AQS)中Semaphore的源码实现 中,我们分析了高性能源码包java.util.concurrent 中的信号量Semaphore类的使用场景和源码。这篇文章我们介绍 java.util.concurrent 包中的另一个重要的工具类:CountDownLatch ,这个高性能工具类的使用场景应该是比Semaphore 较于普遍性2 场景官方文档中的解释是

2020-12-09 17:04:39 1674

原创 逐行源码分析AbstractQueuedSynchronizer(AQS)中Semaphore的源码实现

文章目录1 介绍2 场景3 使用4 分析1 介绍在上一篇博客:逐行源码分析AbstractQueuedSynchronizer(AQS)中ReentrantLock的源码实现 中是分析了关于高性能包java.util.concurrent 中的AQS得底层设计,以及ReentrantLock 的源码实现。这篇博客,我们会分析AQS的另一个实现:信号量:Semaphore2 场景实际上对于Semaphore 这个类的使用,毫无客气的说,在平时的业务逻辑代码使用的很少(或许有些不知道咋使用的吧)。

2020-12-04 23:04:57 2108

原创 逐行源码分析AbstractQueuedSynchronizer(AQS)中ReentrantLock的源码实现

文章目录1 介绍1 开头1 介绍java中,锁经常是我们去使用的一个技术,无论是使用jdk原生的synchronized,或者是使用jdk提供的无锁机制,对于java.util.concurrent 的认识,都会有或多或少的理解。一提到高性能的jdk包,就不得不提Doug Lea 这位超级大佬。如果IT的历史,是以人为主体串接起来的话,那么肯定少不了Doug Lea。这个鼻梁挂着眼镜,留着德王威廉二世的胡子,脸上永远挂着谦逊腼腆笑容,服务于纽约州立大学Oswego分校计算机科学系的老大爷。上面的

2020-12-02 23:19:26 2725

原创 Netty研究

文章目录1 netty的版本2 netty的核心类3 零拷贝(zero-copy)4 nio的epoll空轮询bug5 要读Netty源码嘛?这篇文档是本人在学习netty,使用netty和阅读netty源码的过程中的总结,涉及到的学习知识点和学习重点会一一介绍,1 netty的版本netty目前官方的稳定tag是:netty-5.0.0.Alpha2 但是,官方声明中已经是摒弃了netty5分支的开发,具体的原因可见:https://github.com/netty/netty/issues/44

2020-11-27 16:30:46 3015

原创 mybatis源码阅读

文章目录1 介绍2 源码概述2.1 几个比较重要的类2.2 构建过程1 介绍最近看了一下mybatis3的源码,发现了一下有趣而且值得学习的地方2 源码概述2.1 几个比较重要的类SqlSession:这个类是整个mybatis的核心类,通过该类,我们执行命令,获取映射示例和对应的事务管理器。基于mybatis原生的jar包时,SqlSession是通过SqlSessionFactory进行创建对于SqlSessionFactory的创建,其内部是通过创建者模型SqlSessionFa

2020-11-09 22:37:30 2848 2

转载 linux用户态和内核态

一 水贴今天是10月24,也就是传说中的程序员日,刚好是周六,所以就来水一贴内核态和用户态对于linux中的内核态和用户态之间的关联,我觉得下面的图片很形象该图片来源于:https://www.cnblogs.com/bakari/p/5520860.html如上图所示,从宏观上来看,Linux操作系统的体系架构分为用户态和内核态(或者用户空间和内核)。内核从本质上看是一种软件——控制计算机的硬件资源,并提供上层应用程序运行的环境。用户态即上层应用程序的活动空间,应用程序的执行必须依托于内核提供

2020-10-24 10:43:52 2176

转载 程序员如何阅读英文文档

文章目录为什么要看英文文档谈经验阅读方法语法词汇如何去记单词对全文的把握批判的观点读英语文章如何利用google来搜索答案转载为什么要看英文文档在回答怎么做之前,我想说说为什么要这么做。在我们学习新技术的过程中不是有中文文档吗?既然有中文文档,为什么还要去学习阅读英文文档呢,这不是多此一举吗?我想说的是,这绝对不算多此一举。很多的英文文档虽然有对应翻译的中文文档。但是很多东西的翻译质量是不敢恭维的。就拿一个最常见的书来讲吧,《think in java》就算一本大家公认的好书。但是如果你拿着本书的中

2020-09-22 17:25:24 2539 2

原创 大数据生态系列学习

文章目录1 前言2 大数据能为我们做什么3 Hadoop3.1 HDFS3.2 MapReduce3.3 YARN4 Spark5 Flink6 参考1 前言最近学习了一下大数据,算是对于大数据进行了一个大致的了解掌握,以下是个人在学习大数据方面的总结,2 大数据能为我们做什么数据即资产,在互联网和云时代的今天,大数据的分析能为企业带来无穷的价值,同时,大数据量的分析也能够使我们掌握数据,分析规律。大数据改造了我们的生活,它能优化、提高、高效化并最终捕获住利益。3 Hadoop既然要学习

2020-09-22 16:47:03 1014 1

原创 zipkin无法接收链路日志问题

文章目录1 问题2 现象3 解决1 问题最近在使用zipkin做微服务链路追踪的时候,发现链路信息一直注册不到zipkin-server中,导致在zipkin-server中看不到链路信息,一度让我怀疑人生2 现象zipkin-server 我是使用的是:zipkin-server-2.12.2-exec 版本,从Spring Cloud 的F版本之后,官方就建议我们不需要自己再去构建zipkin serve服务,我们可以通过:https://zipkin.io/pages/quickstart

2020-08-21 18:46:39 2133

原创 Spring Cloud Gateway之校验断言(Predicate)

文章目录1 介绍2 校验配置1 介绍spring cloud gateway源码中,内置了大量的Predicate工具,用于处理不同情况下的断言信息,对于每一个断言参数的配置,可以参考文档:https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.3.RELEASE/reference/html/#gateway-request-predicates-factories2 校验配置对于每一个 断言(Predica

2020-07-28 14:24:11 3593

原创 Spring+Spring Boot各种实用的工具类

文章目录1 ClassUtils2 BeanUtils3 SpringFactoriesLoader4 ObjectUtils5 ReflectionUtils6 ResourceUtils7 SerializationUtils8 StringUtils9 SystemPropertyUtils1 ClassUtils该类是针对于Class类的常见操作工具类。可以查看:ClassUtilsTests进行学习2 BeanUtilsStatic convenience methods for Ja

2020-07-22 16:57:16 1613

原创 分库分表技术

文章目录1 什么是分库分表2 分库分表解决了什么问题3 mycat和sharding-jdbc的区别3.1 mycat原理3.2 sharding-jdbc原理4 sharding-jdbc使用1 什么是分库分表2 分库分表解决了什么问题3 mycat和sharding-jdbc的区别3.1 mycat原理3.2 sharding-jdbc原理4 sharding-jdbc使用...

2020-06-16 13:56:00 1950 1

原创 分布式一致性Raft算法

文章目录1 raft算法详解2 raft算法实例2.1 nacos中的raft算法实现2.2在之前的博客中,zookeeper原理及apache zookeeper源码阅读,我在里面介绍了关于zk选主算法:分布式一致性算法Paxos,对于Paxos算法的理解,一直都是公认的生涩难懂,在这个博客中,我们会学习另一个分布式一致性算法,那就是raft1 raft算法详解首先,raft算法是一种基于日志复制的一致性算法,并且raft的结果等价于paxos算法,同时它是一种更加简单,更易理解的分布式一致性算法

2020-06-02 11:01:38 3292 1

原创 Feign-Get请求自动转成Post问题分析

文章目录1 现象2 解决3 解决1 现象Feign使用中有一个小小的细节之处,在明明我们使用Get配置的时候,我们会发现Feign会将Get请求转成Post调用。直接上示例:接口提供者: @GetMapping(value = "/provider") public String test(@RequestParam(value = "name", defaultValue = "zcswl7961") String name) { List<String&g

2020-05-25 20:44:37 9424 4

原创 Linux系统中IO多路复用

1 什么是IO多路复用常见的IO模型中,一般有四种,阻塞IO模型,非阻塞IO模型,IO复用模型,信号驱动IO模型,异步IO模型,我们在去理解IO复用模型之前,首先去理解一下其他的四种IO模型1.1 阻塞IO模型阻塞IO模型就是我们在使用BIO去开源socket的时候,通过socket进行accpet,read的时候,都属于阻塞IO模型,他们会直到数据连接到达,以及数据就绪或者发生错误的时候...

2020-04-09 16:12:39 705 2

原创 Spring事务的传播行为特性详解

1 传播行为当一个事务方法被另一个事务方法调用时,必须指定对应的事务传播行为,或者是方法继续执行在现有的事务方法中,或者是开启一个新的事务2 Spring定义的事务传播行为Spring源码中,对于事务的传播行为定义是在TransactionDefinition类中,该类定义了事务的一些基本属性,包含事务的传播行为,隔离级别,事务的超时设置,事务是否只读,以及对应的事务名称。我们重点关注一下...

2020-03-20 13:28:18 836

原创 Spring Aop-@Before,@After,@Around,@AfterReturning,@AfterThrowing链路调用分析

一 简介在Spring Aop的源码中,关于拦截器的调度顺序是一个值得分析的点,也可以让我们深入的理解关于@After,@Before,@Around,@AfterReturning的相关执行顺序,废话不多说,直接上源码二 分析无论是基于Xml还是基于注解的方式,实际上都是在Spring的ioc容器中注入一个BeanPostProcessor类型的AnnotationAwareAspectJ...

2020-03-18 09:11:11 3321

原创 RPC服务调度架构图

文章目录一 调度流图二 负载均衡思考一 调度流图二 负载均衡思考轮询:随机:LRU:一致性Hash:权重:

2020-03-09 18:08:45 657

原创 深入分析Java-RMI

文章目录1 介绍2 机制2.1 内部体系架构2.2 原理3 代码示例1 介绍java本身的内部中是提供了一种RPC框架-RMI(即Remote Method Invoke,远程方法调用),位于rt.jar包中,以java.rmi开头的package中。它是一种允许一个对象驻留在一个系统(JVM)来访问/调用一个物体在另一个JVM中运行的机制2 机制2.1 内部体系架构在一个RMI 的...

2020-03-05 21:31:02 1776

转载 扫码登陆的逻辑实现

介绍首先介绍下什么是扫码登录。现在大部分同学手机上都装有微信、qq和淘宝这一类的软件。而这些app都有他们相对应的网页端。为了让用户在使用他们的网页时登录更加方便和安全,使用手机扫一扫就可以登录的服务,就显的自然而然了。一 网页端与服务器的配合逻辑:接下来就是对于这个服务的详细实现首先用户打开网站的登录页面的时候,向浏览器的服务器发送获取登录二维码的请求。服务器收到请求后,随机生成一个u...

2020-02-27 11:14:17 1514

原创 Class.forName(String name)与ClassLoader.loadClass(String name)的区别

一 介绍spring源码中,ClassUtils工具类对于Class字节码的处理做了大量的工具封装其中,根据类的文件描述获取对应字节码的方法forName(String name)可谓是对于Class.forName(String name)和ClassLoader.loadClass(String name)功能进行了扩展增强,/** * Class.forName()的进化版,返...

2020-01-08 16:16:29 1446

原创 Class和ClassLoader关于getResource(),getResourceAsStream()的区别

1 介绍在java开发中,有一个关于文件获取的方式是必不可少的。比如,我们需要获取到对应的classpath路径下的一个文件,或者是我们在看spring源码的时候,经常看到ClassPathResource这个类其内部的实现方式都是基于Class或者ClassLoader的getResource()进行获取的。2 使用我们会发现Class类和ClassLoader类下都是会存在这样的两...

2020-01-04 13:29:51 3369 1

原创 java中BO,VO,DTO,DO等之间的转换

文章目录1 介绍2 转换2.1 通过get,set方法进行类型转换2.2 基于反射的机制2.3 基于cglib字节码修改1 介绍阿里的java代码开发规范中,关于各个层的命名规范是这么定义这里面有我们比较常见的POJO对应的实体定义格式,其中VO(View Object):是针对于视图层,用于展示层(前端页面),它的作用是把某个视图需要展示的数据进行封装。DTO(Data Trans...

2019-12-26 23:18:48 8343 1

转载 业务逻辑中如何更好的处理空值?

文章目录1 场景2 问题现场2.1 深入listUser研究2.2 深入研究get方法2.3 深入入参1 场景存在一个UserSearchService用来提供用户查询的功能:public interface UserSearchService{ List<User> listUser(); User get(Integer id);}2 问题现场对于面向对象...

2019-12-24 15:17:47 460

原创 创建线程池需要注意的事情

1 介绍阿里的java代码规范有一条是强制建议开发者不要使用Executors创建线程池。而是建议我们使用原生的ThreadPoolExecutor进行创建,既然这么建议了,自然是有它建议的道理,下面我们就来简单的分析一下为什么不推荐我们使用Executors进行创建。2 分析作为一个java开发,线程池是我们工作当中,必不会不去使用的一个工具,关于线程池的好处,自然是不用多说,反正就...

2019-12-20 17:32:44 949

原创 idea编译Spring源码

文章目录1 开头1 问题1 开头不得不说构建spring源码阅读环境真的很复杂,自己之前构建的spring源码环境被一不小心删掉了,但是重新import build的时候是出现各种错误(源码一个没改),大部分的错误其实都是和网络都关,源码中有关于IDEA 和 Ecplise 构建的说明文档IDEA:import-into-idea.mdEclipse:import-into-eclip...

2019-12-18 23:10:51 482 2

原创 linux脚本

文章目录1 理论2 语法2.1 & 和 && ,| 和 || ,&> 和 > 的区别2.2 /dev/null2.3 2>/dev/null 和 >/dev/null 2>&1 和 2>&1>/dev/null 的区别2.4 $ (()), \$() ,\` \`反引号,${}的区别1 理论2 语法2...

2019-12-11 16:56:20 324

原创 java开发中的代码设计规范

文章目录介绍如何写好业务代码?代码整洁之道--观后感介绍当你十分纠结新创建的一个类如何命名,或者创建一个方法如何给他起一个比较富有直译的方法名的时候,这个时候,束缚你的并不是你的代码能力,有时候就是你对于代码整体逻辑的设计的能力,而这个能力,是需要你长期的代码编写和代码设计的过程中,慢慢锻造出来的。每一个人其实都会有这么一个情况,有时候我们在看别人的代码的时候,总是觉得看的逻辑不清晰,看不...

2019-12-11 09:22:46 1497

原创 部署策略

文章目录一 介绍二 部署能力的演变2.1 原始部署2.2 脚本化2.3 平台化2.4 脚手架一 介绍在我们日常的开发流程中,对于单体架构的服务而言,我们可以通过简单的命令进行启动部署,但是对于多体架构和容器化的服务而言,我们可以通过容器脚本的方式进行部署的策略,这样可以大大的节省人力资源成本,使服务的部署运维能力不会变的那么笨重。二 部署能力的演变2.1 原始部署例如,我们要开发一个简...

2019-11-25 10:58:35 730

原创 《高性能Mysql第三版》读书笔记

文章目录一 简介二 理论三星系统原则聚簇索引和非聚簇索引覆盖索引使用索引扫描来做排序一 简介这篇博客中的知识点,算是在阅读《高性能Mysql第三版》这本书的一个读书笔记,有一点比较尴尬的事情是我并没有买这本书,而是下载了这本书的PDF版本进行阅读(无奈原书太贵)。但是,还是要强烈的打一个广告,这本书真的很是值得你一读,尽管它的一些知识点是停留在理论的基础上,并没有很深入的讲解底层的实现机制...

2019-11-11 18:42:14 821

原创 mysql中的InnoDB引擎是否支持Hash索引

文章目录问题延伸问题这个问题之前我一直没有注意(压根没有好好看),但是当我有次在一个innodb引擎的表中创建hash索引的时候,只要一保存,它就会自动把我创建成BTree类型的索引。一番纳闷之后,学习才知:InnoDB引起有一个特殊的功能叫做"自适应哈希索引(adaptive hash index)" 。当InnoDB注意到某些索引值被使用的非常频繁时,它会在内存中基于B-Tree索引...

2019-11-11 15:16:42 1557

空空如也

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

TA关注的人

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