自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zollty的专栏

分享知识,分享经验,个人博客:http://blog.zollty.com

  • 博客(326)
  • 资源 (2)
  • 论坛 (3)
  • 收藏
  • 关注

原创 再次强调我写博客的目的

各种问题、技术问题,我相信我都能解决,但是真的很累,要百度半天,测试N种方法,只要我弄懂了、做好了,就可以花很短的时间把这个方法告诉别人,别人就可以节约90%的时间。写博文是体力活儿,我的本意只是想分享一些知识,我从互联网上学东西,“有借有还”,也得回报一下大家!

2012-08-25 11:13:50 1716 5

原创 自动化测试的思考及其工具的设计

一方面是接口单元测试。所有Rest/Dubbo等API都要做单元测试,输入、输出,标准化。输入示例: { "m": "put", "t": 1, "u": "http://localhost:6680/test/nodepd/a003", "b": "{\"a\":12,\"b\":2}" }, { "m": "get", "t": 0, "u": "http://localhos...

2021-01-18 09:40:12 96

原创 通用API数据结构及错误码设计规范

一、前言1、设计“标准错误信息结构”的背景和意义考虑到如下几个方面:1)便于使用方(大众用户)知道错误的原因2)便于使用方(程序 或 程序员)知道错误的原因3)便于知道错误的原因,以及可能的排查和恢复措施4)知道错误的类型,便于对其进行监控(分类和统计)或者 触发特定动作设计策略:首先考虑2)3)4)。针对于 面向 程序处理 或者 程序员使用的数据,跟 面向于 普通大众用户的数据,其错误码(code)和错误信息(msg)的设计可能是有...

2021-01-18 09:31:44 471

原创 Spring Web请求处理流程及Filter源码分析

