从SQL查询结果随机取一条数据

最近工作中会涉及复杂的SQL语句,还是挺有意思的。以前想写没有应用场景,现在正好可以多锻炼锻炼。我觉得在实际开发中,程序代码并不是最难的,最难的还是SQL。SQL逻辑性最强,而且还要很清楚表设计,业务场景。特别是复杂的业条场景下提炼数据,要考虑到功能,性能,是否会锁表。

需求:有一张表保存诺干条广告信息。当APP启动时,根据登录用户所在的区域,随机取出一条广告返回,作为启动页。
继续阅读“从SQL查询结果随机取一条数据”

[原创]通用验证工具2.0

两年前,我在这里发布了”JAVA通用验证工具”,并开源共享到 github 上。在之后的项目中,也是有使用的,算得上是经历了线上的考验。与其他如:Spring Validator,Apache Validator相比,主要有几个优点:

1.无第三方依懒引入,更轻量更容易扩展。
2.对于JAVA对象支持分组,根据不同业务场景验证必要字段。
3.对Android提供独立支持,验证返回资源引用ID。
继续阅读“[原创]通用验证工具2.0”

Nginx启用php支持

在apache中启用php很简单,apache有phpmodule模块,集成进去就OK。在nginx中启用php支持稍有些不同。

1、nginx的worker进程直接管理每一个请求到nginx的网络请求。

2、对于php而言,由于在整个网络请求的过程中php是一个cgi程序的角色,所以采用名为php-fpm的进程管理程序来对这些被请求的php程序进行管理。php-fpm程序也如同nginx一样,需要监听端口,并且有master和worker进程。worker进程直接管理每一个php进程。
继续阅读“Nginx启用php支持”

Amazon的pem文件转换为公钥

最近使用亚马逊云的服务器翻墙,效果挺好,看youtube没一点问题,上网也稳定。前天为了让手机平板也能翻墙花了少工夫。原因是从ios9以后,ios平台不允许使用pptp连接。于是用strongaws+xl2tp搭建vpn。详细过程就不说了,反正折腾了个通宵。要么是ios能连,android不能。要么是windows能连,手机不能。不过现在问题都解决了,有时间再写成日志。vpn建好之后在linux下连接vpn,我用的是debian 9系统。因为亚马逊使用的是密钥边接方式,所以需要导入密钥。从服务器下载回来的是pem格式,可以用下面的方式转:
继续阅读“Amazon的pem文件转换为公钥”

2018,微变

弃我去者,昨日之日不可留;
乱我心者,今日之日多烦忧。

上完最后一天班,明天就要回家了。对于中国来说,农历年春节才是最盛大的节日。回忆起一年的所有,像是一个成绩中等的学生交的答卷,可能这是大多数人的成绩吧。最近想了各种事情,不断地整理思绪。我觉得人每到一个阶段都会面临某些相同问题,因为阅历不同或早或晚,也因为决定不同,导致下一个阶段遇到的问题会有差异。最后就像一颗树,生出许多分支,所以我们不一样。
继续阅读“2018,微变”

制作码牌

目前最流行的支付之一是一码付。公司因业务扩展,需要给商户制作大量收款码。以往的制作流程是,由后台生成支付二维码,再由美工PS到模版里,最后出来码。但是这样的效率太低,一天也只能做百来个,还可能容易出错。于是诞生新的需求,希望靠程序解决。
继续阅读“制作码牌”

近期的工作

打开电脑,现在北京时间是2017-11-17 3:56。在深圳这座充满激情的城市,每天深夜和清晨都会迸发出很多灵感。有时候一些突如其来的思绪会让我兴奋地睡不着,就像现在,实在忍不住起床大干一场。
继续阅读“近期的工作”

修改Linux系统最大连接数限制

生产环境redis总是会报 Redis too many open files error 连接问题。用命令连接Redis,抛出 ERR max number of clients reached 。开始以为是redis客户端连接数设置问题,于是把配置文件 maxclients 设为 20000。重启程序运行一段时间后,问题依旧。看来这个问题不只是redis服务端配置连接这么简单。
继续阅读“修改Linux系统最大连接数限制”

原创 Mybatis Generator 插件分享

相信很多java项目都会用到MyBatis。MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。

以前使用Mybatis时,都会用基于XML的配置。XML配置方式虽然灵活但烦锁,所以后面又有了基于注解的配置。但是基于注解配置的方式又不够灵活。比如Mybatis强大的动态SQL语句功能,如果使用注解,只能用代码实现相应的Provider达到相同功能。为了解决这个问题,以前自己定过一些使用规范(增、删、改操作用注解,查询用XML配置),也按这个规范写过一个ORM框架。自己写的框架苦于精力有限,没有维护,有些功能不够完善,所以没有在大项目中使用。直到有一天发现Mybatis Generator,我觉得一切都解放了。
继续阅读“原创 Mybatis Generator 插件分享”

