自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

孔令宽的专栏

形而上者谓之道,形而下者谓之器

  • 博客(162)
  • 资源 (2)
  • 收藏
  • 关注

原创 关于Vertx Session处理的坑点避免

vertx的sessionHandler在使用集群sessionStore的时候 ,刷新本地session到最终sessionStroe的时机是:即:在每次响应结束的时候(调用response.end())触发这个回调函数,这个回调调用flush来将本地的session数据刷新到sessionStroe。如果不熟悉这个处理流程,很可能在开发业务处理handler的时候进入坑点: 如果在业务处理Handler中先执行了response.end()然后又往session中put了数据,就会导致put

2021-01-27 15:47:19 478

原创 论人的劣根性

一个乞丐 你看他可怜 每天给他钱 然后哪天不给了 他就会心生怨气 认为你不地道一个明星 长期无偿资助贫困儿童 哪天不资助了 他反而会反过来咬你一口 黑你亲朋好友 有过的不好的经常向你借钱 哪次你不给了 保证亲戚朋友关系就断了工作上经常积极干活 哪天不积极了 事就来了同事之间 经常帮别人解决问题 哪天不帮忙了 事就来了。。。随着年龄的增长 越来越觉得一项本领特别重要:就是遇事沉住气 看透说不透因为 太容易看穿人的内心反而特别容易得罪人 沉不住气就容易闯祸 切记!~...

2020-12-24 09:11:45 603 4

原创 吐血加死一窝脑细胞--记录vertx3版本框架bug发现和解决策略

场景:http流代理精力和代价: 三天一夜 无数调试和尝试问题发现:对于tomcat等目标服务器,如果尝试用post文件流的形式尝试访问一个简单的get请求的小文件,比如localhost:8080/tomcat.png,现象会是怎样呢?尝试如下过程得出结论:1 通过postman发起一个大文件流给tomcat,可以立马得到响应,多次发起多次响应没任何问题,看不出任何端倪,监控磁盘也没有发现有大的磁盘IO,初步结论,tomcat不会收取大文件流2 通过自己写httpclient post一个

2020-09-20 12:16:08 453

原创 过滤器、拦截器、controllerAdvice和aop的介入点 (图片参考自网络)

区别:1 实现机制不同、aop基于动态代理等技术:运行时动态生成class。过滤器拦截器等基于责任链设计模式,其中可能用到反射来增加灵活性。2 灵活性(拦截粒度)不同,过滤器和拦截器基于url匹配,粒度较粗,aop可以拦截一切,粒度最细。如何选择:根据粒度和业务实现难度来选择,需要全局拦截的情况,优先选过滤器,控制器方法级别的拦截优先选拦截器。拦截一切选择aop...

2020-06-28 17:53:37 1204

原创 血泪经验之--dubbo客户端泛化调用dubbo服务失败的原因

如果你的客户端dubbo泛化调用代码通过zk注册中心调用dubbo服务端始终返回失败,请检查如下一条可能的原因:dubbo客户端作为消费者是否注册到了zk注册中心上,如过zk注册中心上只有dubbo服务端的注册信息 而没有dubbo客户端的注册信息,那么肯定是调用不到dubbo服务端的。排查dubbo客户端没有注册到zk的原因即可:比如我最终排查到的原因是dubbo客户端项目是自己手动引入的zk客户端相关的jar ,导致莫名原因的注册不上。请换为如下依赖就可:...

2020-06-24 11:23:26 1378

原创 JAVA常用面试题简单整理(持续完善)

1 CAS比较并交换,在硬件CPU层面的指令是lock cmpxchg,lock的含义是通过锁住内存总线或者通过CPU的缓存一致性机制锁住CPU缓存。cmpxchg涉及三个参数:内存中已有的数、要比较的数和要更新的目标数, 含义是内存中已有的值和和要比较的值进行比较,如果相等则将内存值更新为要更新的目标数,并返回更新后的值,否则不更新内存值,直接返回内存值。通过lock操作给总线或者缓存加锁在硬件层面保证了这个指令在多核并发情况下的原子性。 一句话总结下:这个指令在硬件层面实现了对内存字“读改写”操作.