一次Web HTTP请求后端执行的完整流程,原始数据 如下(Spring v5.2.6): at io.fbank.hilo.app.component.ControllerRequestLogInterceptor.preHandle(ControllerRequestLogInterceptor.java:52) at org.springframework.web.servlet.HandlerExecutionChain.applyPreHandle(HandlerExe...

2021-01-18 09:25:08 127 2

原创 正确采取Xss攻击防御措施

灵魂拷问:到底怎么做防XSS攻击才是最佳方案?网上那些拦截器方案靠谱吗?Xss攻击说明:1、攻击者准备 恶意html/javascript代码片段,该代码最终会被嵌入到被攻击服务器加载的页面上。2、恶意html/js代码,在用户不知情的情况下被执行,以该登录用户的身份执行敏感操作或获取敏感数据后发送给攻击者。举例如下: 有个文章编辑页面,可以编写任意html/js代码。攻击者在里面嵌入了恶意js。 文章被提交保存后,下次显示出来时,执行该恶意js,从而获...

2021-01-13 11:28:37 327

原创 中间件的定义

前言 近日,与多人交流中,我发现了一个问题,很多人根本就不懂什么是中间件,哪些是中间件、哪些不是,他们区分不了。 所以,我查阅了很多外文资料,包括Oracle、IBM等大公司关于中间件的一些描述,做了一个总结和对照。中间件的定义是什么?目前很难给中间件一个严格的定义,国际上各家机构都有不同的定义。我根据很多的定义和普遍的理解,综合了一下:中间件,通常指“应用中间件”,是一种独立的系统软件或服务程序,能“独立部署和运行”,且处于“应用程序”和“基础设施...

2020-12-29 18:04:42 501 1

原创 开发环境设计

前言: 程序员的测试环境和生产环境,都已经从物理机、虚拟机,进化到了自动化部署、容器云平台。 那开发环境,是否也应该改善一下呢?一、背景开发环境怎么能做到一次搭建,永久使用,一劳永逸?甚至还可以快速复制和分享。包括几个方面问题:1、更换电脑或重装系统时,如何快速拥有全面的办公能力、开发能力?通常情况: 各种软件(常用的、不常用的)都得重新安装,包括各种插件、补丁等; 系统配置,软件配置,都得重新来过; 某些软件中的资料、历...

2020-12-29 17:51:42 89

原创 跨域请求Access-Control问题及相关理论大全

本文涉及三个核心知识: CORS 及 HTTP的Access-Control 浏览器的preflight request HTTP的OPTIONS方法的作用 及一个故事(我为什么三个小时没查出CORS失败)先别急,必须来弄懂上面的三个知识。第一个,CORS 及 HTTP的 Access-Control,推荐看下面这两篇文章:CORS:https://developer.mozilla.org/en-US/docs/Web/HTTP/CORSAcc...

2020-12-29 17:45:59 88

原创 程序员是否要懂算法

文/zollty这是一个充满争议的话题。 一部分程序员认为,算法没啥用,就是用来装B的。 也有一部分程序员,认为算法非常重要,不会各种基础算法的程序员就是垃圾。 那么,到底谁对谁错?作为程序员的我们应该把算法摆在什么的位置?或者实际一点,我们准备 应聘 或者 面试别人,是否需要重视算法这一块儿?我试着理性地来分析一下。首先,“算法是计算机科学领域最重要的基石之一”,这一点毋庸置疑。而算法的基础来源于数学理论。 领悟透彻的人,会说,算法是一种思想...

2020-12-29 17:00:38 123

原创 修改jar包文件,重新打包jar

一、网上搜到的下列替换方案都不行:1、直接用WinRAR拖拽替换jar包内文件失败,报错:压缩文件已损坏。我以前替换成功过,但是启动的时候报错。这种方式可能会伤害到jar包的一些标识。2、解压jar包,然后使用jar命令(比如jar -uvf)重新打包失败,能打包,但是以可执行文件(./xxx.jar start)运行时提示:jar: cannot execute binary file最终我用下面方案成功了:将jar包文件解压,导入到maven项目的ma...

2020-12-29 16:43:41 545

原创 Dubbo泛化调用时参数为泛型对象

阿里开源项目就是坑,官方文档(链接)上没有任何说明,只能自己看源代码摸索了。具体方法如下:举例说明,例如: public void add(Pager<User[]> users) // 其中 class Pager { int size; User[] data; } class User { String name; } 传参时这么写: /...

2020-12-29 16:39:47 738

原创 npm全局安装 require报错Cannot find module

npm全局安装 require报错Cannot find module原因:没有设置系统环境变量NODE_PATH,项目内读取不到全局包。解决方案:输入以下命令,查看全局包路径,npm root -gC:\Users\bob-pc\AppData\Roaming\npm\node_modules然后添加一个环境变量NODE_PATH=上述路径。添加后,重启一下console、IDE、系统(依次尝试),我重启到IDE层次就可以,实在不行重启下操作系统。...

2020-12-29 16:36:20 419

原创 FastDFS网络连接问题分析

这是个一般性问题,参见这篇文章的描述:《中间件客户端配置中的域名与IP》先讲解一下FastDFS文件上传的执行流程: 获取trackerServer连接; 向trackerServer发送请求,获取一个可用的storageServer的IP; (请求指令为104,参见TrackerClient.getStoreStorage方法) 注意,每次上传请求,都要重新获取storageServer(以便达到负载均衡等目的)。另外,每次上传请求,可以重新获取tracke...

2020-12-21 16:51:46 219

原创 中间件客户端配置中的域名与IP

问题说明及其背景某些中间件的客户端配置中,会有集群的地址列表(数组),典型的如zookeeper的地址列表:192.168.0.1:2181,192.168.0.2:2181聪明的运维同学,喜欢把它弄成域名,第一种是一个域名解析为多个IP(起到负载均衡作用):zk.if.zollty.com:2181第二种是一个域名解析为一个IP(可以方便修改IP),例如:zk01.if.zollty.com:2181,zk02.if.zollty.com:2181...

2020-12-21 16:49:03 102

原创 数据库IP网络切换问题

方案1:使用域名,解析到IP1,当IP1不可用时切换域名解析到IP2缺点:域名解析有缓存,需要及时更新(参见Java DNS缓存),数据库连接池(包括Redis连接池)需要及时检测连接的有效性。随便说一案例,前不久我们遇到一个Redis客户端Lettuce的一个问题:Redis物理机挂了一个,但是集群节点没有及时同步(Lettuce默认没有启用拓扑刷新),参见:https://blog.csdn.net/qq_45401061/article/details/104263967。方案...

2020-12-21 16:46:16 118

原创 架构师必须懂的设计原则

KISS设计原则:(Keep It Simple,Stupid) 首选简单的代码和体系结构。 避免复杂的抽象。 避免使用魔术代码和奇特的算法。 避免大的外部依赖性。 减少分布式系统中活动部件的数量。 避免自动决策,这可能会损害群集的可用性,一致性或性能。 附:另外,还有 KISS编码原则,参见:https://www.cnblogs.com/yutiansanshou/archive/2012/12/05/2802653.html...

2020-12-21 16:38:19 137

原创 Idea下运行找不到class、找不到jar包(provided test scope)

首先应弄懂Maven的各种Scope,参见《Maven的5种scope》一文。Eclipse和Idea两种IDE对于maven scope的运用不一样Eclipse它会把当前IDE下运行的代码,都当做test环境,所以当前IDE下直接运行程序,能够使用所有scope的jar包(包括test、system和provided)。但是Idea下就不行,idea下只有compile和runtime两种scope的jar才能在main/src下直接使用(在test/src下使...

2020-12-21 16:04:16 296

原创 数据库数据类型对比、数据类型大全

根据各种数据库的官方文档整理如下。一、Oracle表结构移植到Mysql中需要的类型转换MYSQL ORACLEBLOB(220) RAW(220)BLOB(20) RAW(20)BLOG(1024) RAW(1024)VARCHAR(n) VARCHAR2(n)CHAR CHARFLOAT(22,6) ...

2020-12-21 16:01:04 107

原创 我的Dockerfile构建笔记

一、构建Docker镜像# 构建容器 docker build -t 镜像名称 . # 后面的. 指的是当前文件夹 (其实是Dockerfile存放的文件夹) docker build --rm=true -t loen/lamp . –rm 选项是告诉Docker,在构建完成后删除临时的Container,Dockerfile的某些指令(比如RUN、ADD、COPY)会创建临时的Container,这些临时生成的Container可以当做下次或者其他构建的缓...

2020-12-21 15:58:15 47

原创 Dockerfile最佳实践【原创、很多实践经验】

首先,参见官方文档:dockerfile_best-practices有如下几点说明:红色标注的是重点 Create ephemeral containers(构建无状态的容器) Understand build context(理解上下文,不引入多余文件) Pipe Dockerfile through stdin(无需上下文的情况,通过stdin构建) Exclude with .dockerignore(排除context中文件,参见.dockeri...

2020-12-21 15:56:29 563 1

原创 各种Java Web应用服务器对比

官方介绍:Apache TomcatApache Tomcat is an open source software implementation of theJavaServlet and JavaServer Pages technologies and developed by the Apache Software Foundation (ASF).JBoss Enterprise Application PlatformThe JBoss Enterpris...

2020-12-21 15:47:57 179

原创 Spring AOP AspectJ 切面表达式高级用法

一、Spring AOP 配置首先,明白一点,Spring的AOP代理,分为JDK动态代理和Cglib动态代理,这两种代理的实现方式不一样,他们针对同一Aspect的配置效果也可能不一样。 JDK的动态代理,只能代理接口,无法代理非接口的方法。 Cglib动态代理,采用的是继承代理对象的方法,所以可以代理非private的所有方法。 Spring和AspectJ的关系: AspectJ是Eclipse基金会的一个动态代理框架(官方网站为:http://www....

2020-12-21 15:46:02 164

原创 深入理解分布式事务的二阶段提交和三阶段提交

一、“两阶段提交”的架构对于分布式系统,在两阶段提交的架构中,有两种类型的节点:事务的协调者,事务的参与者。两阶段提交的程序执行流程如下:1.请求阶段(commit-request phase,或称 预提交阶段,prepare phase)在请求阶段,协调者将通知事务参与者 “执行本地事务,并做好提交的准备”,然后参与者答复协调者自己的决策:OK(事务参与者本地作业执行成功)或 Fail 取消(本地作业执行故障)。2.提交阶段(commit phase)在该阶段,协调者将综合第...

2020-12-17 15:08:00 247 1

原创 中间件及基础组件交接维护规范

一、说明Ø提交方[研发]:软件开发部Ø维护方[运维]:运维部二、基本交接流程1.交接之前Ø中间件的选型获得包括数据中心在内的评审通过;Ø中间件经过一段时间生产环境的运行和正常流量的使用(至少1个月),表现稳定无较大的问题。在此阶段,主要由研发自己来维护,运维提供协助。2.交接期间Ø提供(适用于当前实际部署情况的较详细的)中间件维护操作手册,以及中间件官方的相关手册或技术资料;Ø提供该中间件的监控告警方案,以...

2020-12-17 15:06:23 170

原创 Tomcat启动卡住、无法访问问题解决思路

现象如下:1、项目启动日志正常,Spring或者MVC框架也正常加载完成。但是对外无法访问,何解?2、Tomcat无法正常关闭,因为shutdown port不可用。只能kill。3、Jstack内容太多,很难查出问题,但基本上可以确认项目所有bean、线程都是正常的。4、注意到一个细节,Tomcat正常启动和奇怪异常之间,日志最后有一点差别:正常启动后,tomcat最后会打印如下 Aug 10, 2020 1:47:03 PM org.apache.coyote.Abstr...

2020-12-17 15:03:13 407 1

原创 The valid characters are defined in RFC 7230 and RFC 3986

针对Tomcat Server报错: “The valid characters are defined in RFC 7230 and RFC 3986”解决方案大全:1、针对于SpringBoot jar启动的项目:直接在yml中配置: server.tomcat.relaxedQueryChars=<,>, [,\,],^,`,{,|,} 2、针对tomcat war包部署的任何项目:修改server.xml文件,如下: <..

2020-12-17 15:01:15 51

原创 解决AJAX在用户登录失效后返回登录页面的问题

后端AJAX API,Session过期,登录失效,直接跳转(redirect)到登录页。(后端Shiro、Spring Security等都支持这个功能) 对于全站AJAX的应用,当然不存在redirect重定向到登录页面的做法(建议直接返回HTTP Code 401),但是对于某些前后端没有分离的应用,当用户session失效时,后端可能会重定向到登录页面。那对于ajax请求,后端重定向后,返回的ajax内容是一个html页面,怎么办呢?总体的思路是在ajax工具的拦截...

2020-12-17 14:58:56 310

原创 Android 更改classloader的libPath

Android 更改classloader的libPath 路径,指定路径加载.so参见:https://www.jianshu.com/p/f751be55d1fb源码如下:https://www.androidos.net.cn/android/1.6_r1/xref/dalvik/libcore/dalvik/src/main/java/dalvik/system/DexClassLoader.javahttps://www.androidos.net.cn/android...

2020-12-17 14:51:54 47

原创 Keycloak前端JavaScript、移动端的使用说明

接上文《Keycloak通用接入手册(以Java为例)》,前面所述的,都是针对于服务器端的接入说明。而现代化的前端技术,已经具备了很强大的native处理能力,很幸运,Keycloak已经提供JavaScript Adapter,它可以用于现代化的前端、移动端APP接入,GitHub上可以找到很多 VueJS、ReactJS、React Native的接入例子。下面以 VueJS APP为例,说明如何接入。主要参考的官方教程:javascript-ad...

2020-12-17 14:47:45 959

原创 Keycloak使用说明(Java Spring Boot)

第一步:在keycloak平台上,新建一个client app联系Keycloak管理员,提供 应用的root url和app name即可。建好client之后,可以得到一个 clientsecret(密匙)。第二步:在client project中 加入 keycloak配置配置形如: #空间名,默认所有app和用户都在一个keycloak空间 keycloak.realm=ops #keycloak服务器的auth地址 ke...

2020-12-17 14:45:04 1424

原创 vscode CRLF自动转LF

解决方法:1、新建 .editorconfig ,放在项目根路径下,我的配置如下; #vscode请安装插件:CTRL+SHIFT+X搜索EditorConfig并安装 #http://editorconfig.org root=true [*] charset=utf-8 indent_style=space indent_size=2 end_of_line=lf ins...

2020-12-17 14:40:45 2879 1

原创 Redis开发使用规范

一、键值设计1、key名设计【基本原则】 key中添加前缀,以示区分,防止key冲突; 控制key的长度,减少无意义的内存浪费; key中不要包含特殊字符(空格、引号、换行符等); 【各项目key命名规范】1、 整体格式整体分为4级:${team}+${project}+${func}+${key}。含义如下表所示: 等级 说明 必须 第一级 战队...

2020-12-03 15:08:53 178

原创 项目多环境配置管理方案

针对常见应用场景,可以分为以下几个方面来考虑注意:本文只针对没有接入统一配置中心、配置平台的情况一、Java服务器端项目1、对于项目的框架或者组件,如果支持编程方式配置,则编程根据不同环境读取不同配置,例如Spring框架、Logback日志库都支持; 1) 如果使用Spring Boot,直接采用官方推荐的配置切换方式:设置spring.profiles.active,可以是jvm变量、main启动参数、环境变量等(建议使用jvm变量); 2) 如果使...

2020-12-03 15:07:04 348

原创 项目日志记录规范和标准

《项目日志记录规范和标准》(第二版2017年10月) 第一版(2013年3月)参见这里。一、说明日志分类如下: 1. 面向问题排查的日志 2. 面向提醒或告警的日志 3. 面向调试和测试的日志 4. 面向功能的 日志(准确的说,这是数据文件,不是日志) 5. 面向人阅读的日志 6. 面向机器解析的日志本规范v1.0,主要针对于上面的1、2、3、5点。对于第2点的告警信息,仅记录日志是不够的,建议配合实时的通知机...

2020-12-03 15:02:12 593

原创 不跟风,容器技术的真实优、缺点

传统虚拟机 和 容器云的 真实 优缺点对比:(本文基于的前提:同样是在DevOps自动化程度很高的情况下。很多时候有人说 容器云平台更先进,那是因为他们传统的模式做得不好,如果把传统的模式做好,不见得比容器化平台的自动化程度低。)1、构建和部署方面传统的方案是: a)使用支持虚机部署的DevOps平台,每个节点安装有agent,可以执行命令、上传文件等做很多事(参见阿里的 云效、StarAgent); b)使用jenkins,功能很成熟、强大,可以自定义脚...

2020-12-03 14:55:45 954

原创 中间件选型标准和流程

一、选型流程对于重大组件、中间件的选型,首先要明确短期、中长期的需求,根据需求,列出一些重点考虑的需求特性,根据这些特性,列出一些测试用例,在选型时,用这些测试用例对入围产品进行测试,根据测试结果来评判各个产品的优劣以及与需求的匹配程度。(对应下面的第3、4项)1 初步收集和整理需求,可以参考比较主流的方案和中间件的功能------>相关资料------->2 召集领导、技术骨干、架构师等,讨论需求和使用中间件的必要性--...

2020-12-02 15:38:29 365

原创 Vagrant安装和使用实践

下载安装 vagrant 和 virtualbox 安装没什么说的都选默认就行安装好这两个东西后 virtualbox 就不用管了因为它会随着 vagrant 而启动打开命令行 输入命令 vagrant -v 可以看到vgrant版本。添加vagrant box, 其实就是就是虚拟系统, vagrant box add {url}{url} 是vagrant box 的地址, vagrant box 没有国内源,用vpn到 官方镜像:https://vagrantclo...

2020-12-02 09:21:56 287

原创 生产环境项目程序部署方式的改进和深度思考

首先,以Java项目为例,部署方式有很多,我总结如下: Tomcat等:所有文件放在war包中部署 WAS/Weblogic:通常外挂lib,每次只更新项目自身代码(ear包或war包) JBOSS/EAP:不同于其他Web Container,JBOSS自创了VFS Executable Fat Jar(自带Web Container): 所谓Fat Jar就是所有打包在一个jar中,涉及 jar:jar:file:/path问题,需要hack,一...

2020-10-09 11:42:06 323

原创 Docker容器化CI/CD Pipeline,加快项目编译构建速度的方法

名词解释:所谓“容器化Pipeline”,是指 CI/CD流水线运行在Kubernetes容器云平台上,而非运行在虚拟机或物理机上。加快项目构建在容器化流水线中的构建速度,本质是利用好缓存(或本地仓库),不要让每次编译构建都去拉包。方法一:外挂共享存储卷针对 类似于 Maven(Java)构建的项目(所有项目共享本地仓库),这种方法比较简单有效。以Maven为例,在mvn构建容器中,直接从host或者远程块设备上mount一个目录进去作为Maven的repo...

2020-10-09 11:35:37 325 1

原创 React和Vue对比

2018-08-24 16:46:301、Vue上手更简单,特别是从dom和jquery时代过来的程序员,或者习惯模板语言的后端开发,更容易接受Vue。2、Vue从设计上讲,跟趋向于简化使用,就是说Vue从骨子里面就是想用起来简单,但React更多的是为大型工程考虑。3、React上手稍微难一点,除了Vue那些基础,你还得学习,纯函数组件,函数式编程,JSX,css-in-js,高阶组件,Redux等。4、在组件化上,React更纯粹,也可以说更强大一些,而Vue不是完全组件化,应对一.

2020-10-09 11:32:26 960 1

自制Gshop Editor V155版本(目前唯一能用的155版本,和其他版本不一样的,不通用)

自制Gshop Editor V155版本(目前唯一能用的155版本,和其他版本不一样的,不通用),如需帮助,请联系作者。

2021-02-05

修改本机MAC地址

自制蹭网工具,功能如下: 1、局域网内获取别人MAC和IP的方法: 2、修改本机MAC地址的方法 3、改本机IP地址的方法

2018-10-19

zollty的留言板

发表于 2020-01-02 最后回复 2020-01-02

linux如何重装系统不重新安装软件

发表于 2011-11-24 最后回复 2011-11-24

C语言sizeof函数和指针问题

发表于 2011-10-22 最后回复 2011-10-23

空空如也

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

TA关注的人 TA的粉丝

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