log4j2之ThreadContext

系统中使用log4j2作为日志系统,然而在高并发的情况下,多次请求的日志参杂在一起,要跟踪某个用户一次的请求操作所有日志是很麻烦的。幸运的是log4j中有相应的解决方案。

NDC(Nested Diagnostic Context)和MDC(Mapped Diagnostic Context)是log4j种非常有用的两个类,它们用于存储应用程序的上下文信息(context infomation),从而便于在log中使用这些上下文信息。NDC采用了一个类似栈的机制来push和pop上下文信息,每一个线程都独立地储存上下文信息。比如说一个servlet就可以针对每一个request创建对应的NDC,储存客户端地址等等信息。MDC和NDC非常相似,所不同的是MDC内部使用了类似map的机制来存储信息,上下文信息也是每个线程独立地储存,所不同的是信息都是以它们的key值存储在”map”中。
继续阅读“log4j2之ThreadContext”

使用proxy_balancer模块做负载均衡

使用apache+tomcat集群多个方案,以前我是用的mod_jk。这种集群虽然性能好,但是较复杂。apache自带的负载均衡模块proxy_balancer简单又正好满足需求。所以选用这种方案。

我查资料有个习惯,就是首先从官网获取信息。因为官网的文档不仅是最新,相信也是最准确的。可是这一次我错了,如果按官网的文档操作没有问题就不会写这篇日志了。
继续阅读“使用proxy_balancer模块做负载均衡”

一次集成aar的经历

公司和某知名支付公司合作,互相交换渠道。对方使用我们的扫码和公众号、服务窗支付。我们使用对方的支付宝APP支付。一切准备工作弄完后开始接入。

对方扔过来的sdk是aar的,当时就傻眼了。以前只用过jar,没用过aar。于是上网恶补了这部分的知识。不禁感叹到,如果aar早些出来,当时就不用那么辛苦手写布局了。
继续阅读“一次集成aar的经历”

生活是一种态度

最近有点忙,忙得有点累。好久没有总结和省视自己,一时间有很多想记录下来的。不记录怕忘掉,毕竟这种混身充满正能量的感觉不是每天都有。

随着年龄的增长,看得淡的东西多了,很多也就记不住。记不住也许是因为不在乎。可是很奇怪的是,有一些小事却被潜意识深深地记在了心里。可能当时自己也不知道,但是过了很久,突然有一天能想起来,然后发现,当时的那些被拿来调侃的话也蛮有道理的。
继续阅读“生活是一种态度”

芈月传全集

20151228120305

今天一同学突然找我,问我看不看芈月传。我想了很久,为什么要问我看不看这个呢?原来是想问我有没有办法搜到芈月传全集。

之前我发过盗墓笔记第一季的全集资源,那些资源是怎么来的呢?都是P2P来的。这个P2P不是网贷,而是peer-to-peer的缩写。我相信看这篇文章的人对P2P技术和原理不感兴趣,所以不再描述。这里主要讲用P2P工具搜索出未发布的电影。
继续阅读“芈月传全集”

2015年8月29日凌晨

凌晨3点多梦醒,本来想继续睡的,却怎么也睡不着,各种思绪在脑海中飘浮,突然觉得有一点东西要写。

从高三起就有写网志的习惯,用于总结各种事或者做技术分享。到后来朋友圈泛滥,整个互联网是越来越浮燥,我和朋友们的网志更新也越来越少。最近因为忙,没有时间分享JAVA NIO推送,不过我遇到了比这个更值得分享的事……
继续阅读“2015年8月29日凌晨”

盗墓笔记(第一季完)

38dbb6fd5266d0164f3a39c1922bd40735fa3533

据说盗墓笔记是一部旷世之作。我没看过小说,但是光是这个主题就足够吸引了我。虽然拍成的影视作品特效差,还有那句“交给国家”的狗血台词。但依然阻止不了无聊的人们看无聊的剧情。客观来说,还是比其他翻拍的毁经典的电视剧好得多。

在爱奇异下每周只播出一集,付费VIP可以观看后面的剧情。为了照顾大家,以下是我用p2p搜索提取出来的结果。直接复制下载链接,或点右键,用QQ旋风、迅雷等下载工具下载即可。全部是720P高清。

我会持续更新,直到大结局。因为版权关系,所以请大家低调。
继续阅读“盗墓笔记(第一季完)”