读源码学MYSQL系列(二)decimal存储转化函数decimal2bin 问题来源 高精度计算是计算机工程实践中非常重要的内容,在涉及到精确计算的项目中,思考过数据库的设计。因而比较好奇MYSQL中是如何实现对decimal的支持的。本文通过源码阅读,分析理解decimal的存储及各种运算转化。参考源代码:https://github.com/google/mysql/blob/master/include/decimal.hhttps://github.co...
AWS EC2 ubuntu新增用户(密钥登录) AWS上的EC2主机默认采用了更为安全的密钥连接,在保留密钥连接的情形下,如何新增用户呢?步骤1.创建一对新的密钥 进入AWS的EC2控制台,查看左边的菜单列表。选择《网络与安全》—《密钥对》—《创建密钥对》,然后选择pem文件格式,保存生成的私钥。该私钥为新用户登录使用,注意不要丢失和泄露。2.创建新用户 登录系统默认的ubuntu用户,按如下命令操作:sudo adduse...
MAC升级nodejs遇到的bug 前几天需要把MAC上的nodejs升级到最新的稳定版,遇到一个少见的问题,查了半天最后才解决。记录如下:升级流程第一步,查看当前版本。node -v第二步,安装n工具,专门用作nodejs版本管理的插件。sudo npm install -g n第三步,安装最新的LTS版本。sudo n lts第四步,验证。node -v问题安装完成后,敲node命令时,出现如下问题...
读源码学MYSQL系列(一)decimal类型用法及存储实现 最近在项目中用到了许多浮点数,精度要求较高,小数点后有4位甚至8位的,思考了一下,类似需求在工程计算、数值计算、股票金融、数字货币等场景都会出现。...
linux禁止screen打开会话时改变窗口大小 问题来源 在后台运行程序时,经常需要常驻后台。现有的terminal一旦断线程序就会结束,screen提供了一个远程保持会话的机会,将程序运行在screen打开的会话中,重新登录上远程服务器后,可以恢复到原来的会话。类似的工具还有tmux。 screen在使用过程中,因为远程会话窗口具有标准大小,因而会改变terminal终端的大小,在使用过程中窗体大小突然变了,非常烦。根据博主的经验,在...
记一次阿里云木马排查过程 问题描述接到阿里云报警邮件,说是一台ECS有恶意进程。查看阿里云的安全详情,发现如下情况:登录到服务器上检查/bin目录,发现该文件确实不对,大小变成的1.1M,类似的还有netstat。如下图:正常ubuntu系统下的ps才96K,netstat大小为117K,上述命令文件被恶意窜改了。此外,还发现启动脚本(/etc/rc1.d, /etc/rc2.d, /etc/rc3.d, /et...
当跨域遇上浏览器缓存 问题描述在做一个图片相关的项目时,需要用canvas对图片进行在线绘制。图片素材放在了CDN上,因而canvas的访问带来了跨域问题。为了解决跨域问题,在CDN上配置了跨域访问头。如下所示:Access-Control-Allow-OriginAccess-Control-Allow-Methods然而配置好了跨域请求头之后,浏览器仍然提示跨域访问被拒绝。百般费解,为什么CDN已经配置...
curl命令测试网络请求中DNS解析、响应时间 经查遇到需要测量网络请求时间的问题,包括DNS解析、连接、传输等时间。Linux下的curl命令可以很好的测量网络请求。如下curl -o /dev/null -s -w %{time_connect}:%{time_starttransfer}:%{time_total} http://www.baidu.com 0.034:0.066:0.067-o表示输出结果到/dev/null,-s
nginx日志分割(log rotation) nginx没有内置日志分割功能,容易造成日志累积,文件越来越大。必须借助于外部命令或者工具来分割日志。本文介绍通过几条命令来分割日志。日志分割脚本将实现分割日志的脚本放在/usr/local/bin/rotate_nginx_log.sh,内容如下#!/bin/sh# Get yesterday's date as YYYY-MM-DDYESTERDAY=$(date
pm2管理nodejs服务 安装npm install -g pm2基本用法启动进程pm2 start app.js --name my_service 或者,不同版本也可以这样启动pm2 start bin/www --name my_service–name参数指定启动后的进程名。查看所有进程pm2 list查看日志pm2 logs查看指定进程的日志pm2 logs my_service //通过进程名称
mysql数据库导入导出 有时候因为服务迁移,需要迁移数据库,可以使用mysql的导入导出功能。导出数据库mysqldump -u<username> -p<password> <database> > test.sql将database数据库导出到test.sql文件中。示例mysqldump -uguest -p12345678 school > test.sql //将school数据库导出导出表mysqld
git基础问题汇总 用了一段时间git,发现许多用法记不住,立贴写下来吧。git简写命令修改配置文件~/.gitconfig,内容如下:[alias] co = checkout ci = commit st = status pl = pull ps = push dt = difftool l = log --stat cp = cherry-pick
mysql用户创建与授权 在多用户情形下,为了避免用户访问或者操作不属于自己的数据,需要使用用户权限将不同用户的数据隔离开来。mysql的用户授权可以精确到表、操作和某个IP地址。创建用户create user 'username'@'host' identified by 'password';用法说明username : 用户名host : ip地址,用户在哪个主机登录,如果是本机可以使用localhost,如果允许任意
web性能测试:apache benchmark(ab) 开发完网站或者web接口后,一个比较负责任的工作就是测试一下接口性能,也叫做压力测试。web接口的性能直接关系服务的稳定和并发量,一个数值评估通常可以给服务能力给出一个比较好的指导。本文介绍比较常用的web性能测试工具ab(apache benchmark)。安装ab命令来源于apache工具包,ubuntu可以通过下面的命令安装:sudo apt-get install apac
apache2三种模式及参数调优 问题来源一般配置应付小规模的访问量其实没什么问题,只是最近我们设计了一些定点抢优惠的促销活动,所以在特定时间点,访问量会比较集中。峰值差不多达到了每秒1000到2000次的访问,而且还在继续增长中。我们一直判断是数据库卡死的问题,后来发现,原来了服务器挂了。进一步定位,发现是apache接收了太多了请求,起了无数进程,内存用爆,机器卡死了。如何配置apache,最大程度的发挥系统性能呢?apache
apache2日志格式 ubuntu 16.04中,默认的apache2配置文件位于/etc/apache2/apache2.conf其中可以找到LogFormat语法,定义了日志格式如下:LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combinedLogFormat "%h %l %u %t \
安卓apk反编译、修改、重新打包、签名全过程 首先明确,反编译别人apk是一件不厚道的事情。代码是程序员辛苦工作的成果,想通过这种手段不劳而获,是不对的。这也说明,代码混淆是非常重要的。本文抱着学习的态度,研究在一些特殊的情况下如果有需要,该怎么反编译apk。工具简介apktool,编译和反编译apk,从apk中提取图片和布局资源dex2jar,将可运行文件classes.dex反编译为jar源码文件jd-gui,查看jar源码文件反编译apk
获取微信浏览器的真实IP地址 问题来源获取用户客户端IP地址是一个很简单的需求。用户打开网页,发送一个HTTP请求,后台从中提取出IP地址。但是,在使用微信打开网页时,发现获取到的IP地址和在浏览器打开所得到的IP地址不一样。用不同的浏览器,测试多次,都得到一个这样的结论。中间一定是出了什么问题。Solution其实这是使用了代理的问题,后台直接从HTTP头中获取到的host是最后一次经过的代理的地址。幸运的是,http包在转发
见证微信小程序之火热 上周,微信小程序(应用号)终于在网络上炸锅了,朋友圈、QQ、技术社区等,讨论得热火朝天。甚至还有程序员在直播平台,解读微信小程序种种。这种程序员乃至全民都关注某个产品事件的盛况,还真是很少见。抱着凑热闹的态度,本人也加了几个QQ群,跟踪了事态的发展。震惊于劳动人民的伟大智慧,记得是凌晨传出来的有200个内测邀请的消息,白天就有各种流言和消息,内测人士揭秘,还有流传出来的微信开发者工具,不知道是
直方图最大矩形 问题给定直方图,求直方图中最大的矩形面积。例如下图,用数组表示为[2,1,5,6,2,3]。对应的最大矩形面积为10.枚举对每个左边界,可以枚举其右边界的位置,寻找面积最大值。int h[] = [2,1,5,6,2,3];int length = 6, max = 0, s = 0;for(int i = 0; i < length; i ++) {