2020-06-07 15:48:14 140

转载 Docker的网络模式和如何跨主机通信(转载链接)

https://blog.csdn.net/smooth00/article/details/82842234?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecas

2020-05-25 18:58:32 179

原创 关于数据库设计的几点总结(持续完善)

一、 主键问题:# 主键一定不要采用有具体意义的业务字段,为啥就不用说了,记住就行。# 主键选择策略如果采用long型数据库自增主键,在数据库迁移的时候会出现主键冲突,但是插入和查询效率比较高如果采用string型guid做主键,数据库迁移不会出问题,但是插入和查询效率比较低所以应该采用long型的程序生成的全局唯一id,数据库迁移不会有问题,又保证了效率,具体如何生成,由程序侧实现(怎么实现就不说了)二、字段问题:数据库字段,能少就少,尽量简洁,原则是:必要的配置项才用一个字段

2020-05-21 09:21:35 283

原创 maven终极解惑

经常用maven,你觉得对maven够熟悉吗?作为一个java构建和依赖管理工具,相信大家只是用用,很少会系统的找本书学习,我也一样,从来没有系统的学习过maven,这就导致了有些地方,尤其是多模块的项目,不在实际应用中发现和解决问题,总会有一些迷惑点会让你走不少弯路的,本篇是结合我实际趟过的疑惑点的几个关键点总结。一、 maven的作用总结,只有两点:1 从源码到构件期:编译源码产生构件(这个过程只是编译本工程的源码,不会涉及到运行时的依赖处理!)2 项目打包器: 打包成可运行的应用包时,会级

2020-05-14 10:29:25 184

原创 公众号开发要点流程设计思路总结

1 授权方案场景:一个公众号的多个菜单可能对应后端多个不同的服务(多个服务是物理分离的)问题点: 微信公众平台要求code授权回调地址只能是一个特定的域名或者路径,最多能配置两个,如果多个服务分布在不同的域名下,只能由其中一个接收授权code解决方案,做一个公共的授权码转发服务,不同域名下授权码接收接口通过授权码转发服务来转发,即 二次重定向方案,把微信重定向url中的code参数以及state参数重新拼接到目的重定向接口后进行二次重定向即可。2 授权回调接口发起的时机问题场景: 发起时

2020-05-09 08:50:15 2428 1

原创 tomcat web.xml配置default servlet的坑点

defalut servlet 一般用来静态资源如果有按不同的静态资源子目录分别单独配置default servlet的需求,只配置具体子目录的静态资源映射 而不重新配置默认的'/'映射就会导致tomcat默认的'/'映射失效,从而无法访问 “/”默认配置的静态资源。解决办法,从新在web.xml中显示声明“/”默认映射 。如下: <!-- 映射路径 --> ...

2020-04-26 10:26:00 1093

原创 JDK 自带 HttpURLConnection 实现简单HTTP代理服务器

