- 博客(40)
- 资源 (3)
- 收藏
- 关注
原创 来,手把手教你编译OpenJDK源代码
从哪搞到OpenJDK的源代码?OpenJDK的官网在这里:https://hg.openjdk.java.net/,里面可以看到不同版本的jdk分支。OpenJDK使用Mercurial来做SCM,安装好Mercurial之后可以使用如下命令克隆OpenJDK的源代码:apt-get install -y mercurialhg clone http://hg.openjdk.java.n...
2020-02-27 23:01:17
6678
原创 服务治理实战——闲时主动GC
百亿级流量服务治理实战——闲时主动GC前言看到这个标题可能有些同学会质疑:什么?Java的GC还能主动去做?——您别说,还真的可以。我来给大家分享一下在之前公司做的这个有意思的功能:在夜半无人私语时、业务流量低谷中主动去做一个高效的Full GC。文末有彩蛋哟~缘由就算可以主动执行GC,可是为什么要这么做呢?对象固有一死,GC这玩意是早晚都要发生的。如果不巧在业务流量高峰的时候old g...
2019-12-12 16:30:27
1346
2
原创 服务治理杂谈——版本管理怎么做
一、背景在服务提供期间,我们常常会对服务有一些BugFix、或者是一些内部逻辑的更改、又或者是代码的优化。在于版本管理的角度来说,每当我们对已发布的代码进行更新以后,需要进行服务版本的升级。如SayHelloService v1.0.0服务进行了Bug的修复,下次升级的服务版本应该需要递增,如1.0.1或1.2.0等。BugFix常有,那服务版本也会常常会有变化,这样已提供给接入方的客户端是否...
2019-12-05 10:41:31
860
原创 用户密码存储与校验方案
一、密码存储流程用户密码使用 随机加盐 方式存储,存储流程如下:生成随机盐s;随机盐s与密码明文p拼接得到待哈希串m;hash(m)得到密文e;哈希函数代号c+特定分隔符+随机盐s+特定分隔符a+密文e=最终入库的字符串i;二、校验密码流程网站使用HTTPS,前端将用户在界面输入的用户名user和密码明文pwd传输到后台;登录接口接收到登录请求后,根据用户名user提取上述存...
2019-11-12 11:22:58
1160
原创 MySQL / TiDB数据迁移及验证
一、环境准备1.1 工具介绍数据量比较大,使用MySQL官方自带的mysqldump难以满足需求的时候,可以使用mydumper执行数据迁移工作。mydumper 最突出的特性就是可采用多线程并行备份,极大提高了数据导出的速度。mydumper的工作原理可以参考:MyDumper原理简介与其他备份工具一样,mydumper 默认情况下是用 FTWRL (Flush Tables With R...
2019-08-01 20:08:22
1047
原创 Zuul 2是如何动态加载Filter的?
Zuul 2沿用了Zuul 1的责任链模式的设计,其网关核心功能还是通过Filter链来实现的。要熟练使用和扩展Zuul 2的功能,必须要了解其Filter的加载和执行机制。另外,Zuul 2使用Guice作为依赖注入工具,因此在开始分析之前,我们需要大致了解Guice的基本原理和用法:Guide to Google Guice为了了解Zuul 2的filter加载机制,我们从入口开始看起。在官...
2019-05-31 18:38:52
1420
1
原创 Hadoop Hive Spark安装配置指南
1 安装Hadoop1.1 下载hadoop-2.7.x压缩包并解压至目标目录,修改$HODOOP_HOME/etc/hadoop下几个文件:hadoop-env.sh,检查JAVA_HOME、HADOOP_CONF_DIR配置是否正确;core-site.xml,加入如下配置:<property> <name>hadoop.tmp.dir<...
2019-03-20 15:53:32
786
原创 自定义Metrics埋点方案
一、背景1.1 什么是埋点?有别于前端的埋点,我们这里主要讨论的是后端的代码埋点,埋的是一些预定义或者自定义的关于系统业务、性能方面的Metrics。Metrics,就是度量的意思,主要是为了给某个系统某个服务做监控、做统计。1.2 为什么需要埋点?不同的IT系统有各自关注的业务场景和关键细节,需要通过埋点来获知当前系统运行的状况,埋点数据采集起来也可以用于事后统计分析。以服务注册中心为例...
2019-01-01 00:29:34
9643
1
原创 Redis Lua脚本开发之从入门到忘记
Redis Lua脚本开发之从入门到忘记一、Lua快速入门1.1 Lua简介Lua是一门简洁小巧的脚本语言,由C语言编写,一般用来做扩展程序,嵌入在Nginx/Redis等中间件或者其它牛逼语言中使用。1.1.1 Lua特性轻量级:它用标准C语言编写并以源代码形式开放,编译后体积很小,可以很方便的嵌入别的程序里;可扩展:Lua提供了非常易于使用的扩展接口和机制,由宿主语言提供这些功...
2018-11-04 17:50:44
1262
原创 Redis进程异常退出排查
Redis进程异常退出排查一、排查思路1. 是否因为系统内存不足被oom killer杀掉;如果是oom killer杀掉的话,一般会在/var/log/*留下日志,dmesg也应该能查到,可以使用命令搜索:dmesg | egrep -i 'killed process'grep oom /var/log/*grep total_vm /var/log/*如果确实是由于内存不足被...
2018-10-12 15:55:03
11807
1
原创 Redis Cluster搭建与维护
1 安装搭建1.1 Redis安装1.1.1 下载安装redismkdir -p /opt/redis-4.0.9 && cd /opt/redis-4.0.9wget http://download.redis.io/releases/redis-4.0.9.tar.gzyum install -y gcc g++ gcc-c++ makeyum -...
2018-09-07 11:45:06
467
原创 JMH使用说明
JMH使用说明一、概述JMH,即Java Microbenchmark Harness,是专门用于代码微基准测试的工具套件。何谓Micro Benchmark呢?简单的来说就是基于方法层面的基准测试,精度可以达到微秒级。当你定位到热点方法,希望进一步优化方法性能的时候,就可以使用JMH对优化的结果进行量化的分析。
2018-03-01 12:22:18
22008
5
原创 Java notify和notifyAll源码分析与性能对比
Java notify和notifyAll源码分析与性能对比一、源码剖析首先,看看在synchronizer.cpp中notify和notifyall的实现:void ObjectSynchronizer::notify(Handle obj, TRAPS) { if (UseBiasedLocking) { BiasedLocking::revoke_and_rebia...
2018-02-27 11:56:49
997
MySQL日期范围分区查询时分区裁剪不正确的问题
.jpg"tags: - MySQL--- 获得更加浏览体验,请点击:http://lixuanbin.github.io/2016/07/07/MySQL-partition-by-datetime-range-not-pruning-when-select/ 最近优化几条业务报表语句的时候,偶然间发现有个按日期分区的表在指定了日期范围后仍然扫描了所有分区,刚开始怀疑是建表语句中分区的写法有问题,以下是原来的分区写法: ```sqlCRE
2016-07-08 15:06:01
211
利用反射获得数据源连接信息
方式还原出来,代码如下:import java.lang.reflect.Field;import org.apache.log4j.Logger;public class CrackDbInfo { protected static final Logger log = Logger.getLogger(CrackDbInfo.class); /** * 利用反射获取数据源连接信息 * * @param dataSource * @return
2016-06-30 10:00:20
145
ExcellentExport.js导出csv中文乱码问题解决方法
乱码。 **原因:**在简体中文环境下,EXCEL打开的CSV文件默认是ANSI编码,如果CSV文件的编码方式为utf-8、Unicode等编码需要在文件头加入BOM,否则可能就会出现文件乱码的情况。 **解决方法:**每次写入数据到csv前先加入一个BOM。 打开ExcellentExport.js文件,把```javascriptvar hrefvalue = uri.csv + base64(csvData);```修改为:```javascri
2016-06-15 09:51:25
177
MySQL慢查询分析案例
子集全表扫了300多万行数据。抽出来单独explain,定位到问题语句: SELECT t1.statDate, t1.tips FROM passport_4366_test t1 WHERE t1.statDate>='2016-05-01' AND t1.statDate<='2016-05-05' GROUP BY t1.statDate, t1.tips; 检查一下表结构发现,在表的statD
2016-05-09 15:18:03
83
使用Excel生成SQL语句
="update activity_ set activity_name='"&A1&"' where activity_id='"&B1&"';" 然后使用excel的复制单元格功能,在单元格右下的小十字上双击,搞定: 类似可用于生成其他模板格式文本。
2016-04-29 17:51:14
71
使用mysqlbinlog恢复MySQL误删数据
g YY-20150409AOUK-bin.000006|grep -C 5 "delete from" --恢复数据mysqlbinlog --start-datetime="2015-10-21 08:30:00" --stop-datetime="2015-10-21 19:00:00" YY-20150409AOUK-bin.000006>c:\1.sql;--可选参数 --start-posit
2015-10-21 20:52:26
66
使用Spring MVC Interceptor拦截记录敏感操作
数据)进行拦截,在日志中记录下该操作的执行人,操作时间,操作名称,传入参数以及返回结果等信息,以便万一出问题后追究查验。 2. 解决思路 有两种方案:(1)把对应的MVC方法使用AOP去拦截,这个是方法级别的拦截;(2)使用Spring MVC Interceptor去拦截,这个是基于URL的拦截。 那么,如何选择呢?考虑到我们这个是WEB项目,只有登录用户才能执行管理操作,而登录用户的用户信息一般放在Session里,使用基于URL拦截的方法便于提取Session数据;
2015-10-19 18:07:51
98
原创 EJS: 基于JavaScript的模板引擎
,使用方便.这里给大家简单介绍一下. 一、场景:页面提交ajax查询,服务器返回一段json,客户端根据json内容动态生成table展现. 二、EJS用法 1.模板 与jsp的script类似,位于<% %>之间的JavaScript会被解释执行,而<%= %>则会把表达式的值输出到页面. 2.渲染:html = new EJS({url: '/template.ejs'}).render(data);
2015-09-24 00:44:28
265
Install VBox Guest Addons And Auto Mount VBox Shared Folders
sources of current Linux kernel", then: yum install kernel-develyum group install "Development Tools"yum install kernel-headers-$(uname -r)./VBoxLinuxAdditions.run --nox11 3. Add and auto mount vbox shared folder: mount |
2015-04-04 22:23:31
72
使用Bash和Python统计高频请求IP
便后续处理。 二、处理思路 为避免打草惊蛇,先对最近一段时间内的HTTP服务器日志以及Servlet容器的日志进行静态分析统计,过滤掉合法请求来源后降序展示出统计结果,然后再人工锁定可疑IP。 由于计算量不大,可以使用bash shell命令以及python对日志文件进行统计。如果日后计算量剧增再考虑使用Hadoop MapReduce进行并行处理。 三、具体实现1.使用grep查找出所有请求IP:grep -r -E -o "(25[0-5]|2[0-4]
2015-02-26 17:16:55
91
原创 数据库索引基础知识问答
速度。没有使用索引的查询会导致全表扫描,对每行记录相关的字段执行条件校验。 索引的缺点? 占据磁盘空间,运行时需要额外的维护开销,减缓批处理操作。 如何创建索引? create (unique) index index_name on table_name(column1, ...) 如何删除索引? drop index index_name on table_name 索引有哪些种类? 单字段索
2015-02-04 22:09:01
103
原创 SQL入门经典第5版(Sams Teach Yourself SQL in 24 Hours, 5th)随书习题的建表和插入
BL (EMP_ID VARCHAR(9) NOT NULL,LAST_NAME VARCHAR(15) NOT NULL,FIRST_NAME VARCHAR(15) NOT NULL,MIDDLE_NAME VARCHAR(15),ADDRESS VARCHAR(30) NOT NULL,CITY VARCHAR(15) NOT NULL,
2015-01-25 13:28:52
111
java.util.concurrent.Exchanger应用范例与原理浅析
首先我们来看看官方的api文档中的叙述:A synchronization point at which threads can pair and swap elements within pairs. Each thread presents some object on entry to the exchange method, matches with a partner thread, and receives its partner's object on return. An Exchang
2014-12-16 16:42:40
69
1
Java多线程设计模式之双重检查加锁实战(Java concurrency patterns:double-checked lockin
会员等功能。然而在测试的中发现通过微信接口生成二维码这个过程偶尔会发生超时或者其他异常,这时候需要把图片替换为一张静态的二维码图片;如果这种情况在一段期间内反复发生(譬如微信接口服务突然挂了),将会影响用户使用我们系统的体验,因此需要有个fall back的策略。二、静默模式策略 设置请求接口生成动态二维码的http超时和线程超时时间,如果请求超时或其他连接异常连续发生次数超过预设的阀值(譬如5次),就进入静默模式for 30分钟(一般说来,宕机恢复、故障排查要求在30分钟内完成),这段期间内收到的新用
2014-11-17 15:44:25
158
1
Windows Server下Weblogic 11g控制台输出日志文件体积过大,占满磁盘空间的解决
身对于磁盘空间使用情况本应该有监控的才对,竟然没有提前预警)。再仔细一检查,发现Weblogic的控制台输出日志文件stdout.txt的体积竟然有20多G!一般来说,有用的日志信息我们的应用自己都写了log4j,Weblogic本身的控制台输出日志意义不大——这个文件完全可以清空掉。 于是赶紧停服务,删日志,重建空白日志文件,启动服务。电话通知用户后对方反馈服务恢复正常。哦也~ 嗯,时间还早,写个bat,配成Windows计划任务定期自动清理,以绝后患吧。 闲话少说,咱们直接上脚本
2014-06-27 15:46:29
396
基于HTTP在互联网传输敏感数据的消息摘要、签名与加密方案
变成固定长度的短消息,它类似于一个自变量是消息的函数,也就是Hash函数。数字摘要就是采用单项Hash函数将需要加密的明文“摘要”成一串固定长度(128位)的密文这一串密文又称为数字指纹,它有固定的长度,而且不同的明文摘要成密文,其结果总是不同的,而同样的明文其摘要必定一致。 AES:密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使
2014-06-10 16:54:01
125
原创 蛮力法解字谜游戏
ring> wordList; public WordPuzzle(char[][] puzzle, List<String> wordList) { this.puzzle = puzzle; this.wordList = wordList; } /** * Solve the puzzle.<br/> * result:
2014-05-17 07:13:42
68
Java集合类接口概览——Java Collections Overview
Class diagrams:http://www.jroller.com/VelkaVrana/entry/java_1_6_collections_class
2014-05-14 08:35:58
84
原创 《深入理解Java虚拟机》读书笔记——Mindmap of "Understanding the JVM"
。 After reading the book "Understanding the JVM" (isbn: 978-7-111-42190-0) written by Zhiming.Zhou, I draw this mindmap to help understanding and memorizing some ideas of this book. If sharing the links below violates the copyright of the boo
2014-04-28 20:35:15
93
Java实现基于回溯的迷宫搜索算法 --- Backtrack Based Maze Searching Algorithm in Java
aze[maze.length - 1].length - 1]) is the exit; eg. 0, 1, 1 1, 0, 1 1, 1, 04. horizontal, vertical and diagonal moves are allowed; Question:Find out all the possible ways out and figure out the shortest one. Solution:0. start from the entr
2014-04-15 20:02:00
87
原创 jenkins error: "No valid crumb was included in the request"
s included in the request"jenkins new job -> copy existing job -> click OK -> "No valid crumb was included in the request" 二、运行环境(Environment):apache + jboss-as-7.1.1.Final,Windows XP SP3,jdk 1.6.0_33 三、错误原因(
2014-04-04 10:51:07
220
原创 jQuery + jQuery Mobile 实现省市二级下拉列表页面
现:1.省市json数据,来自:http://www.cnblogs.com/jinzhao/archive/2012/04/01/2428142.html/** * 省市json数据 */var provinceAndCityArray = [{ name: "北京", cities: ["西城", "东城", "崇文", "宣武", "朝阳", "海淀
2014-01-01 00:56:27
114
原创 gpg4win+thunderbird+enigmail实现电子邮件签名与加密
而使收信人可以确认邮件的发送者,并能确信邮件没有被篡改。 2.GPG:即GnuPG,是PGP标准的一个免费实现。 3.非对称加密:公钥、私钥互补存在,公钥加密的只能用私钥解密,私钥加密的只能用公钥解密。可以创建口令来保护私钥不被盗~~窃滥用。创建了以后后,在解密信息、数字签名、加密文件的时候需要键入私钥保护口令。 4.数字签名和邮件加密:甲给乙发邮件,甲先用消息摘要算法(MD5)生成一个该邮件的128位特征值,然后甲用自己的私匙将上述的128位的特征值加密,附加在邮件后,
2012-05-29 22:45:54
660
原创 gpg4win+thunderbird+enigmail实现电子邮件签名与加密
而使收信人可以确认邮件的发送者,并能确信邮件没有被篡改。 2.GPG:即GnuPG,是PGP标准的一个免费实现。 3.非对称加密:公钥、私钥互补存在,公钥加密的只能用私钥解密,私钥加密的只能用公钥解密。可以创建口令来保护私钥不被盗~窃滥用。创建了以后后,在解密信息、数字签名、加密文件的时候需要键入私钥保护口令。 4.数字签名和邮件加密:甲给乙发邮件,甲先用消息摘要算法(MD5)生成一个该邮件的128位特征值,然后甲用自己的私匙将上述的128位的特征值加密,附加在邮件后,再
2012-05-29 22:42:58
318
javascript 检验密码强度 -- 字符 数字 符号
* -101: too short * -102: too long * 1: weak * 2: medium * 3: strong */var testPwdStrength1 = function(pwdText){ var pwdStrength = 0; if (typeof pwdText === "string") { if (pwdText.length < 8) {
2012-03-14 13:30:22
108
Ubuntu-cloner
2009-10-17
ubuntu 速成手册
2008-11-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人