- 博客(12)
- 收藏
- 关注
原创 内网穿透工具-Ngrok
内网穿透工具-NgrokNgrok使用Ngrok 是一个反向代理,通过在公共端点和本地运行的 Web 服务器之间建立一个安全的通道,实现内网主机的服务可以暴露给外网,是个内网穿透工具。暂时使用的场景异地办公,前后端联调可能需要使用到。微信公众号,小程序开发联调需要服务在公网外放再联调Ngrok下载参考ngrok官网authtoken账号获取:在官网注册账号,我使用的是github的账号注册登录的。Ngrok使用ngrok命令帮助ngrok http 8080看到上图就可以
2022-03-09 10:32:50
349
原创 LinkedHashMap源码学习
LinkedHashMap学习简介LinkedHashMap是HashMap扩展,重写了HashMap的Node类也维护了一个双向链表可以保证元素插入的顺序。可以用来实现LRU缓存策略。LinkedHashMap有HashMap的所有特性。属性LinkedHashMap继承了HashMap,拥有其所有的特性。并新增了一些属性//双向链表头节点,旧节点保存在头节点transient LinkedHashMap.Entry<K,V> head;//双向链表尾节点,新节点保存在尾结点
2021-09-06 22:40:05
165
原创 HashMap源码学习
HashMap源码学习简介HashMap是数组+链表实现,采用key/value的键值对,每个key对应唯一的value,查询和修改的效率很快,能达到O(1)的平均时间复杂度,是非线程安全的且不能保证元素的存储的顺序。存储结构采用数组+链表,出现hash冲突的时采用链表解决hash冲突。hashmap定义了一个数组变量transient Node<K,V>[] table;Node是一个静态内部类实现了Map.Entry<K,V>,采用链表指向下一个节点。 f
2021-09-05 18:20:40
187
原创 高并发之限流笔记
认识限流限流在我们日常生活中也是很常见的,如早高峰地铁限流(排队等)、北上广深大城市的车牌限号(直接拒绝)等。同比到我们软件系统,指的是在高并发场景下对高并发请求进行限速或者对一个单位时间内的请求进行限速来保护软件系统。也就是对请求进行限速,比如1秒只允许100个请求。归根结底就是在一定频率上限制请求的数量1、拒绝服务,对于超过限制的请求拒绝提示友好的信息或错误提示页等2、排队等待,过多的请求直接放到队列里等待限流的场景限流一般都是对接口进行限流,理论上所有的接口都应该限流(毕竟每一个接口
2021-08-21 13:20:00
373
原创 Eureka 源码笔记
Eureka 源码Eureka Client源码分析通过在启动类上添加@EnableDiscoveryClient这个注解,来声明这是一个Eureka Client。详见注解/*** Annotation to enable a DiscoveryClient implementation.* @author Spencer Gibb*/@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Inh
2021-08-15 16:35:10
239
原创 Eureka 概念
Eureka 原理Eureka是SpringCloud的主要组件,是服务注册发现的组件。Spring Cloud Eureka分为Server端和Client端,Server端作为应用的注册中心,Client端会向Server端注册服务消费服务。Eureka Server和Eureka Client都是采用Java编写的,所以,Eureka主要适用于通过Java实现的分布式系统,但是Eureka Server的服务治理机制提供了完备的RESTful API,所以它也支持将非Java语言构建的微服务应用纳入
2021-08-15 15:20:38
452
原创 集合之ArrayList源码学习
集合之ArrayList源码学习ArrayList是日常开发经常用到的数据结构,底层是用数组实现的List,相当于单纯的数组相比,ArrayList有动态扩容的能力并提供了很多动态数组的方法。继承关系ArrayList继承了AbstractList,实现了List, RandomAccess, Cloneable, java.io.Serializable等接口。ArrayList实现了List,提供了基础的添加、删除、查找、遍历等操作。ArrayList实现了RandomAccess,提供了随
2021-08-15 14:01:59
123
原创 Java AQS源码分析
AQS是AbstractQueuedSynchronizer的简称,通过一个原子变量+双向队列来实现多线程安全。核心思想:若资源state空闲则当前线程设置为拥有线程,并将资源设置为占用。若资源state被占用,则请求线程进入一个FIFO同步队列等待唤醒机制保证资源分配。参考资料https://www.cnblogs.com/truestoriesavici01/p/13213978.htmlhttps://blog.youkuaiyun.com/sifanchao/article/details/843
2021-07-21 23:55:56
154
原创 TCP协议笔记
TCP提供了一种可靠的面向连接的字节流运输服务。该文将记录本人对TCP提供可靠连接服务的理解。TCP数据报文TCP数据是封装在IP数据包中的,TCP是传输层协议,上一层是网络层。TCP 报文段由TCP首部和TCP数据组成,TCP通常20个字节,分为5行。结构如下:TCP首部数据解释源端口号/目的端口号:表示数据从哪个进程来, 到哪个进程去。用于寻找发送端和接收端的应用程序。这两个值加上IP首部中的源IP地址和目的IP地址唯一确定一个TCP连接。32位序号:TCP序列号是从TCP发送端向TC
2021-07-18 23:54:37
520
原创 Java 并发垃圾收集器的一些疑问
引言:上一遍博客总结了各种垃圾收集器,对于非并发垃圾回收器还是比较好理解的。在此记录一下关于CMS、G1并发垃圾收集器的一些疑问。分为初始标记(STW),并发标记、重新标记(STW)、并发清除(筛选回收).1 初始标记找出Gc Roots为什么那么快?OopMap是什么?根据可达性分析算法首先要找到根节点,但是作为Gc Roots的对象主要在全局性和执行上下文中(两栈两方法),现在的java应用仅仅一个方法区就上百兆再加上线程栈就更大了,如果是逐个检查肯定会花费大量的时间。但是初始标志阶段又号称速度快。
2021-07-18 01:49:23
273
原创 Java垃圾回收笔记
Java内存运行时其中的程序计数器、虚拟机栈、本地方法栈会随着线程的的消亡而回收,这些区域都不用考虑垃圾回收的问题。堆和方法区是线程共享的,而垃圾回收就是针对这些内存进行回收处理。我将把个人认知记录下来,主要记录CMS垃圾回收的详情。希望大家指正。一 确认哪些垃圾已经死了需要被回收?1引用计数法 引用计数法就是 给对象中添加一个引用计数器,每当一个地方引用这个对象时,计数器值+1;当引用失效时,计数器值-1。任何时刻计数值为0的对象就是不可能再被使用的。这种算法的效率很高(python...
2021-07-18 01:35:39
152
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人