- 博客(323)
- 收藏
- 关注
原创 Web服务器应该怎么判断用户的语言版本
上节我们知道浏览器根据什么发送accept-language请求头,那么这节我们说说服务端应该根据什么来决定用户的language呢?1 可以根据request请求中的accept-language请求头。2 可以根据IP的GEO地理位置决定。3 可以添加一个User的Language Preference Cookie,来决定用户想使用哪种语言。我觉得
2016-03-10 23:32:05 2170 1
原创 三分钟教你学Git(二十) - revert merge会出现的问题
比如当我们git revert的时候,git revert Git会抱怨:is a merge but no -m option was given这是因为你revert的那个commit是一个merge commit,它有两个parent, Git不知道base是选哪个parent,就没法diff,所以就抱怨了,所以你要显示告诉Git用哪一个parent。
2016-03-10 23:27:26 21605 2
原创 PHP和MySQL的timestamp转换
在mysql中有三种时间字段类型:DATETIME,DATE和TIMESTAMP。DATETIME以YYYY-MM-DD HH:MM:SS格式的字符串来保存数据;DATE则是只有年月日以YYYY-MM-DD形式的字串;TIMESTAMP字段则是随着记录变化而一个自动更新为当时时间的DATETIMP字段。而程序语言中的timestamp大部分是整数类型,代表从1970年的某个时间开始计算
2016-02-26 21:33:39 8888
原创 Java的StrongReference, SoftReference, WeakReference, PhantomReference的区别
Java一共有四种类型的饮用,StrongReference, SoftReference, WeakReference, PhantomReference。这四种类型的引用与GC有着密切的联系。1 StrongReference, 强引用,最常见,就是我们平常写的引用类型。Object o = new Object();Object o2 = o;o和o2都是强引用。只要
2016-02-25 11:38:05 2089
原创 MySQL bigint(20)是什么意思?
MySQL中我们建表的时候,类型可以用bigint(20), 这是什么意思呢?首先我们看bigint, MySQL的整型类型有这样几种:类型 占用字节tinyint 1smallint 2mediumint 3int 4bigint 8这是决定存储需要占用多少字节,那么后边的数字(M)代表什么
2016-02-21 10:47:53 76616 1
原创 Java中抛出RuntimeException为什么不用显示声明
我们知道Java的异常类型体系结构如下: Throwable / \ Exception Error / \ RuntimeException我们可以看到RuntimeException的继承体系是Exception子类。而Exception还有其它类型的异常,我们统一称为非Ru
2016-02-17 16:57:57 14152
原创 Mac上安装XAMP环境
Mac上由于自带Apache和php,所以只需要再安装一个mysql然后集成到一起即可。我们可以使用brew工具,brew就相当于redhat linux的yum和ubuntu的apt-get,在安装和管理软件方面非常方便。首先我们可以先看看apache安装到哪里了,版本是什么。sudo apachectl -vsudo apachectl restartsudo apac
2016-01-20 10:48:01 1697
原创 JVM分析工具链(三) - jstat和hprof
5 jstat, JVM统计监测工具。jstat -gc 11989 500 4上边的命令用来统计garbage collection的情况,11989是vmid,不是pid,进程号,这点需要注意。上述命令会列出很多列,每个列的意思如下:S0C、S1C、S0U、S1U:Survivor 0/1区容量(Capacity)和使用量(Used)EC、EU:Eden区容量和使用
2016-01-18 13:23:57 1358
原创 JVM分析工具链(二) - jmap和jhat
3 jmap, Java Memory Map, 用来查看堆内存使用状况。jmap -heap pid查看进程堆内存使用情况,包括使用的GC算法、堆配置参数和各代中堆内存使用情况。jmap -histo:live 21711 | less 查看堆内存中的对象数目、大小统计直方图,如果带上live则只统计活对象。还可以用jmap把进程内存使用情况dump到文件
2016-01-18 13:04:46 973
原创 JVM分析工具链(一) - jps和jstack
1 jps, (Java Virtual Machine Process Status Tool) -m 输出传入main方法的参数-l 输出main类或Jar的全限名-v 输出传入JVM的参数jps -m -l -v15351 org.apache.catalina.startup.Bootstrap start -Djava.util.logging.config.
2016-01-18 12:03:37 1517
原创 Spring in Action读书笔记 (二)
上节我们讲解了Spring的DI思想和一些用法,这节我们开始看看Spring的AOP思想。AOP是Aspect Oriented Programming,翻译过来就是面向切面的编程。一个系统包括很多部分,有业务逻辑的(功能性的),有非业务逻辑的,也就是我们说的竖着的,和横着躺的。比如Logging功能,Audit功能,Security功能,Transaction功能等都是通用的
2015-12-23 18:18:59 809
原创 Spring in Action读书笔记 (一)
Spring的两大思想:1 依赖注入,DI,或者控制反转,IOC。2 面向切面编程,AOP。Spring Container,控制bean之间的关系,依赖注入。达到bean和bean之间松耦合。三种方式来wire bean:1 显示xml配置方式2 显示Java配置方式3 隐式的bean discovery和automatic wiring。第三种方
2015-12-22 18:06:58 1142
原创 怎么样部署新的code到一个集群里
如题,怎么实现呢?首先需要提供控制每次部署的粒度,是要保证50%的service可用,还是每次最多部署10%的机器,这些都是策略。然后对于每台服务器来讲,都要执行以下步骤:1 首先将自己从VIP或load balancer中剔除或disable掉,使自己不在serve流量。2 停止服务器进程。3 清理环境,将之前的包删除。4 将新的包,代码版本(解释
2015-12-11 11:18:38 756
原创 用jconsole可视化JVM的运行状态
JConsole是从Java 5中开始引入的一个用于对JVM性能和资源消耗进行监控的图形化工具。JConsole可以连接本地的Java程序,也可以连接远程的Java程序。jconsole的可执行文件在JAVA_HOME的bin目录下。可以直接jconsole运行,然后使用GUI选择connect哪个程序。或者jconsole process_id 这种方式适用于jconsole
2015-12-03 14:42:10 1280
原创 Guava中的Optional来表达null
写过Java的人都知道有一种exception叫做NullPointerException。所以写的好的程序都是对输入输出进行null检查,也就是防御性编程。但null具体表示什么意思,大家知道吗?有人说null就是空对象,然后呢?空对象表示什么呢?表示操作成功了,但是结果是空对象,还是操作没成功,所以是空对象?这两种意思到底可以是哪种呢?正因为null可以被解释成这两种意思,所以
2015-11-19 13:49:27 3060
原创 Apache Ant简介
用一句话介绍Ant就是执行一系列定义好的过程,就像Make一样。像很多的自动化脚本一样,但是还额外提供各个target之间的依赖关系管理。由于Ant没有包依赖管理,所以转Maven的挺多的,但不管怎么样,知道Ant的思想和能做什么还是值得的。Ant是用Java写的,内置了很多现成的task,比如compile,assemble,test和run等。用户还可以自己写自己的antlib来满
2015-11-18 11:29:41 2555
原创 Mockito为什么不能mock静态方法
因为Mockito使用继承的方式实现mock的,用CGLIB生成mock对象代替真实的对象进行执行,为了mock实例的方法,你可以在subclass中覆盖它,而static方法是不能被子类覆盖的,所以Mockito不能mock静态方法。但PowerMock可以mock静态方法,因为它直接在bytecode上工作,类似这样:import org.powermock.api.mocki
2015-11-11 13:58:46 17576 1
原创 Java ArrayList遍历时删除一个元素
我们知道ArrayList的底层是用数组实现的,如果你删除了其中一个元素,那么后边的元素都会向前移动。所以在遍历时如果删除元素,就要小心了。第一种方法,用数组下标进行遍历,如果需要删除元素,我们从后向前遍历,这样不论有没有元素删除,我们都不会遗漏未被遍历的元素。第二种方法,我们使用迭代器。Iterator itr = list.iterator();while(
2015-11-11 13:46:15 9672
原创 DynamoDB update stream简介
从今年开始DynamoDB又提供了一个新的功能,update stream,它背后是用Kinesis来实现的。什么是update stream呢?update stream就是当你的DynamoDB数据表中的item有变化时,DynamoDB会产生一条update stream,然后你可以从这个stream里边拿出来update stream records,做你想要做的事情。
2015-10-28 17:50:11 1737
原创 使用rsync进行同步
rsync -e "ssh" -rca --delete-after . hongchang.desktop.zhclab.com:/workplace/zhcLab/src/zhcapp/-e代表使用指定的shell,这里使用ssh-r代表recursive-c代表--cvs-exclude,-a代表archive传输方式,比如links,permissions等都会传输
2015-10-28 17:48:49 737
原创 Linux上快速启动一个HTTP server
我们可以利用python来快速启动一个httpserver。# 8999是服务器监听的端口号python -m SimpleHTTPServer 8999python一共提供了三种Web服务器模块:BaseHTTPServer: 提供基本的Web服务和处理器类,分别是HTTPServer和BaseHTTPRequestHandler。SimpleHTTPSe
2015-10-28 17:47:16 10013
原创 小王子读书笔记
小王子天文学家,当土耳其天文学家第一次在国际天文会议上论证他的发现时,没人相信他因为他的土耳其服装。数年后,他穿着一套雅致的西装又做了一番相同的论证。这次,大家附和了他的意见。土耳其天文学家的两次不同待遇揭露了无知人们的恐外症和狭隘民族主义的危害。国王,认为自己统治一切,但徒有虚名,只会命令别人想做的事情而已,非常具有阿Q精神。爱虚荣的人,只想让别人赞美他。
2015-10-15 16:46:33 1119 1
原创 三分钟教你学Git(十九) - 全局,用户,仓库作用域的配置文件
Git的配置文件存储在三个地方,分别可以作为全局的作用域,用户级别的作用域和仓库级别的作用域。这些变量分别存储在三个不同的位置:1 全局作用域的config文件。/etc/gitconfig 文件:包含了适用于系统所有用户和所有库的值。如果你传递参数选项’--system’ 给 git config,它将明确的读和写这个文件。如:git config --system core
2015-09-28 11:17:10 3652
原创 深入理解Git(七) - 神秘的数据恢复
我们知道可以使用git reflog恢复数据,那么git是怎么实现的呢?另外,哪些数据可以恢复,哪些数据不可以恢复呢?比如我们git reset --hard HEAD^将最近的一次commit丢弃,我们可以用git reflog找到丢弃commit的指针,所以我们就可以恢复。git reflogfb1c75a HEAD@{0}: reset: moving to HEAD^a
2015-09-28 11:15:02 2652
原创 深入理解Git (六) - 松散对象
Git在存储数据的时候,存储的都是完整的对象,并不是差异,叫做松散对象Loose Object,有时候你只改变了一点,但是同时会拥有近乎两倍大小的blob对象。这样子做岂不是很不节省磁盘?所以Git会在每次push到远程的时候进行garbage collect操作,当然我们也可以自己手动改进行gc,如:git gc然后查看一下.git/objects下有哪些文件:find
2015-09-03 15:03:16 4486
原创 深入理解Git (五) - commit链的形成
我们新增一个文件比如second,内容为second_information,我们依次执行:先生成blob对象。# git hash-object -w secondabcdef接下来更新cache。# git update-index --add --cacheinfo abcdef second接下来生成tree对象。# git write-
2015-09-03 15:01:54 1416
原创 深入理解Git (四) -微命令下篇
6 git commit-tree 这个命令可以用来生成commit对象,commit对象是tree对象的扩展,除了指引tree对象外,还有一些额外的信息,比如此次commit的info,谁commit的,什么时间等。echo "initial commit" | git commit-tree 4e1ba2916b4b903d2e5a2209cdcca7129a891c2f f
2015-08-12 15:11:29 1816
原创 深入理解Git (三) - 微命令上篇
1 git hash-object以前讲过Git用Hash值作为Git对象的名字,那么具体是哪个命令呢?我们可以先修改一个文件:echo "hongchangfirst" > zhc.conf然后git hash-object -w zhc.conf56166dc42a6a2f694e088694a2a2c90606e28f2d然后我们可以去上节讲的.git/objec
2015-08-12 15:09:42 1605
原创 深入理解Git (二) - 内部的数据结构
三分钟教你学Git只是教我们会用Git了,可是内部的一些实现原理如果我们也知道一些的话会使我们使用起来更加顺手。这个系列就是在你用了Git一段时间之后,并想继续到Git的内部看一下究竟而准备的。Git是来管理数据的,也存储数据,所以可以说也是一个数据库,一个特殊的数据库,不同于RDBMS和NoSQL的数据库,一种索引数据可以快速查找数据变化的数据库。Git为了快速查找数据,将数
2015-08-12 15:04:21 4713
原创 深入理解Git (一) - 元数据
上节我们了解了Git的对象存储方式,那么这节我们看看Git是在哪里存储这些信息,另外,Git仓库是根据什么知道仓库的元信息呢?我们首先git init,git会在目录下创建一个.git的隐藏目录,这个目录里存储了关于这个仓库的所有元数据。Git对象就存在其下的objects文件夹内。所以有必要看一下这里边都还存储了什么东西:首先.git目录下有五个文件夹和三个文件:1 branches
2015-08-10 10:05:49 4117
原创 三分钟教你学Git(十八) - 重写历史
git filter-branch 允许你使用一个单一命令来大范围地更改历史。所以这个命令要慎用。1假如你想对所有的commits删除一个文件。git filter-branch --tree-filter 'rm to_be_deleted_file' HEAD2 假如你想删除某些message中的某些以cr开头的行。git filter-branch --m
2015-07-15 15:56:28 1889
原创 Android建立模拟器进行调试
安装好android开发环境后#列出当前的设备,包括physical和emulatoradb devices#列出可用的设备源android list targetid: 1 or "android-21" Name: ...#根据可用的设备源建立一个虚拟的设备实例, -n 指定名字,-t指定id号。android
2015-07-14 16:28:20 5358
原创 三分钟教你学Git(十七) - 钩子
Git可以定制一些钩子,这些钩子可以在特定的情况下被执行,分为Client端的钩子和Server端的钩子。Client端钩子被operation触发,比如commit,merge等,Server端钩子被网络动作触发,比如pushed commits。那么钩子是放在哪的呢?在.git/hooks/文件夹下。当你init一个仓库的时候,下边会有一些钩子的例子,以.sample结尾。
2015-07-02 16:20:16 19458
原创 三分钟教你学Git(十六) - 统计
有时候想统计仓库的情况,比如代码量,贡献者之类的。1 统计某人的commit数量git log --author="$(git config --get user.name)" --oneline | wc -l2 统计某人的代码量git log --author="$(git config --get user.name)" --pretty=tformat: -
2015-07-02 16:16:24 5239
原创 三分钟教你学Git(十五) - 搜索
1. 空间维度搜索,我们发现经常有需求是想找到某个函数在哪些文件里出现过。git grep在当前working directory下搜索含有某个字符串的文件,要显示行号可以使用-n参数。# git grep -n hongchangzhc.conf:1:hongchangfirst只显示包含的文件和其包含的个数可以使用--count参数。# git gr
2015-06-12 12:49:31 3448
原创 三分钟教你学Git(十四) 之 线下传输仓库
有时候另一个人不能从远程直接clone仓库或者说因为很大,clone很慢或其它原因,我们可以使用bundle命令将Git仓库打包,然后通过U盘或者是其它介质拷贝给他,这样他拿到打包好的仓库后可以unbundle成仓库,达到了共享的目的,这样有时候是很方便的。我们看看具体怎么做:首先我们进入仓库,git status一下看看当前的仓库状态。然后开始打包:git bun
2015-06-08 16:23:36 5349
原创 三分钟教你学Git(十三) - 二分查找
比如说你收到了错误报告,然后你知道前几天明明是好的,但是这几天有好多新的commit被部署了,那么我们怎么迅速的找到第一个引入Bug的commit呢?我们可以使用git bisect,git利用二分查找法迅速找到第一个坏的commit,下边看看具体怎么用就明白了。我们首先告诉git我们要开始binary search了。# git bisect start然后我们告
2015-06-08 16:17:47 3391
原创 三分钟教你学Git(十二) 之 fast-forward
什么是fast forward, 顾名思义,就是快速向前进,Git怎么做到快速的呢?原来如果Git判定可以fast forward的时候,直接修改当前HEAD指针的指向然后再修改当前HEAD指针,说白了就是修改两个指针的指向,而并没有生成新的commit对象。所以当你修改了其中的一个branch的时候,另一个branch也会出现变化,因为引用的是同一个commit对象。
2015-06-08 16:17:09 25050 1
原创 一些常用的加密算法简介 - DES, AES, DSA
DES全称是Data Encryption Standard, 翻译成中文时数据加密标准。DES算法将64位多明文变位64位点密文。AES全称Advanced Encryption Standard,翻译成中文是高级加密标准,是美国联邦政府采用的一种区块加密标准,用来替代DES。它是一种对称密钥加密算法,一般AES先用一个密钥进行加密,之后再用此密钥进行解密。AES在设计的
2015-05-20 17:26:08 2597
原创 三分钟教你学Git (十一) 之 集合运算
1 差集有时候使用Git的时候我们想对比两个branch有哪些不同,比如发code review的时候,如果能有一个命令可以给我们展示两个branch的不同,即差集,那将会很方便。Git有double dot语法可以做这个事情:git log master..hongchangfirst_branch它会将所有在hongchangfirst_branch分支里而不在
2015-05-15 16:18:15 3658
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人