完全随机发红包的php算法实现 作者: 灯小笼 时间: 2018-10-18 分类: 开发 评论 题目:有金额M元,给N个人发红包,最低0.01元,完全随机,不设上限,全部金额都需发放出去。 思路:可以借鉴发牌的算法,将金额以最小发放单位0.01元换算,等价于`M*100`张牌。那么我们要做的是,从`M*100`张牌里边随机抽出`N-1`张牌,计算这`N-1`张牌中间隔出来的`N`个区间的差值即可。 - 阅读剩余部分 -
lombok注解后的代码不能生成完整javadoc? 作者: 灯小笼 时间: 2018-09-22 分类: 开发 评论 将[Lombok](https://www.projectlombok.org/)注解应用到一个项目中可以大大减少在IDE中生成或手工编写的样板代码行数。这样可以减少维护开销,减少bug,提高类的可读性。 在idea中要使用lombok是很简单的事情,只需要安装一个[lombok plugin](https://www.projectlombok.org/setup/intellij "lombok plugin"),然后在pom.xml加入对[lombok](https://www.projectlombok.org/setup/maven "lombok")的依赖即可。 与任何技术选择一样,使用Lombok既有积极的作用,也会有消极的影响。而最典型的不好的一面就是,将源代码生成javadoc的时候,因为源码里边使用了lombok,只声明了private的属性,而未编写setter/setter方法等,最后生成的文档当然就不会包含这些属性的getter和setter方法。先通过一个简单的例子复现一下这个场景。 - 阅读剩余部分 -
jyaml解析float类型的问题 作者: 灯小笼 时间: 2018-09-13 分类: 开发 评论 今天在使用[jyaml](http://jyaml.sourceforge.net/)解析一个配置类的时候,发现一个问题: * 整型和字符串的解析都没有问题 * float类型的解析则总是返回`0.0F`,无论是对值用引号包括,或者在后面加上大写的F,都是不行的。 - 阅读剩余部分 -
Redis很“忙” 作者: 灯小笼 时间: 2018-09-04 分类: 架构 2 条评论 最近redis很“忙”,一到上午10点左右,redis就频繁出现各种报错,大部分的场景还好,我们对cache的异常进行了捕获,只是在日志里边记录一下,而不会抛出异常,所以顶多就慢一些而已。不过,还是有让我们也不得不忙的场景出来: 1、有的场景使用redis缓存校验码,比如用户通过手机验证码登录时,明明发送验证码成功,明明输入正确的验证码,但是就是提示验证失败。 2、随着每个依赖redis的服务不断变慢,网站不断出现502,最后,基本上不能访问了。 于是,运维人员不得不一声令下,重启redis。终于,作为cache的redis内存占用量急剧下降,连接数也迅速降低,网站也很快恢复稳定,一切似乎完美地回归了。 这样的事情重复了几天,大家找到规律了,于是索性定了个定时任务,每天凌晨5点的时候,重启一下redis,为即将躁动的10点偃旗息鼓,杀杀他的威风。 不过,作为有技术素养有技术追求的团队,怎么能这样就认怂了呢? - 阅读剩余部分 -
一场mysql查询引起的“卡顿” 作者: 灯小笼 时间: 2018-09-03 分类: 架构 评论 一般我们说优化mysql,总是会将着眼点放在mysql的慢查询的优化上,或者字段的数据类型,mysql的分库/分表,读写分离,异或事务这些看上去高大上的东东上。但是,对于一些更加基础或者更加常识的地方,往往会加以忽视。就比如,本文将要提到的:mysql的查询本身的优化。 这次接到的优化任务出现的背景是: 我们有一个内部电话呼叫的系统,在下午使用客服相对较多的时候,在很随机的情况下,会出现突然的卡顿,这种现象维持的时间很短,检查的时候,往往发现cpu、内存、负载、网络,都很正常,查询错误日志也看不到异常。 系统用的是阿里云,2C4G,看负载的曲线也维持得很小很平稳,内存消耗也没有达到瓶颈。中间一度怀疑过对缓存的使用有问题,因为有很多临时数据都是通过cache在传输和保存的,调用频率也很高。于是,负责此项目的同学也做过很多方面的优化,想过很多招数。比如: 1、临时数据的保存从全量改为增量,大大降低了数据传输的量。 2、将数据库改成长连接,减少连接使用量。 原来我们使用的数据库是由阿里云提供的,后来降配了,长连接经常出现连接数不够的时候,又改为普通连接了。最后,我们又把mysql改成了自建,连接数2000,还是够用的。不过,即使使用长连接的时候,依然会出现卡顿,索性,就一直维持着使用普通连接了。 - 阅读剩余部分 -
利用wget抓取Caddy文档 作者: 灯小笼 时间: 2018-09-03 分类: 工具 评论 一直以为,抓取网站整站,要么需要一个非常牛的工具,要么自己用curl之类写一个。这次想把caddy的英文文档的站点做个镜像的时候,竟然发现可以直接利用wget来实现,还真是小瞧了这个常见的工具了。 wget的参数的详解,网上已经很多了,就不再copy了,有兴趣详细了解的朋友可以参考下面的链接: * * 首先,我想做caddy的doc的镜像的原因是因为经常访问不了,也就是说,不想通过代理才能访问,所以,我需要使用代理的相关命令。因为caddy是https协议,所以我export一个变量https_proxy来作为代理。 - 阅读剩余部分 -
如何平滑重启Caddy 作者: 灯小笼 时间: 2018-09-01 分类: 工具 1 条评论 网站讲究高可用,讲究不间断服务。而对于刚接触caddy的我们而言,修改配置文件是加家常便饭,比如:增加日志监控,增加一个301重定向什么的。那么修改了配置文件,配置文件是否配置正确呢?配置后又该怎么重启呢?如何确保重启过程的不间断服务呢?如果出现服务挂掉该怎么确保服务的自动启动呢?这一系列的疑问,我们今天来一一释怀吧。但是,需要相信的是,caddy作为一个新生代的web服务器软件,这些方面肯定会考虑到的。本文将参考官方的[命令行模式](https://caddyserver.com/docs/cli)文档,为这些问题一一解答。 > ps.关于Caddy的命令行参数,也可以参考我翻译的中文文档:[Caddy命令行参数](/caddy/cn-doc/cli.md) ## 如何检查配置文件正确性 caddy指定配置文件的参数是`-conf`,那么怎么验证配置文件是否正确呢?就像nginx的`-t`参数一样,caddy有`-validate`参数可供使用。看一下官方文档: > -validate > Parse the Caddyfile and exit. If syntactically valid, a message will be printed to stdout and the process log (if any) and will exit with status 0. If not, an error will be returned with a non-zero exit status. 解析Caddyfile并退出,如果句法结构正确,将会通过标准输出打印一条信息,记录日志(如果配置了),最后会退出,退出码为0。否则,会报出相应的错误信息,状态码为非0。 - 阅读剩余部分 -
如何解决Caddy的重定向(redir)和重写(rewrite)的冲突 作者: 灯小笼 时间: 2018-08-31 分类: 工具 评论 网站改版后,很难确保新的网址和旧的网址保持一致,因此总需要写一些重定向规则,确保原来被搜索引擎抓取的页面能重定向到新的URL。对于一个基于typeocho的php类型的网站,重写也总是必要的。在使用nginx服务器的时候,重写和重定向是在一起的,并没有什么歧义产生,但是,到caddy里边,这两个概念是区分开的。更为不好的地方在于,两者并存的时候,会出现意想不到的结果。 比如,最早本站发现有一些老页面的流量过来,但是会进到404页面。 ``` 5 203.208.60.50 - - [26/Aug/2018:20:53:44 +0800] "GET /article/223672015323021312 HTTP/1.1" 404 2057 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" ``` 按照官方说明,在Caddyfile中使用__[redir](https://dengxiaolong.com/caddy/cn-doc/http.redir.html "redir")__命令予以重定向。 ```caddy redir 301 { /article/223672015323021312 /article/2017/06/php-git-http-server.html /article/2017/06/5.html /article/2017/06/php-git-http-server.html } rewrite { to {path} {path}/ / } ``` 重启caddy,但是发现并没有生效,还是和之前效果一样。 - 阅读剩余部分 -
composer常用高级技巧 作者: 灯小笼 时间: 2018-08-29 分类: 开发 评论 [Composer](https://getcomposer.org/)作为一个常用的php包管理工具,已经成为PHP项目包管理事实上的标准了。大部分开源的php项目,都可以从里边找到composer.json的身影。基本的知识本文就不介绍了,而是挑选一些日常开发中遇到的比较棘手又常见的几个问题予以记录。如:使用镜像、使用私库、如何使用非http项目、如何修改版本号等等。 ## 使用镜像 使用composer的第一要素就是配置中国镜像,否则,你将一直抱怨这个产品根本没法使用,你对`composer`的影响就会一直处于停摆状态。 一般我们使用作为最经典的配置了。 ```bash composer config -g repo.packagist composer https://packagist.phpcomposer.com ``` - 阅读剩余部分 -
Adobe After Effects CC 2018 Mac版如何使用中文 作者: 灯小笼 时间: 2018-08-25 分类: 默认分类 3 条评论 安装完Adobe After Effects CC 2018以后,发现界面是英文的,而在设置里边也找不到切换语言的地方。经历一番百度搜索以后,大都是说把Contents/Dictionaries/里边的中文目录和英文目录兑换一下。但是,换了以后依然故我,还是英文的。经过一番动手实践,终于找对地方了。 先找到AMT对应的目录。 查找路径是:前往=>电脑=>Macintosh HD,资源库=>Application Support=>Adobe=>Adobe After Effects CC 2018 => AMT ,找到application.xml文件。 - 阅读剩余部分 -