自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

程序员小潘

专注于Java后端技术分享!

  • 博客(8)
  • 资源 (1)
  • 收藏
  • 关注

原创 摊牌了,我要手写一个RPC

文章目录前言需要解决的问题手写RPC实战1、定义通信协议2、自定义注解3、定义接口4、实现接口5、暴露服务并监听处理请求6、生成RPC动态代理对象7、消费者注入RPC动态代理对象功能测试尾巴前言RPC是远程过程调用(Remote Procedure Call)的缩写形式。SAP系统RPC调用的原理其实很简单,有一些类似于三层构架的C/S系统,第三方的客户程序通过接口调用SAP内部的标准或自定义函数,获得函数返回的数据进行处理后显示或打印。随着微服务、分布式的大热,开发者慢慢趋向于将一个大的服务拆分

2020-10-18 11:50:42 17927 15

原创 手写Http服务器

你写的一个Html页面,丢到服务器,启动一个Web服务(Tomcat/Nginx),然后大家就可以访问了,为什么?HTTPhttp是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII码形式给出;而消息内容则具有一个类似MIME的格式。这个简单模型是早期Web成功的有功之臣,因为它使开发和部署非常地直截了当。HTTP允许Web服务器和浏览器通过网络发送和接收数据,是一种基于【请求-响应】的协议。说白了HT

2020-10-31 12:03:29 7002

原创 大白话理解可达性分析算法

垃圾收集(Garbage Collection,下文简称GC)是Java有别于其他编程语言的一大特点,GC主要考虑的有三个问题:哪些内存需要回收?什么时候回收?如何回收?今天咱们主要聊聊JVM是如何判断对象可以被回收的。常用的算法有两种:引用计数算法可达性分析算法引用计数算法在对象中添加一个引用计数器,每当新加一个引用时,计数器就加1,当引用失效时,计数器就减1。任何时刻只要计数器为0就代表对象没有引用可以被回收。这种算法实现简单,判断高效,但是有一些缺点:主流的商用JVM

2020-10-24 21:39:29 15523 4

原创 摊牌了,我要手写一个AOP

前言在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。相信Java开发者对AOP都不陌生,尤其是使用Spring框架的开发者,几乎是面试必问。网上给

2020-10-21 19:52:13 8451 2

原创 从Spring源码分析@Autowired注入的request是否线程安全

最近看到这样一段代码,是关于在业务代码中操作HttpServletRequest的,如下:@RestController@RequestMapping("/user")public class UserController { @Autowired HttpServletRequest request; @GetMapping("login") public void login() { Object xx = request.getSession().getAttribute("xx"

2020-10-21 19:41:31 8602 1

原创 Dubbo泛化调用强制返回Map问题,实现自定义返回值序列化逻辑

什么是泛化调用泛化接口调用方式主要用于客户端没有 API 接口及模型类元的情况,参数及返回值中的所有 POJO 均用 Map 表示,通常用于框架集成,比如:实现一个通用的服务测试框架,可通过 GenericService 调用所有服务实现。官方文档说白了,消费者可以在没有Interface接口的情况下去调用远程服务,由于没有接口和模型类元,消费者必须手动指定要调用的接口名、方法名、参数列表、版本号等信息。正是因为没有接口和模型类元,所以泛化调用的接口返回结果Dubbo不得不转换成HashMap返

2020-10-18 14:12:50 8722

原创 从Linux底层理解为什么带Buffer的输出流数据写入速度更快

文章目录先说结论BufferedOutputStreamwrite()方法为什么慢?write之后数据就持久化了吗?页高速缓存 Page Cache如何保证数据一定写入物理磁盘?fsync()先说结论使用Java代码操作文件时,不管是读还是写,总是建议使用缓冲区。开发者可以自己创建一个字节数组,每次read/write总是一块数据,而不是一个字节一个字节的读写。为此JDK直接提供了带缓冲区的输入输出流:BufferedInputStream、BufferedOutputStream。先来看一下两者

2020-10-10 21:32:37 8561

原创 Cache Line对数据读写性能的影响

文章目录多级缓存-填补内存读写速度与CPU计算速度的鸿沟局部性原理与Cache Line伪共享对齐填充@Contended备注尾巴对于一个程序来说,几乎所有的计算任务都不可能仅通过CPU的计算就可以完成,它至少要和内存打交道:读取运算数据、写入运算结果。现代CPU的算力已经十分强大,相比之下存储设备的IO读写速度却发展的十分缓慢。通常情况下,内存每完成一次读写操作,CPU已经可以进行上百次的运算,为了填补两者速度上的鸿沟,现代CPU不得不加入一层或多层读写速度接近于CPU处理速度的高速缓存Cache。C

2020-10-05 13:29:09 399 4

HashMap.java

JDK7的HashMap源码阅读,几乎给每个方法和属性都加上了中文注释。 可以帮助大家更好的阅读源码,可能有理解不对的地方,望指正。

2019-12-27

空空如也

空空如也

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

TA关注的人 TA的粉丝

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