经验总结
文章平均质量分 86
那只是一股逆流
长风破浪会有时,直挂云帆济沧海。
展开
-
QuantumTunnel:Netty实现
接上一篇文章内网穿透服务设计挖的坑,本篇来聊一下内网穿透的实现。为了方便理解,我们先统一定义使用到的名词:UserClient:用户客户端,真实的请求发起方;UserServer:内网穿透-用户服务端,接收用户客户端发起的请求;并将请求转发给代理服务端;ProxyServer:内网穿透-代理服务端,与代理客户端保持一个连接通道用于传输数据;ProxyClient:内网穿透-代理客户端,从通道中接收来自代理服务端的请求数据,并且发起真正的请求。拿到请求结果后再通过该通道写回到代理服务端;Targ原创 2021-10-17 15:01:30 · 368 阅读 · 0 评论 -
QuantumTunnel:内网穿透服务设计
背景什么是内网穿透摘自百度百科内网穿透,也即 NAT 穿透,进行 NAT 穿透是为了使具有某一个特定源 IP 地址和源端口号的数据包不被 NAT 设备屏蔽而正确路由到内网主机。通俗易懂一点就是一个与没有公网IP的机器进行数据交换。这个机器有可能在某个机房,也有可能在家。典型的应用场景公网访问内网中的某个系统服务:出于安全等因素考虑,机房一般是不能公网访问的;要想访问机房中的某个服务,那么就需要用到内网穿透;用于接收公网回调:在开发微信业务时,一般会涉及到服务回调,而开发者的电脑无法被原创 2021-10-06 16:26:03 · 317 阅读 · 1 评论 -
AbstractQueuedSynchronizer的奇妙之旅
作为`java.util.concurrent`最核心的工具类,是该包各种多线程工具、容器实现线程安全的基石。原创 2021-03-05 08:44:02 · 155 阅读 · 0 评论 -
计算机网络(二):传输层
上一篇文章简单介绍了现在的计算机网络模型和每层的作用,对计算机网络有了一个初步的认识。在计算机网络模型的各个层次中,我们最关心的莫过于传输层和网络层了;尤其是传输层,作为应用层的下层,开发同学在工作中也接触的比较多。比如拥有高性能网络通信能力的netty、dubbo等中间件,都涉及了传输层尤其是TCP协议的很多细节和上层的协议优化。作为与开发同学关系最紧密的传输层,掌握其相关的知识是非常必要的。传输层简介传输层位于应用层的下面一层,它提供了主机间的进程(应用)的通信能力;它屏蔽了底层网络路由、数据传原创 2021-02-27 17:51:16 · 371 阅读 · 0 评论 -
系统日志实践
日志就像救火队,没有问题的时候感知不到它的存在;一旦出了问题没有它是不行的日志困境:为什么需要打印日志其实我们需要问一下自己这个问题:**为什么需要打印日志?**为了系统出问题时快速定位问题?为了监控系统运行情况?我们的目的不一样打出来的日志也是不一样的;如果搞不清楚打印日志的目的,为了打日志而打日志,那么很可能在需要日志的时候发现打的日志根本不能用;下面是碰到的一些典型的日志问题:打印过多的无用日志:当出现问题时无法找到想要的日志、无法定位问题;堆栈信息json化:使得日志阅读成本直线.原创 2020-12-10 23:42:47 · 258 阅读 · 1 评论 -
zipkin:实现zipkin-spring-boot-starter(三)
本篇文章主要讨论如何基于Spring容器和springboot starter的能力简化开发者集成链路跟踪的流程原创 2020-07-18 20:18:09 · 720 阅读 · 0 评论 -
通用状态码设计
背景在企业中,一个对外发布的产品一般会涉及到好几个部门、不同人员开发的系统。每个部门甚至每个人开发的系统的返回码体系可能都是不一样的,比如:A系统把系统返回码都放在SystemAResultCode的枚举类中B系统则把系统返回码都放在SystemBResultCode的枚举类中等等系统间不同的返回码会造成:无法设计通用响应数据结构。在rpc调用场景,这一点很重要;无法互操作。...原创 2020-04-23 20:31:24 · 833 阅读 · 0 评论 -
对2b、2c账号体系的思考
2b:to business,对商业(机构);2c:to consumer,对消费者(个人)2b的产品:主要针对机构、企业的产品;2c的产品:主要针对消费者、个人的产品假设你想推出一款针对记者,提高他们工作效率的产品,那么在设计账号体系时需要好好思考这个问题:这款产品它是2b还是2c的不要小看这个问题,这个问题的答案会决定这个产品的账号体系的结构,以及账号体系后续的可扩展性。有这么严...原创 2019-10-13 22:50:00 · 1129 阅读 · 0 评论 -
OAuth2的四种模式
现在的互联网流量入口基本上被几大巨头(BAT、TMD)所把持,对于新上线的应用获取用户比较快捷的方式就是通过OAuth2协议接入它们的账号系统。降低用户注册&登录成本,是大部分新上线应用的选择。比如前段时间吵得沸沸扬扬的抖音滥用腾讯系(微信、QQ)用户信息(头像、昵称)事件,就是因为抖音上线时通过OAuth2接入了腾讯系的账号体系,后面未经腾讯同意就将用户信息给多闪使用。本文将介绍OAu...原创 2019-10-13 15:30:17 · 3621 阅读 · 1 评论 -
Spring碎片知识
application.propertisehttps://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html原创 2018-12-03 17:26:46 · 289 阅读 · 0 评论 -
从斐波那契数列说起
这段时间在看算法相关的一些东西;因为算法不好连笔试都过不了(哭,其实算法不仅仅是为了笔试面试,更是为了日后在工作中提高软件的运行效率。这让我联想到了前不久看过的一篇文章: 李开复:算法的力量以前没有重视算法,现在都要该还回来啦;斐波那契数列今天看到斐波那契数列感觉很有意思; 斐波那契数列:f(0) = 0;f(1) = 1;f(n) = f(n-1) + f(n-2) n>2;嗯,不是很复杂,原创 2017-03-26 16:47:25 · 593 阅读 · 0 评论 -
关于双重检测锁的一种无volatile实现
上一篇博客中提到双重检测锁的无volatile实现,如何实现呢?那么在这篇博客中来一探究竟吧~原创 2016-12-14 23:36:42 · 675 阅读 · 0 评论 -
从单例模式到Happens-Before
本文主要从简单的单例模式为切入点,分析单例模式可能存在的一些问题,以及如何借助Happens-Before分析、检验代码在多线程环境下的安全性。原创 2016-12-12 22:51:28 · 777 阅读 · 0 评论 -
SpringBoot整合Redis缓存
1. 引入缓存依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <version>2.1.5.RELEASE<...原创 2019-09-29 10:14:20 · 909 阅读 · 0 评论 -
AliyunOSS 上传回调
最近项目需要将文件上传到云服务器上面去,市面上提供云存储的服务商有很多比如七牛云、阿里云、腾讯云等。其实七牛云挺不错的,有10G的免费存储空间,如果是自己使用完全够了~但是我们还是选择了阿里云的对象云存储,为什么呢?主要有以下几点考虑:作为国内领先的云服务提供商,稳定性以及服务体验绝对是数一数二的。比如我之前的一个经历:前段时间我需要将自己的域名与云存储提供的默认域名绑定以实现通过自己的域名...原创 2016-11-27 12:09:02 · 4307 阅读 · 5 评论 -
如何创建一个不被回收的对象
如何创建一个不被回收的对象? 有同学问我。最近在看JVM的我很快想到了四种引用,并回答他:只需要保持始终有一个强引用引用它就行了。那么谁来引用这个对象呢?如何保证引用这个对象的对象不被回收呢?确实,好像我们创建的对象都避免不了被回收的命运,不管引用链再长被回收只是时间长短问题。但是真的没有不被回收的对象吗?答案肯定有,我们细想一下,对,$JAVA_HOME中的类的对象(下文简称home对象)不会被原创 2017-03-02 16:49:49 · 1939 阅读 · 0 评论 -
ConcurrentHashMap(JDK1.8)为什么要放弃Segment
今天看到一篇博客:jdk1.8的HashMap和ConcurrentHashMap,我想起了前段时间面试的一个问题:ConcurrentHashMap(JDK1.8)为什么要使用synchronized而不是可重入锁?我想从下面几个角度讨论这个问题:锁的粒度 首先锁的粒度并没有变粗,甚至变得更细了。每当扩容一次,ConcurrentHashMap的并发度就扩大一倍。Hash冲突 JDK1.7原创 2017-04-15 16:14:07 · 21839 阅读 · 15 评论 -
2017,值得记录的事情
2017,对我来说是非常重要的一年,有太多太多的第一次,有太多太多的事情值得我记录、去回忆。本篇博客无关技术,只有生活。记录一下,2017年值得记录、有意义的事情。按照时间线四月份 拿到新华智云实习offer。面试很很多家公司,除了阿里,其他公司基本上都拿到了实习offer。 第一次来杭州,第一次西湖骑行五月份 八卦田报道,公司第27号六月份 领到第一笔工资七月份 乐佳国际报道,拥原创 2018-01-01 22:14:20 · 782 阅读 · 0 评论 -
SpringBoot 返回html
最近需要SpringBoot直接返回html、js等静态资源文件,在网上找了很久没有解决我的问题。 网上大部分的教程基本上都是关于模板框架的,如TheamLeaf,而我并不需要这个。终于找到一篇博客,解决了我的问题:地址。趁机也记录一下spring boot既然是一个为了简化配置的框架,那么自然而然的应该想到我们只要把静态资源文件放在特定的地方就行了。step1通过IDE...原创 2018-04-01 18:27:28 · 812 阅读 · 0 评论 -
ffmpeg: hls 转流 rtmp
最近遇到一个需求,需要将hls协议的直播流转换成rtmp协议的直播流; 在网上找了很长时间,没有找到相应的技术文章, 最后leader给了一个终极命令搞定:ffmpeg -i http://test.com/index.m3u8 -vcodec libx264 -vb 800k -acodec libfaac -ab 64k -f flv rtmp://test.com/appNam...原创 2018-04-27 21:33:43 · 2226 阅读 · 3 评论 -
javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
问题前两天一个学弟在群里面问一个问题:请问一下用阿里云服务器发送https请求为什么会失败,是需要有些其他什么配置吗?同样的代码本地可以访问https接口,服务器不行,而且服务器可以访问http接口。用的HttpsURLConnection觉得挺有意思,就叫他把请求的URL给一下,然后我在机器上用curl命令测试了一把: 发现报了与ssl有关的错误,我推测可能与https证书...原创 2018-05-23 11:37:02 · 5308 阅读 · 0 评论 -
FFmpeg碎片知识
命令保存m3u8视频为mp4ffmpeg -i 'http://xxx.com/a.m3u8' -vcodec copy -acodec copy -absf aac_adtstoasc output.mp4m3u8转推rtmp切割视频原创 2018-12-06 11:14:50 · 239 阅读 · 0 评论 -
利用TP-Link TL-SG2005进行网络抓包
最近遇到需要分析某个网络设备的网络请求的需求,而这个设备可以认为是一个黑盒:无法从内部分析这个设备的网络请求,只有从外部的网络连接中想办法。于是乎,搞到了一个TL-SG2005网管交换机去解决这个问题,就是这个东西:这个交换机既可以当做标准的交换机去使用,也可以用作端口监控。而现在我就要使用它的端口监控功能,它可以让任意的端口收发的数据包都复制一份到指定端口,然后在使用WireShark这...原创 2019-01-14 23:39:24 · 15087 阅读 · 1 评论 -
从单例模式到HappensBefore
目录双重检测锁的演变过程利用HappensBefore分析并发问题无volatile的双重检测锁双重检测锁的演变过程synchronized修饰方法的单例模式双重检测锁的最初形态是通过在方法声明的部分加上synchronized进行同步,保证同一时间调用方法的线程只有一个,从而保证new Singlton()的线程安全:public class Singleton { ...原创 2019-04-24 09:11:12 · 203 阅读 · 0 评论 -
I/O 模型与Java
学习I/O模型之前,首先要明白几个概念:同步、异步阻塞、非阻塞这几个概念往往是成对出现的,我们常常能够看到同步阻塞,异步非阻塞等描述,正因为如此我们往往在脑海里面是一个模糊的概念 - “哦,他们是这个样子啊,都差不多嘛”。我刚开始接触IO知识的时候,也存在上述的问题,分不清他们的区别。随着学习的深入,渐渐来到了痛点区域 - 不弄懂全身感觉不舒服,非弄懂不可。同步与异步 描述的是用户线程与内核原创 2016-11-27 11:35:54 · 593 阅读 · 0 评论