自己撸的透传方式全代理实现HTTP请求和响应的代码 分享给有需要的人,代码不解释了,自己看,亲测可以代理,包括下载大文件。public class UnionPayProxyServlet extends HttpServlet { private String pathPrefix; private boolean includePathPrefix; priv...

2020-04-16 14:54:05 433

原创 30岁的自我总结-应该牢记于心的三条准则

一 、做事实事求是 曾经无知,偶有狂妄自大,吃了不少这方面的亏二 、对未知保留敬畏之心 岁月不饶人,年龄大了,世界已经很多东西不再属于我们这代人,不是所有的东西都可以被理解和认识,只有认清现实,对陌 生的东西保持敬畏之心,才能砥砺前行 走的更远三 、能屈能伸,懂得服软,不撞南墙不回头只会头破血流 人生来就有思维上的bug,比如赌博,越赌越...

2020-03-25 23:20:44 444

原创 记第三方平台模式下开发版小程序网络通,体验和生产版网络不通的问题

首先说明,本文所说的问题是很诡异的,具体原因还没有调查出来,但是根据我的改动方法,确实生效了,留给遇到同样情况的小伙伴。基于uni-app开发的小程序,对于开发版小程序网络请求可以发出 但是体验版网络请求不通的情况:普通非第三方平台模式开发的小程序 只要保证体验版必须是https 然后url正确即可,一般也不会用到ext.json,但是对于第三方平台模式开发的小程序,很常见的需求是将每个要...

2020-02-28 16:13:17 1223

原创 源码分析方法

前言: 人可以不聪明,但是必须掌握做事的方法,方法论就是经验者总结出来的做某件事的通用规律和策略。本篇讲解分析源码和框架方法论,有了合适的方法论做为指引,外加自己刻苦和努力,相信世上无难事,分析源码会事半功倍。我所总结出来的源码分析方法其实很简单,总结而来就是:静态分析+动态分析 。其中,静态分析就是对代码的未执行阶段进行分析。说白了,就是分析一个工程的源码期,不涉及代码在执行阶段的表现。...

2020-02-24 00:51:54 1453

原创 从spring到springcloud脉络梳理(1) 开篇

随着spring系列框架发展的越来越好 越来越快 个人觉得有必要梳理一下核心脉络 首先虽然我有很多年工作经验 但是从来没有系统的学习过spring系列的框架 甚至没有看过一本完整的书籍 以前的时代 感觉spring用用就够了 但是现在时代的发展 从springboot 到 springcloud 框架越来越复杂 用的地方也越来越多 没有系统的梳理一下spring系框架 应用起来越来越捉...

2020-02-23 21:50:00 249

原创 人生感悟之——因果关系

2020年了 31岁 算是步入中年 偶有感悟 记录在案 待来年回头印证近年来的感悟是 做事踏踏实实 实事求是很重要 有一是一 适当夸大我自己的能力是可以 但是夸的太大 未来的某一天我会付出代价:至少夸大的部分我需要花费足够的时间的努力来补足,如果我什么都不做 那么我就会每天生活在诚惶诚恐之中,就像一个犯事在逃的罪犯,内心得不到平静,这种感觉很可怕 迟早我会行动起来 来弥补因种下的果。我常...

2020-02-19 11:56:53 2178 1

原创 简记跨站请求伪造攻击防范

1 CSRF简单描述用户在已经登录了我们自己的网站后,又被钓鱼点击了包含对本站有跨站请求伪造意图的网站,该网站返回的页面中包含对我们网站的恶意表单提交请求,由于用户在我们网站已经是登录状态,恶意表单提交的时候会带上我们的cookie,如果我们的后端不做防范的话,该恶意表达提交会被我们的服务误认为是正常的表单提交,进而导致危险的后果。2 CSRF能成功的本质原因本质原因是# 对任何指...

2019-12-27 19:58:25 138

原创 记实践中得出的血泪经验

1 前端浏览器端base64编码的数据经过url编码后传到后端可能会有变化 比如+变成空格 导致解码出现神奇数据 后端一定要做必要的字符替换处理2 Tomcat热替换war包对于那些动态加载的依赖jar会不生效,比如加密实现提供者bcprov系列包 猜测原因可能是动态热部署war时 tomcat卸载之前加载的老jar有问题 正确的做法是部署新包后老老实实的重新启停服务器!!!3...

2019-12-11 21:44:42 234

原创 我理解的电压

运动的磁场驱动同种电荷运动,同种电荷之前互相排斥,排斥产生挤压力继而驱动相邻电荷的运动,这种驱动力就是电压

2019-10-08 11:00:35 269 2

原创 关于微服务模式下的服务安全保护思路

在微服务模式下,多个服务关系可能会错综复杂,每个服务单独做安全认证会有代码重复、降低服务开发速度、不符合单一职责原理等弊端,通常选用服务网关做统一认证的方式。下面我说一下通常的解决思路:一、开发用户服务专门管理微服务集群用户信息。二、微服务网关作为用户服务的前置系统,负责微服务用户认证、用户授权、微服务接口权限的管理等功能。三、网关后端的众多微服务只负责具体业务,不负责用户认证和权限管...

2019-09-10 20:24:25 625

原创 孔氏格物篇2--最小路径原则

所谓最小路径原则是指:任何一个新事物,从不了解到了解的过程必然存在一个最小的路径,这个通过这个最小路径,学习阻力最小。大到宇宙小到程序,得此路径必然事半功倍。水便是我们最好的学习对象,遇柔则柔 遇刚则刚 然爆发出的力量却不容小觑。(下篇讲模型化思想)...

2019-04-18 07:23:55 266

原创 孔氏格物篇1--世界是递归的

滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 古今多少事 都付笑谈中开篇: 古人讲格物致知,那么格物到底有没有什么好的方法呢? 世界的奥秘从来不会轻易的展示给人类,所谓圣人也是长期的思考和总结才醍醐灌顶悟道成功,这一系列博文,是我在技术研究过程中对格物方法的一些心得。世界是递归的:从小的级别到大的界别从来不是没有规律可循的。规律存乎于自然,不在于级别,小级别中发现的规律既可以往大级别发...

2019-04-18 07:19:53 317

原创 系统设计之万般皆组件思想

任何系统,都是服务于业务的,所有的业务最终都会被实现为组件,组件可以体现为一个类、一个代码模块、一个包等等。首先我们要分清楚对象实例和类的关系:1 对象对象是和系统的线程模型等架构设计紧密相关的。在系统运行过程中,可能会有许许多多的线程,此外不同的系统的线程模型也不一样,比如有的系统采用单线程reactor模型,这种模型为了保证系统的高吞吐量,可能一个对象只会关联到一个线程来避免多线程...

2019-02-15 14:53:31 263

原创 JAVA执行jar的两种方式的区别

1 java -jar方式2 java -classpath方式上面两种方式不能共存,即不能在指定jar参数的时候又指定classpath参数,原因如下:在没有指定自定义类加载器的情况下,两种方式的类加载器都是AppClassLoader,对于第一种方式:AppClassLoader只会在jar参数指定的jar包中的MANIFEST.MF文件中加载类和依赖jar:Main-...

2019-02-13 11:59:10 1033

原创 跟我学代码架构设计模式之--JNDI基本思想

jndi的基本思想就是接口和实现分离。jndi暴露给用户的API是门面API、是接口,调用门面API的时候,委托给系统提供的JNDI名字管理器来找到相应的jndi上下文工厂来实例化具体的jndi上下文对象,这个时候门面上下文就完成了初始化---即和实际的jndi上下文对象完成了绑定。此后用户通过门面API完成的对象lookup等操作都实际委托给了实际jndi上下文对象。说白了,java提供的J...

2019-01-31 10:13:41 145

原创 跟我学代码架构设计模式之--再次理解同步IO和异步IO

先虚拟一个硬件IO的例子做比喻:1 同步IO:有这么一个硬件设备,该设备可以用来存储数据,但是设备本身不具备自己的CPU,所有的数据读写操作都只能靠计算机的主CPU来完成,这样的读写相对与主CPU来说就是同步IO。2 异步IO:有这么一个设备,该设备可以用来存储数据,和1中不同的是,该设备具备自己的CPU,具有一定的自主性,当设备的数据可读时可以向主CPU发送事件通知来完成读,当主CPU将...

2019-01-29 21:31:15 229

原创 跟我学代码架构设计模式之--命令式编程、流式编程、异步、同步、阻塞非阻塞概念理论大一统

一直以来各种编程概念充斥于耳-命令式编程、流式编程、函数式编程、异步编程、同步编程、阻塞编程、非阻塞编程、reactor模型、、潜意识里我总觉的这些概念之间有关联又没有关联的样子,今天我总于有所领悟----它们之间是围绕着一个理论基础的!!!即---数据推拉模型的不同!!! 看本文之前请先看我上篇文章,我的观点如下:首先命令式编程是数据“拉”模型,我们的业务代码要负责数据的拉取,然后处理,...

2019-01-29 16:56:01 304

原创 跟我学代码架构设计模式之--命令式编程和流式编程区别分析

随着计算机技术的发展,传统的命令式编程方式在解决某问题上变得捉襟见肘,流式编程有着天然的异步属性,适合用在做IO等高高吞吐量的场景下,本文我来简单分析下两种编程模型的区别。 一、数据驱动方式不同命令式编程是业务代码驱动数据的方式,即数据的流动是我们的业务代码主动驱动的。一旦没有业务代码驱动,数据是不会流动起来的。我们也可以理解为数据"拉"模型,我们的业务要主动的取数据来完成业务计算和数据加...

2019-01-29 16:09:21 532 1

原创 跟我学代码架构设计模式之--异步编程拥塞控制

前言:传统同步阻塞编程模型中,我们最关注的问题是线程不够用,即没有充分利用计算资源,到了异步编程模型中,我们的线程资得到了充分的利用,但是我们要开始关心内存资源问题了,所以我们要在设计系统的时候做好拥塞控制,避免内存OOM的发生。这里额外的说一下:一说到同步异步编程,我们很容易的和IO尤其是socket的阻塞非阻塞联系起来,原因是明显的:传统的同步编程模型,阻塞线程的部分基本都是做IO的时候导...

2019-01-29 10:57:45 175

原创 跟我学代码架构设计模式之--高并发高吞吐模型演变

高并发、高吞吐是我们追求的目标,最大化压榨单机的性能来达到更多更快的服务。首先说下,为什么会有这么多模型演变,本质原因是因为操作系统底层提供的线程模型不够牛逼,不能满足我们的服务需求!模型演变如下:第一代:操作系统线程无限开模型基本原理是业务请求来了以后直接开启一个线程进行后台处理,业务中包含阻塞等待的时候,直接挂起操作系统线程。这种模型的缺点是明显的,本质原因是操作系统的线程...

2019-01-27 11:21:47 400

原创 跟我学代码架构设计模式之--服务高并发高吞吐架构设计基本原理

首先我说的设计是指的最大限度提高单机单节点的服务吞吐和并发。我们设计一个服务器程序,自用户层-&gt;业务实现层-&gt;操作系统层,我们要明确的前提或限制有如下:1 服务程序要保证高吞吐量!服务程序要为用户服务,应该尽可能多的接收和处理用户的业务处理请求2 对于每个业务处理,业务层面的等待和阻塞不可以避免!(因为业务上获取任何资源数据都是需要时间的,比如数据库访问)3 在操作系统...

2019-01-26 10:45:40 476

原创 跟我学代码架构设计模式之--瘦API和胖API

“胖瘦API”名词是我自己起的,用来表达如下的含义:瘦API是单纯的等待被调用的一个函数代码片段,瘦API一旦被调用就做为当前线程执行的代码片段执行,执行完毕后API的生命周期就结束了,瘦API不涉及多线程的切换。胖API也可以说成是客户端API,通常指的是一种作为控制器、调度器、门面的一种API,这种API底层通常会有自己的线程池和业务类完成复杂的任务,或者说这种API带有底层引擎支持,...

2019-01-20 00:25:57 369

原创 跟我学代码架构设计模式之--高并发服务器应用层协议栈设计要点

要设计一个高并发的服务器,应用层协议栈应该满足如下设计思路:协议栈要分成底层、中层、和高层,线程要分为IO线程和业务线程:一、底层连接要采用NIO多路复用、事件通知二、中层要完成原始TCP数据流到业务层消息的协议编解码三、高层负责上层业务消息分发和收集(读和写)要完成:提供上层读写API和事件通知、提供底层连接状态获取相关的API 提供IO线程和业务线程之间的切换,比如读AP...

2019-01-16 16:53:55 237

原创 跟我学代码架构设计模式之--谈网络协议的设计和吞吐量的关系

首先谈几个名词: 协议设计 、IO阻塞与非阻塞、业务阻塞与非阻塞、协议处理吞吐量首先,IO的阻塞与非阻塞其实和协议的设计没有任何关系,任何协议,包括HTTP协议其实都可以设计为IO阻塞模型和非阻塞模型,比如传统的servlet模型就是IO阻塞模型,如果抛弃servlet,用NIO的多路复用完全可以实现一个IO非阻塞的HTTP协议模型。业务的阻塞非阻塞指的是业务层面上是不是需要用户等待结果的...

2019-01-16 16:01:22 279

原创 跟我学代码架构设计模式之--简单的对象和线程关联关系分析要点

并发编程尤其是异步并发编程,脑中必须要有对象在内存中的清晰分布图景以及对象和线程的关联关系分布图景。要想掌握异步编程,我的观点是:要以业务对象为中心,分析对象和线程的关联关系!!!!!!!!!因为即使是异步多线程编程,最终的业务流程流转也是以对象为中心的,比如说多线程间消息的交互,本质上也是对象间的相互作用!根据我的总结,一般需要掌握如下几点关系:1 对象的创建者是哪个线程。2...

2019-01-13 13:46:09 246

原创 跟我学代码架构设计模式之--孔氏并发定理

前言:并发的根本是减少线程阻塞等待的时间,有两种阻塞:一种是业务上的代码架构设计导致的状态共享加锁导致的阻塞一种是对特定资源的等待导致的阻塞。只有同时避免了两种阻塞等待,才能达到真正的并发最大化!一、如何取消状态共享锁导致的阻塞。角色:特定时间段、 线程、状态(只读状态数据、可脏写状态数据、安全状态数据)状态指的是堆区数据,按业务特征可以分为:只读状态数据、可脏写状态数...

2019-01-12 11:37:02 203

原创 跟我学代码架构设计模式之--从操作系统到应用层面看如何高并发

一、应用层使用操作系统层面的多线程来做高并发通过线程和定时器实现任务切换。本源思想是每个线程执行一个业务代码1 业务代码阻塞的时候业务代码主动让出CPU2 通过硬件定时器中断CPU,强制剥夺线程的CPU执行权缺点:应用程序使用这种方式来高并发必须要开N多个线程,虽然通过业务让出CPU执行并没有浪费CPU时间,但是操作系统层面每个线程都维护了一个线程上下文:首先,每个线程...

2019-01-08 10:59:06 405

原创 跟我学代码架构设计模式之--关于对等分布式计算模型的设想

先说明下,我自己也没有专门研究过分布式计算相关的详细资料,这里我只是给出我对分布式计算的一种设想模型。首先,要想做分布式计算,我认为应该有如下几点要求:1 利用函数式编程的思想,把计算逻辑封装成“流式函数管道”或者说“计算流”,这个流设计为接收消息作为唯一的输入,流内部可以有状态数据,流中的函数在执行过程中可以改变流内部的状态数据作为计算的中间结果,函数流执行完毕后返回唯一的输出。根本原则...

2019-01-03 15:44:31 390

原创 跟我学代码架构设计模式之--分布式系统的本质

首先,分布式系统也是计算机软件应用系统。那么一个计算机软件系统普遍应该有哪些部分组成呢?1 计算资源,体现在系统中就是线程资源,线程池。2 存储资源,体现在系统中就是内存存储或者磁盘存储。3 连接器,即socket,几乎所有的对外提供服务的系统,都通过socket和外部系统打交道。4 共享数据资源,这里的共享数据资源指的是用来协调其他资源的配置信息等,在非分布式的系统中,一般共...

2019-01-03 11:19:52 170

_病毒-病毒原理.pdf

关于各种病毒的原理的介绍 及其使用的不同的技术介绍

2010-09-03

用C语言读取磁盘文件代码

用c语言读取磁盘文件代码 用c语言读取磁盘文件代码

2010-08-27

空空如也

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

TA关注的人

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