- 博客(31)
- 收藏
- 关注
原创 名词解释:swagger, openapi, springfox, springdoc
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档。
2022-10-12 20:06:34
1751
原创 Websocket系列 -- Http Keep-Alive实现之sun.net.www.protocol.http.HttpURLConnection
Http Keep-Alive在HttpURLConnection中的具体实现
2022-04-17 15:33:36
2449
原创 Websocket系列 -- 协议详解
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar
2022-04-02 21:16:46
3849
原创 Websocket系列 -- 前世今生
前世Websocket出现之前,浏览器是如何和服务端保持”长连接“的?在协议层引入了Http keep-alive,重用已有的TCP连接,从而避免重复建立TCP连接造成的性能损失。 在使用方式,引入短轮询和长轮询方式,模拟”长连接“。Http keep-alive在Http 1.0协议中,引入了keep-alive 请求头参数(http 1.1后,此参数默认开启),可以通过这个参数控制在一次tcp 连接中可以持续发送多份数据而不会断开连接,这样就能复用tcp 连接,减少tcp连接建立的次数。
2022-03-17 14:11:03
3072
1
原创 VS Code使用系列 -- 在浏览器中调试javascript(browser app)
环境安装插件1:Live Server插件2:JavaScript Debugger使用步骤1,从状态栏启动Live Server(点击“Go Live”)如果状态栏被隐藏,从工具栏中打开状态栏:2,在浏览器中通过devTool,调试Html+javascript打开要调试Html(其中包含对应的javascript脚本),点击右键,在浏览器中打开页面。之后就可以通过DevTool进行调试了(console.log,debugger等方式)3,在VSC..
2022-02-09 10:08:50
1756
转载 Java工具类解析系列 -- ReentrantReadWriteLock
概念和ReentrantLock相比,ReentrantReadWriteLock在原有的互斥锁(写锁)的基础上,添加了一把共享锁(读锁)。名词解释读写锁有以下三个重要的特性(参见:ReentrantReadWriteLock读写锁详解):(1)公平选择性:支持非公平(默认)和公平的锁获取方式,吞吐量还是非公平优于公平。(2)重进入:读锁和写锁都支持线程重进入。(3)锁降级:遵循获取写锁、获取读锁再释放写锁的次序,写锁能够降级成为读锁。工作原理/方式这个链接Reent..
2022-01-25 14:36:29
164
原创 Java工具类解析系列 -- ReentrantLock
概念ReentrantLock是一个可重入互斥锁,与synchronized关键字具有相同的基本行为和语义,但具有扩展功能。此锁由上次成功获取但尚未解锁的线程所拥有,此时其它线程尝试获取锁时,将会被阻塞挂起。名词解释:可重入 -- 顾名思义,同一个线程可以调用lock方法若干次,同时也需要unlock相应的次数,完成锁的释放。为什么需要可重入,主要目的是为了在代码设计时,当有多个定义的原子操作在组合使用时,可以不必考虑加锁的位置和顺序等。例如:package com.youdao.labo
2022-01-24 09:16:36
433
原创 Java11使用问题
客户端1,java application调用https请求时,导致"SSLException: record_overflow"的异常原因分析:参见bug:https://bugs.openjdk.java.net/browse/JDK-8221253解决方案:在启动时添加:-Djdk.tls.client.protocols="TLSv1,TLSv1.1,TLSv1.2"服务端...
2022-01-20 17:17:08
678
原创 VS Code使用系列 -- Java Import Organization 支持 asterisk(*)wildcard
通过设置如下参数,是的Java Import Organiztion支持通配符式的导入方式:"java.sources.organizeImports.starThreshold": 4,"java.sources.organizeImports.staticStarThreshold": 4其中4代表,当相同package下的导入大于等于4个,就会使用通配符的方式,例如:import java.util.*此操作也为了同时使用Intellij IDE和VS code IDE的开发项目组
2022-01-14 09:47:09
2046
原创 Git Submodule汇总(持续更新)
如何获取submodule的当前分支 在父模块目录下执行如下命令git submodule status --recursive
2021-01-30 14:48:15
187
原创 如何统一Java不同开发IDE的代码格式器(code formatter)
问题:Java团队开发面临的一个小问题就是不同组员使用不同的开发IDE(Eclipse,Intellij,VS Code),导致在代码review的时候,由于code format的变化,造成了review的困惑。解决方案:解决办法就是统一IDE的代码格式器(code formatter),目前Intellij无法完整导出给VS Code使用。所以可行的办法就是找一个三个主要Java IDE都支持的第三方的Code Formatter。所以就选择了google-java-formatter。
2021-01-14 16:50:24
1496
原创 跨域模式(CORS)下,如何使用Axios读取服务端定制Http头
在跨域访问模式下(CORS),浏览器只支持读取Http头(Http Header)下的如下指定属性:Cache-Control Content-Language Content-Type Expires Last-Modified Pragma如果客户端想读取服务端(server)返回的定制Http头属性,server端需要在Http请求头中设置属性Access-Control-Expose-Headers,例如,假设server端定制Http头为Access-Token和Uid:Acc
2021-01-14 16:03:47
482
原创 TypeScript名词解释系列 -- tsconfg中的target,module和moduleResolution
tsconfg中的target,module和moduleResolutiontarget --就是TypeScript文件编译后生成的javascript文件里的语法应该遵循哪个JavaScript的版本。可选项为:"ES5", "ES6"/ "ES2015", "ES2016", "ES2017"或 "ESNext"module -- 就是你的TypeScript文件中的module,采用何种方式实现,可选项为:"None", "CommonJS", "AMD", "System..
2020-06-12 10:38:56
5185
翻译 SpringBoot小常识系列--配置文件相关属性的命名规则
SpringBoot小常识系列--配置文件相关属性的命名规则参见官方文档: https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-config-relaxed-bindingSpringBoot 支持松散的属性名称匹配方式,所以配置文件中的名称可以是:Kebab case(小写+横线分隔),例如: acme.my-project
2020-05-13 11:13:54
2768
原创 如何管理SpringBoot子模块的配置文件
前言如何创建和使用springboot子模块来管理和共享代码,参考如下链接:https://spring.io/guides/gs/multi-module/总体结构就是,1,创建一个父工程(parent),用于整合所有模块,一般是一个可执行性模块和若干库模块2,可执行模块,包含main函数,通过插件spring-boot-maven-plugin打包,生成可执行jar包3,库模块...
2020-05-06 16:34:38
1731
原创 spring boot 2: 如何启用tomcat的nio2协议(Http11Nio2Protocol)
@Slf4j@Componentclass AppTomcatConnectorCustomizer implements WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> { @Override public void customize(ConfigurableServletWeb...
2019-12-27 17:46:08
9761
原创 springboot中,如何利用AOP,实现函数执行时间打印并支持给annotation传递参数
需求:利用AOP和annotation,实现当指定函数的执行时间超过阈值后,打印log实现:1,定一个带参数的annotation@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD)public @interface LogExecutionTime { public int threshold(...
2019-12-27 11:37:36
446
原创 如何在nginx 反向代理(proxy_pass)配置swagger2
假设:1,部署swagger2的server的ip地址为:192.168.1.102,通过url:http://my.test.com/report 访问上述swagger2nginx配置如下:server { listen 80; server_name my.test.com; ........ location ~ ^/report/(swa...
2019-12-25 14:47:49
6476
1
翻译 MongoDB一对多模式的三种设计方案
今天读了篇文章,关于mongodb里,一对多模式下的schema设计方案,感觉说的挺清晰,所以分享一下。原链接:https://www.mongodb.com/blog/post/6-rules-of-thumb-for-mongodb-schema-design-part-1问题:数据库设计中,数据之间的引用不可避免,其中常见的模式就是一对多。举个例子:Person和AddressesPerso...
2018-06-22 11:53:23
7986
1
原创 如何利用数据库实现简单的分布式锁
问题:现在的手头的项目大多开始使用nodejs了,nodejs的单线程本质,导致大多数nodejs的项目都采用pm2等类似的进程管理工具,采用多进程的方式(也即是同时启动目标项目的多个实例),提高应用的吞吐量和cpu的利用率。但这也要求在软件设计上,尽量保持上下文无关,进程间无资源竞争关系。但是多数情况下,这个问题有不可避免,例如一些计数操作等。市面上有很多分布式锁的应用,例如zookeeper等...
2018-06-08 11:15:10
1723
原创 如何在pm2 cluster模式下,使用winston-daily-rotate-file
问题:最近用nodejs+express写了一个WebServer类应用。其中使用pm2 cluster模式进行进程管理,nodejs代码中,使用winston-daily-rotate-file进行log记录。其中winston-daily-rotate-file配置如下:所以问题来了,发现其中maxFiles设置不起作用,winston-daily-rotate-file并没有删除多余的日志文...
2018-06-08 10:33:55
3112
原创 谈谈在Tyepscript(version:2.2.2)扩展(extends)built-in类型(e.g. Array)的问题
前两天用typescript写代码的时候,像扩展一下内置的数据类型:Array,结果发现编译出的js文件,运行时提示找不到扩展的方法。google以后发现如下说法:Why doesn't extending built-ins like Error, Array, andMap work?In ES2015, constructors which return an objec
2017-04-21 11:11:34
864
翻译 如何使用DevTools调试Nodejs运行的Javascript
本文内容主要来源于以下链接:https://blog.hospodarets.com/nodejs-debugging-in-chrome-devtools下面是一些摘要和总结:1,Nodejs和Chrome版本: Nodejs 6.3+ 和 Chrome 55+2,如何激活Chrome支持Nodejs调试:在Chrome里打开 chrome://flags/#enab
2017-02-07 09:10:17
3213
原创 JAVAScript:mobile端,基于transform-origin和tranform(scale),实现表格缩放
需求:1,实现表格区域的缩放,而不是整个页面。整个页面包含toolbar + table。 其中只缩放table区域2,已用户操作处进行缩放,而不是固定的某个点,例如中心点,或左上角,笔记缩放时,数据跳动实现的基本原理:利用transform-origin,来确定进行缩放的固定点,也就是用户进行缩放的点, 同时利用transform:scale(value)来实现缩放
2016-12-22 11:10:55
2843
原创 typescript -- 全栈工程师的利器
做了将近10年的服务器端代码开发,现在转到前段开发,略有不适应。最最无法接受的有两点:1, JS不是强类型,无法很好的通过编译的手段发现问题,使得产品迭代中,很容易出bug,如果自动化测试程度再低点,产品质量真是有点Hold不住。2, 没有真正的面向对象的实现框架,使得代码组织容易混乱,代码逻辑容易形成复杂的耦合。而且JS里太多的伪面向对象的框架,导致了JS人员的开发风格大相径庭,同一个工
2016-11-21 09:50:52
977
翻译 如何在Mac上安装nginx以及所需模块
想通过homebrew安装第三方模块,需要添加新的或者修改已有formula,例如:echo-nginx-module.前两天碰巧需要安装这个echo模块,所以Google了一下,发现了本身支持更多第三方模块的工具 -- homebrew-nginx. 链接如下https://github.com/Homebrew/homebrew-nginx以下时本人安装的步骤:
2016-08-18 15:01:40
3558
1
原创 随想(三) -- 如何给基于Javascript的rich editor添加协同功能
实现背景手头已经有一个基于Javascript的富文本编辑器,基本架构采用MVC,其中View层负责相应用户行为(例如文本输入等),之后把对应的行为通知Controller, 由Controller把行为封装成命令(command),由命令来操作数据,之后数据层触发各种change事件,通知View层,View层再进行渲染。大体结构如下:实现方案基本思想
2016-06-14 15:18:36
640
原创 随想(二)-- 基于负载均衡和本地锁的分布式锁
实现背景业务需求实现多人对同一片文档的协同编辑,要求采用第一个发起请求时,当前文档的最新版本作为协同内容的基础,多人同时请求时,要保证,所有请求获得相同的文档内容现有架构其中用户请求到WebServer之间是给予WebServer负载的负载均衡算法WebServer到存储Server之间,是根据文档Id Hash实现的定向算法
2016-05-24 11:21:13
1721
原创 随想 -- SaaS项目中问题的发现和解决
在线问题根据出现时序的分类做在线服务,有一个重要的指标就是有效时间或者说高可用性(high availability)。而保证这个指标通常的方法中,除了增加一些备份的候选服务(在主服务发生错误后,取代主服务的角色),就是最好能够做到:在用户出现问题之前,发现问题,并且解决问题在用户问题出现后,单用户并未发现出问题前,发现问题,并且解决问题在用户发现问题后,第一时间找到问
2016-05-17 14:13:22
696
原创 谈一谈Java开发中的坑(一) -- log4j2在SaaS项目中的应用
背景介绍:做server端开发有些年头了,特别是开始做SaaS类型的项目时,深知log的重要性,特别是半夜三更用户(大都是美国那边的)遇到问题的电话打过来,这个时候没有一个强大log,那只有抓瞎的份了。以前都是走的微软系的开发工具,log的框架也是别人早就写好的,所以对于log性能这一块也没有什么关注,觉得它就应该是轻量级的,不应该耗费太多的资源。后来换公司以后,开始学习用java
2016-05-13 14:14:53
1388
原创 基于embedded jetty server的websocket开发
基于embedded jetty server的websocket开发websocket提供一种在浏览器和服务器之间的全双工通信(full-duplex),替代了传统的轮询(polling)做法。目前,在一些web-base的富文本编辑器中有广泛的应用,例如Etherpad,石墨文档,有道云笔记等。具体的关于websocket的定义请参见:http://baike.baidu.co
2016-05-09 13:31:16
2472
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人