- 博客(219)
- 资源 (5)
- 问答 (1)
- 收藏
- 关注
原创 java并发编程实践笔记14
自定义Semaphore和ReentrantLock主要实现利用jdk的Semaphore和ReentrantLock互相委托,实现自定义的Semaphore和ReentrantLock。使用ReentrantLock实现Semaphore下面是自定义的Semaphore代码:/** * 自定义 * * 委托给 lock 和condition实现 * Created by Admi
2017-01-19 00:41:28 592 3
转载 用“逐步排除”的方法定位Java服务线上“系统性”故障
一、摘要由于硬件问题、系统资源紧缺或者程序本身的BUG,Java服务在线上不可避免地会出现一些“系统性”故障,比如:服务性能明显下降、部分(或所有)接口超时或卡死等。其中部分故障隐藏颇深,对运维和开发造成长期困扰。笔者根据自己的学习和实践,总结出一套行之有效的“逐步排除”的方法,来快速定位Java服务线上“系统性”故障。二、导言Java语言是广泛使用的语言,它具
2016-06-17 09:50:26 1189
原创 spring boot 使用 log4j 异步日志
操作步骤1. 排除默认的 logback 依赖,同时引入log4j2<!-- 排除默认的 logback 依赖--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <exclusions> <exclusion>
2021-10-30 19:19:31 2087
原创 004-protostuff踩坑-java bean新增字段反序列化失败问题
protostuff 避免 更改 java 对象字段 ,比如新增一个,导致 redis 等缓存 的数据反序列化失败问题??问题重现:我们有个方法 通过 attrKey 查询 List ,同时方法中有缓存,会优先查询缓存,没有读库,然后 写缓存 返回。方法伪代码如下: public void setId(String attrKey) { // 从 缓存查询 List<ConfAttr> attrValues = cacheClient.get(attrKey);
2021-07-29 16:58:54 6232
原创 003-Resilience4j学习
TimeLimitertimeoutDuration : 默认 1s : 超时时间配置 (类型是 Duration)cancelRunningFuture : 默认 true: 当 future.get 超时时候(TimeoutException),是否调用 future.cancel 取消异步任务aop 时候 执行先后顺序说明优先级列表名称aop优先级(从高到底 (高的先执行))retryAspectOrderOrdered.LOWEST_PRECEDENCE - 4
2021-07-29 01:17:49 571
原创 002-Spring Cloud Circuit Breaker 学习
官方文档https://docs.spring.io/spring-cloud-circuitbreaker/docs/current/reference/html/#usage-documentation功能分析配置入口org.springframework.cloud.circuitbreaker.resilience4j.Resilience4JAutoConfiguration主要配置了 org.springframework.cloud.circuitbreaker.resilience
2021-07-26 23:23:01 739 1
原创 001-spring boot 2.5.x feign 生产环境使用参考
spring feign 总结启用项目中增加依赖<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <dependency> <groupId>io.github
2021-07-25 02:15:00 1448
原创 idea2020.2 ubuntu20.4 输入法切换使用问题
解决办法在 “Help | Edit Custom VM options…” and add -Drecreate.x11.input.method=true to a new line重启 IDE
2020-10-01 07:35:57 1006 1
原创 zuul 重写路由请求
zuul 重写路由请求比如 我们在转发请求时候,添加open 前缀public class RequestPathFilter extends ZuulFilter { @Value("${forward.pathPrefix:}") private String forwardPathPrefix = ""; @Override public String filterType() { return FilterConstants.ROUTE_TYP
2020-09-29 15:03:44 693
原创 spring kafka配置优化
生产者配置下面用的是 kafka-clients-2.0.1.jar 的原生配置# 用来初始化连接kafka(不用配置全部节点,会动态发现)bootstrap.servers=172.28.15.138:9092,172.28.15.195:9092,172.28.15.145:9092# 生产者缓存发送记录,如果生产速度过快,buffer占满,则生产者会阻塞 max.block.ms 直到抛出异常。并且不是全部用来缓存记录,比如压缩也会用到 默认 32 * 1024 * 1024 (32m)bu
2020-09-09 19:51:12 1406
原创 基于vscode编写markdown导出带书签(目录)的pdf
目的有时候我们需要对写完的markdown文件,导出pdf,同时带有书签。这里总结下我的实现前提基于ubuntu20.04基于vscode编写和相关的插件安装下载安装vscode下载安装markdown插件 Markdown All in One (方便编写)和 Markdown Preview Enhanced (提供导出功能)因为需要导出带有书签的pdf 所以这里我们 使用 Prince(可以将html导出pdf) (注意这里使用的是ubuntu系统)下载地址: https:/
2020-09-04 01:33:01 8062 7
原创 java helloworld
编译执行代码结构Hellow.java 在默认包下Helloworld.java 在com.test 包下两者代码相同 都是 print hellow。编译编译 Hellow.java javac Hellow.java编译 Helloworld.java javac com/test/Helloworld.javaPS: 如果执行javac 没有报错,会在对应的源码目录生成对应的.class 文件执行# 先进入项目根目录java -cp . Hellow
2020-07-03 18:58:04 216
原创 ubuntu20 nginx安装
源码安装~/app/nginx/nginx-1.16.1执行:configuresudo ./configure --prefix=/usr/nginx最终输出:Configuration summaryusing system PCRE libraryOpenSSL library is not usedusing system zlib librarynginx path prefix: “/usr/nginx”nginx binary file: “/usr/nginx/
2020-06-13 21:47:11 653
原创 开发-外放-checklist
开发步骤 checklist建表-同步准备好索引 (如果是按月分表等,更要注意,最好写在程序定时任务)。建表-注意数据的清除策略注意缓存- 哪些方法需要缓存,同时需要清除注意高并发- 哪些功能并发高, 服务自身, redis 是否撑不住,mongo是否撑不住 ,依赖别人接口是否撑不住, ====其他外部依赖是否撑不住注意哪些方法 需要单个进程 执行,只能执行一次。 (比如活动结算,只需要一个线程 执行一次)开发记得 打印日志,特别是关键的地方,需要查证问题的地方外放步骤 checklist
2020-05-20 14:45:19 396
原创 字典 复制思路
# 原始代码room_sessid = req_local.get(UserElement.ROOM_SESSID)recom_token = req_local.get(UserElement.RECOM_TOKEN) if room_sessid: info[UserElement.ROOM_SESSID] = room_sessid if recom_token...
2020-04-15 10:33:41 202
原创 python本地缓存
import datetimeimport functoolsimport heapqimport inspectimport loggingimport randomimport timeimport weakreffrom eventlet.semaphore import Semaphorefrom service.globaldef import Constslo...
2020-02-27 14:00:47 2004
原创 vimrc配置
vimrc配置set encoding=utf-8 set termencoding=utf-8 set fileencodings=ucs-bom,utf-8,gbk set ambiwidth=doubleset fileformats=unix,dos,mac" 自动缩进 set smartindent set smarttab set cindent " tab设置 ...
2020-02-07 18:17:56 160
原创 python参数校验代码
class Code(object): MSG = { } @classmethod def api_resp(cls, code=0, msg=None, data=None): if codeis None: reason = cls.MSG.get(result, '') return JsonRes(...
2019-06-21 19:35:52 2756
原创 nameko笔记2-启动自定义配置文件格式
前言nameko 默认的启动文件格式yaml 或者直接命令行输入某些参数是否可以 自定义nameko的配置格式呢,比如利用json格式 或者改为直接读取consul 的远程配置nameko 的配置文件加载过程从nameko源码 可以看到 加载yaml 大概如下(比如执行 nameko run --config foo.yaml service ):启动参数传到命令Run 然后调用 ...
2019-05-04 00:04:37 1115 1
原创 nameko笔记1-nameko启动命令分析
nameko 命令分析安装namekopip install nameko安装 rabbitmq很多nameko 内嵌的功能依赖于rmq(如 rpc pub-sub)debian-based operating systems:apt-get install rabbitmq-server参考:参考: https://nameko.readthedocs.io/en/stable...
2019-05-03 21:02:05 2187
原创 python-consul-分布式配置代码
下面是一份 给予consul作为分布式配置的python代码:class LyConf(object): def __init__(self, consul_key, consul_client=None, host='127.0.0.1', port=8500, loop_interval=5): if consul_client:...
2019-05-01 23:29:55 1102
原创 python列表生成式-笔记
效率代码如下:# -*- coding:utf-8 -*-import timesize = 10000000t1 = time.time()a = list(range(size))t2 = time.time()print('x=%s' % a[100])print(t2-t1)t1 = time.time()b = [x for x in range(size)]...
2019-04-27 09:52:47 165
原创 python redis 分布式锁
实现class DisLockService: DEL_SCRIPT = ''' if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end ''' @staticmethod d...
2018-12-07 17:26:19 859
原创 跨域问题方案总结
什么是同源策略?同源策略/SOP(Same origin policy)是一种约定,由Netscape公司1995年引入浏览器,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击。所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源。3.同源策略限制以下几种行为:1.) Cookie、LocalStorage...
2018-11-28 19:37:17 221
原创 redis lua 脚本使用
lua 教程http://www.runoob.com/lua/lua-tutorial.htmllua redis 教程深入理解redis.pdf 第五章一段记榜的脚本zaddIfNotExistsOrGtPreVal.luafor k, v in ipairs(KEYS)do local prescore = redis.call('ZSCORE', v, ARGV[1]...
2018-10-09 18:00:55 1383
原创 使用java consul-api注册服务
注册服务代码如下public void registerService(ServiceConfig service) { NewService newService = parseFrom(service); Check check = service.getCheck(); if (check != null) { New...
2018-09-24 10:31:14 5089
原创 docker搭建consul集群
说明docker版本:18.06.1-ceconsul 版本:v1.2.3系统:ubuntu18本文将介绍在一台机器上搭建三个server节点 1个Client节点的consul集群。docker安装1.卸载老版本 sudo apt-get remove docker \ docker-engine \ docker.i...
2018-09-23 18:16:31 6459 1
原创 sping boot 中使用 redis 分布式锁
public class RedisLock { private static Logger logger = LoggerFactory.getLogger(RedisLock.class);private static final String LOCK_MSG = &quot;OK&quot;;private static final Long UNLOCK_MSG = 1L;privat...
2018-09-14 17:11:26 307
原创 python 自定义base64
class MyBase64(obejct): STANDARD_ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' # standard base64 alphabet def __init__(self, alphabet=None): if alphab...
2018-08-27 17:39:51 2280
原创 java自定义base64
public class MyBase64 implements Codec {private final static Logger LOGGER = LoggerFactory.getLogger(MyBase64.class);private final static String STANDARD_ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcd...
2018-07-26 09:45:08 732
原创 idea 使用 总结
idea 使用 总结技巧常用 我用的多的 Maven Helper ,Alibaba Java Coding Guidelines,IntelliJ Lombok plugin,JRebel,FindBugs,gsonformat,codemaker (各种bean互转), GenerateAllSetter (快速调用全部的setter 方法,避免自己注入写少了)自定义 se...
2018-06-07 11:29:59 884 1
原创 dubbo 分析-调用过程分析
dubbo 调用过程分析本章 主要介绍 dubbo 服务和客户端 调用过程。服务端 接收请求流程服务端配置直接采用dubbo 源码例子 dubbo-demo-provider配置如下:<!-- provider's application name, used for tracing dependency relationship --><d...
2018-04-15 11:19:20 923
原创 dubbo分析-export一个服务
export一个service我们先看下export 一个service 的具体代码:// 服务实现HellowService hellowService = new HellowServiceImpl();// 应用配置ApplicationConfig applicationConfig = new ApplicationConfig();applicationConfig....
2018-04-10 13:25:17 2163
原创 dubbo分析-ExtensionLoader自适应实现
ExtensionLoader 一般使用方式#截取 自 ServiceConfig 代码片段public class ServiceConfig<T> extends AbstractServiceConfig { private static final long serialVersionUID = 3033787999037024738L; privat...
2018-04-08 21:55:37 516
原创 dubbo分析-netty 实现同步通信
说明dubbo默认的protocol 是 DubboProtocol,默认的远程通信采用netty(不是netty4),默认的codec2是 hessian2。这里我们来分析一下 dubbo实现 netty 异步转同步的细节。# ExchangeChannel上篇我们说过 dubbo 的上层通信封装在exchangeServer 和 exchangeClient。查看源码发现 发送...
2018-04-05 18:54:16 2369 1
原创 dubbo分析-protocol 源码分析
protocol 结构图 方法说明:export 将方法暴露出去。refer 引用 一个远程service。destroy 销毁全部的 invoker(service 和refer)。AbstractProtocol 分析属性分析: Map<String, Exporter<?>> exporterMap : key是 监听 addre...
2018-04-05 01:09:59 403
原创 fidder 抓包
抓http包:点击菜单 tools=》 connections=》勾选 allow remote computers to connect默认代理端口 是8888 可以再 connections tab页 更改。抓https包 除了上面配置的http抓包以外:点击菜单 tools=》 https 勾选 capture htttps connects ...
2018-04-04 15:01:39 226
转载 Publisher的消息确认机制
在前面的文章中提到了queue和consumer之间的消息确认机制:通过设置ack。那么Publisher能不到知道他post的Message有没有到达queue,甚至更近一步,是否被某个Consumer处理呢?毕竟对于一些非常重要的数据,可能Publisher需要确认某个消息已经被正确处理。 在我们的系统中,我们没有是实现这种确认,也就是说,不管Message是否被Consum
2017-12-19 09:54:46 923
转载 Spring-amqp 1.6.1 生产者与消费者消息确认配置与使用
通过Publisher Confirms and Returns机制,生产者可以判断消息是否发送到了exchange及queue,而通过消费者确认机制,Rabbitmq可以决定是否重发消息给消费者,以保证消息被处理。1.什么是Publisher Confirms and Returns?Delivery processing acknowledgements from cons
2017-12-19 09:52:50 752 1
转载 git reset revert 回退回滚取消提交返回上一版
git reset revert 回退回滚取消提交返回上一版总有一天你会遇到下面的问题.(1)改完代码匆忙提交,上线发现有问题,怎么办? 赶紧回滚.(2)改完代码测试也没有问题,但是上线发现你的修改影响了之前运行正常的代码报错,必须回滚.这些开发中很常见的问题,所以git的取消提交,回退甚至返回上一版本都是特别重要的.大致分为下面
2017-12-08 09:28:01 372
趣谈网络协议
2018-12-03
CSDN在线培训——Hadoop 2.0新特性剖析及应用
2014-12-01
nutch 直接通过 api接口 爬取 可行吗?
2016-04-21
TA创建的收藏夹 TA关注的收藏夹
TA关注的人