首页
学习
活动
专区
工具
TVP
发布

啥都有的专栏

专栏作者
22
文章
11706
阅读量
15
订阅数
简化markdown写作中的贴图流程-windows版
内部过程: 通过截图工具截图后,图片是保存在windows的剪切板中的,通过AutoHotKey监听按键,触发按键时启动脚本运行Java程序,Java程序将剪切板中的图片上传到指定图床,然后得到该图片在云平台的url,将url加工后(构造成markdown识别的图片url)复制到剪切板,然后ctrl+v即可。
topgunviper
2022-05-12
5310
java基础系列-单例详解
单例模式是我们平时经常遇到的设计模式之一,它是一种对象创建模式,用于产生对象实例,确保一个类只实例化一次。这带来的好处是显而易见的,频繁的new操作,会带来新建对象造成的系统开销,尤其是一些重量级对象更是如此。 下面是单例模式的基本结构图:
topgunviper
2022-05-12
1820
Reactor模型-多线程程版
在Reactor单线程版本的设计中,I/O任务乃至业务逻辑都由Reactor线程来完成,这无疑增加了Reactor线程的负担,高负载情况下必然会出现性能瓶颈。此外,对于多处理器的服务器来说,单个Reactor线程也发挥不了多CPU的最大功效。下面我们对之前单线程版的Reactor进行改进。
topgunviper
2022-05-12
2850
Reactor模型-单线程版
Reactor模型是典型的事件驱动模型。在网络编程中,所谓的事件当然就是read、write、bind、connect、close等这些动作了。Reactor模型的实现有很多种,下面介绍最基本的三种:
topgunviper
2022-05-12
4970
rpc系列5-添加拦截器链,实现rpc层面的AOP
首先,拦截器的作用很强大,它提供RPC层面的AOP功能,比如进行日志记录,rpc调用次数统计,service提供方添加白名单等等。在平时的学习过程中,很多框架都会实现这样的功能,比如:Servlet中的Filter,Struts中的Interceptor,Netty中的PipelineChannel和ChannelHandler,Tomcat中的Realm等等。这其实是软件可扩展性的一种体现,那么我们的rpc框架必须也要紧跟时代潮流!
topgunviper
2022-05-12
3650
rpc系列4-处理超时场景.及提供hook
这就涉及到一个调用超时的问题,平时我们应用中很多场景都会规定超时时间,比如:sql查询超时,http请求超时等。那么如果服务端方法执行的时间超过规定的timeout时间,那么客户端就需要调出当前调用,抛出TimeoutException。
topgunviper
2022-05-12
3210
rpc系列3-支持异步调用,提供future、callback的能力。
谈到异步,我们首先想到了Java提供的Future机制,Future代表一个异步计算结果,提交一个任务后会立刻返回,通过future.get()方法来获取计算结果,该方法会阻塞当前线程,直到结果返回。使用形式如下:
topgunviper
2022-05-12
4310
rpc系列2-提供上下文RpcContext
实体域就是应用中抽象出来的组件,如Spring中的Bean,Mybatis中的MappedStatement等。会话域代表着一次交互过程,如Mybatis中的SqlSession,而服务域就是组件的功能集,负责会话域和实体域的生命周期管理,如Spring的ApplicationContext,Shiro的SecurityManager等。
topgunviper
2022-05-12
6880
rpc系列1-10 minute Tutorial
最近在网上看到阿里巴巴2015年的中间件性能挑战赛的一个题目,实现一个简单的RPC框架,于是乎有一种冲动实现一个简单的rpc,要求基本按照竞赛题目的要求,具体如下:
topgunviper
2022-05-12
1920
juc系列-CopyOnWriteArrayList
CopyOnWriteArrayList是一个ArrayList线程安全的变体。当数组内容有所变化时,拷贝一份新的出来,在新对象上进行修改操作,完成后把新对象引用赋值给array属性。每发生一次改变,就需要复制一份数据,这样复制是需要一定开销的,所以CopyOnWriteArrayList适合读操作远大于修改操作的情况中。
topgunviper
2022-05-12
3070
juc系列-并发Queue
ConcurrentLinkedQueue是一个基于链表结构的无界队列,提供了Queue的基本特性FIFO,出入规则是:从head出,从tail进。非阻塞特性使其在高并发环境依然能有出色的性能。
topgunviper
2022-05-12
2390
juc系列-ConcurrentHashMap
ConcurrentHashMap和HashMap一样都是基于散列的容器,ConcurrentHashMap可以认为是一种线程安全HashMap,它使用了一中完全不同的加锁策略提高并发性和伸缩性。 ConcurrentHashMap并不是将每个方法在同一个锁上同步并使得每次只能有一个线程访问容器,而是使用一种粒度更细的加锁机制来实现更大程度的共享,这种机制称为“分段锁”。
topgunviper
2022-05-12
3170
juc系列-Executor框架
ThreadPoolExecutor是jdk提供的线程池的服务类,基于ThreadPoolExecutor可以很容易将一个实现Runnable接口的任务放入线程池中执行,下面是ThreadPoolExecutor实现:
topgunviper
2022-05-12
3140
Spark:Dynamic Resource Allocation【动态资源分配】
用户提交Spark应用到Yarn上时,可以通过spark-submit的num-executors参数显示地指定executor个数,随后,ApplicationMaster会为这些executor申请资源,每个executor作为一个Container在Yarn上运行。Spark调度器会把Task按照合适的策略分配到executor上执行。所有任务执行完后,executor被杀死,应用结束。在job运行的过程中,无论executor是否领取到任务,都会一直占有着资源不释放。很显然,这在任务量小且显示指定大量executor的情况下会很容易造成资源浪费。
topgunviper
2022-05-12
1.3K0
Hadoop Delegation Tokens详解【译文】
本文是cloudera公司的一篇技术博客,原文地址: Hadoop Delegation Tokens Explained
topgunviper
2022-05-12
1.6K0
Hive Format异常分析
本文已上述的错误为切入点,分析下异常原因以及Hive相关的关于Format的异常。主要内容如下:
topgunviper
2022-05-12
6650
图解SSH原理
从1.1节SSH的定义中可以看出,SSH和telnet、ftp等协议主要的区别在于安全性。这就引出下一个问题:如何实现数据的安全呢?首先想到的实现方案肯定是对数据进行加密。加密的方式主要有两种:
topgunviper
2022-05-12
5710
万年漏洞王Struts2是如何炼成的
17年三月份,Struts2再一次被爆出一个严重的漏洞S2-045,上传文件时可能存在RCE(Remote Code Execution)。由于涉及到的文件上传模块(Jakarta Multipart parser)是Struts2的默认配置,所以这一漏洞影响范围非常广泛。上一次影响范围如此大的漏洞是13年的s2-013。而且从Struts2的Security Bulletins列表中可以看到,remote command execution和Remote Code Execution这样的字眼经常出现,这篇博客在分析最近这次漏洞原理的基础上,也会探究一个重要的问题:为什么Struts2总是出现漏洞?
topgunviper
2022-05-12
2410
ThreadLocal案例分析
要理解为什么需要ThreadLocal就不得不从线程安全问题说起。高并发是很多领域都会遇到的非常棘手的问题,其最核心的问题在于如何平衡高性能和数据一致性。当我们说某个类是线程安全的时候,也就意味着该类在多线程环境下的状态保持一致性。
topgunviper
2022-05-12
4250
Web开发中的中文乱码问题
本文主要是围绕Web开发中涉及到的中文编码这一常见问题展开,包括了对字符编码基础理论的简述以及常见几种编码标准的介绍。其中包括:ASCII、ISO8859-1、Unicode、GBK。下面先对这些字符编码集进行简单的介绍。
topgunviper
2022-05-12
1.6K0
点击加载更多
社区活动
腾讯技术创作狂欢月
“码”上创作 21 天,分 10000 元奖品池!
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档